From 26f1381d0d8ce5be41acd77431bc2bf407031ee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 2 Nov 2018 12:09:58 +0100 Subject: [PATCH 01/26] Make `balance::Trait::Balance` require `Member` (#1057) --- substrate/srml/balances/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/srml/balances/src/lib.rs b/substrate/srml/balances/src/lib.rs index 5b633a3d46..cf2f9bc4da 100644 --- a/substrate/srml/balances/src/lib.rs +++ b/substrate/srml/balances/src/lib.rs @@ -106,7 +106,7 @@ impl EnsureAccountLiquid for () { pub trait Trait: system::Trait { /// The balance of an account. - type Balance: Parameter + SimpleArithmetic + Codec + Default + Copy + As + As + As; + type Balance: Parameter + Member + SimpleArithmetic + Codec + Default + Copy + As + As + As; /// Type used for storing an account's index; implies the maximum number of accounts the system /// can hold. type AccountIndex: Parameter + Member + Codec + Default + SimpleArithmetic + As + As + As + As + As + Copy; From e384cec08fe60758820026663a7cd1ed55ef5256 Mon Sep 17 00:00:00 2001 From: azban Date: Fri, 2 Nov 2018 12:31:03 -0700 Subject: [PATCH 02/26] readme: add instructions for running multi-node test (#1055) --- substrate/README.adoc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/substrate/README.adoc b/substrate/README.adoc index 8ca0512976..dc51bee6af 100644 --- a/substrate/README.adoc +++ b/substrate/README.adoc @@ -227,6 +227,17 @@ Or you can join the BBQ Birch Testnet with: [source, shell] cargo run +If you want to see the multi-node consensus algorithm in action locally, then +you can create a local testnet. You'll need two terminals open. In one, run: + +[source, shell] +cargo run -- --chain=local --validator --key Alice -d /tmp/alice --node-key 0000000000000000000000000000000000000000000000000000000000000001 + +and in the other, run: + +[source, shell] +cargo run -- --chain=local --validator --key Bob -d /tmp/bob --port 30334 --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN + include::doc/packages/packages.adoc[] == Documentation From c3809fe962e59e42da55ed601feebe7f82012382 Mon Sep 17 00:00:00 2001 From: Guanghua Guo Date: Sat, 3 Nov 2018 04:05:37 +0800 Subject: [PATCH 03/26] Delete unuse extern (#941) --- substrate/Cargo.lock | 1 - substrate/node/runtime/Cargo.toml | 2 -- substrate/node/runtime/src/lib.rs | 2 -- substrate/node/runtime/wasm/Cargo.lock | 1 - substrate/node/runtime/wasm/Cargo.toml | 2 -- 5 files changed, 8 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index f3ecae6cb5..fb715b0c41 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -1671,7 +1671,6 @@ dependencies = [ "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-api 0.1.0", - "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", "sr-version 0.1.0", diff --git a/substrate/node/runtime/Cargo.toml b/substrate/node/runtime/Cargo.toml index 8add782018..6c86355b25 100644 --- a/substrate/node/runtime/Cargo.toml +++ b/substrate/node/runtime/Cargo.toml @@ -13,7 +13,6 @@ parity-codec = "2.1" parity-codec-derive = "2.1" sr-api = { path = "../../core/sr-api", default-features = false } sr-std = { path = "../../core/sr-std" } -sr-io = { path = "../../core/sr-io" } srml-support = { path = "../../srml/support" } substrate-primitives = { path = "../../core/primitives" } substrate-keyring = { path = "../../core/keyring" } @@ -40,7 +39,6 @@ std = [ "substrate-primitives/std", "sr-api/std", "sr-std/std", - "sr-io/std", "srml-support/std", "srml-balances/std", "srml-consensus/std", diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 998bb6640b..6dad8ca740 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -20,8 +20,6 @@ // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. #![recursion_limit="256"] -extern crate sr_io as runtime_io; - #[macro_use] extern crate sr_api as runtime_api; diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index d998a1069f..dc519d15fb 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -269,7 +269,6 @@ dependencies = [ "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)", "sr-api 0.1.0", - "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", "sr-version 0.1.0", diff --git a/substrate/node/runtime/wasm/Cargo.toml b/substrate/node/runtime/wasm/Cargo.toml index fbabdc4aaa..17ae789bdf 100644 --- a/substrate/node/runtime/wasm/Cargo.toml +++ b/substrate/node/runtime/wasm/Cargo.toml @@ -14,7 +14,6 @@ parity-codec = { version = "2.1", default-features = false } substrate-primitives = { path = "../../../core/primitives", default-features = false } sr-api = { path = "../../../core/sr-api", default-features = false } sr-std = { path = "../../../core/sr-std", default-features = false } -sr-io = { path = "../../../core/sr-io", default-features = false } srml-support = { path = "../../../srml/support", default-features = false } srml-balances = { path = "../../../srml/balances", default-features = false } srml-consensus = { path = "../../../srml/consensus", default-features = false } @@ -40,7 +39,6 @@ std = [ "substrate-primitives/std", "sr-api/std", "sr-std/std", - "sr-io/std", "srml-support/std", "srml-balances/std", "srml-consensus/std", From 94e2589f1e8e30f1b98ecc975a6c80eae0617070 Mon Sep 17 00:00:00 2001 From: azban Date: Mon, 5 Nov 2018 10:21:37 -0800 Subject: [PATCH 04/26] gitattributes: add file and ignore Cargo.lock in diffs and github stats (#1064) --- substrate/.gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 substrate/.gitattributes diff --git a/substrate/.gitattributes b/substrate/.gitattributes new file mode 100644 index 0000000000..9a0309f9e5 --- /dev/null +++ b/substrate/.gitattributes @@ -0,0 +1 @@ +Cargo.lock linguist-generated=true -diff From fcae7ac582bc688780d15169137ab8be458a4755 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Mon, 5 Nov 2018 19:22:26 +0100 Subject: [PATCH 05/26] Switch to libp2p master (#931) --- substrate/Cargo.lock | 486 ++++++++++++------ substrate/core/network-libp2p/Cargo.toml | 2 +- .../core/network-libp2p/src/custom_proto.rs | 10 +- .../core/network-libp2p/src/node_handler.rs | 32 +- .../core/network-libp2p/src/service_task.rs | 2 +- substrate/core/network-libp2p/src/swarm.rs | 259 ++++------ .../core/network-libp2p/src/transport.rs | 4 +- 7 files changed, 455 insertions(+), 340 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index fb715b0c41..27163a40d2 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -132,6 +132,11 @@ dependencies = [ "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" @@ -155,6 +160,15 @@ dependencies = [ "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "base64" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.6 (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.1" @@ -174,6 +188,16 @@ name = "bitflags" 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" @@ -278,6 +302,14 @@ dependencies = [ "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]] name = "cloudabi" version = "0.0.3" @@ -301,16 +333,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)", @@ -425,6 +457,24 @@ name = "crunchy" version = "0.1.6" 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" @@ -443,10 +493,28 @@ dependencies = [ "winapi 0.3.6 (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.6 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" 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)", @@ -474,6 +542,24 @@ dependencies = [ "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +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.2 (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" @@ -524,10 +610,11 @@ 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.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -761,6 +848,15 @@ dependencies = [ "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" @@ -1058,65 +1154,68 @@ dependencies = [ [[package]] name = "libp2p" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-floodsub 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-kad 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-mplex 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-ratelimit 0.1.1 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-relay 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-secio 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-tcp-transport 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-transport-timeout 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-uds 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-websocket 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-yamux 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "stdweb 0.1.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-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-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-core" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.10 (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)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.1.1 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "smallvec 0.6.5 (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.9 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1124,16 +1223,16 @@ dependencies = [ [[package]] name = "libp2p-floodsub" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.10 (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)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1145,43 +1244,46 @@ dependencies = [ [[package]] name = "libp2p-identify" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (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)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.1.1 (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.9 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "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.10 (registry+https://github.com/rust-lang/crates.io-index)", - "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "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)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand 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)", + "smallvec 0.6.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1191,12 +1293,12 @@ dependencies = [ [[package]] name = "libp2p-mplex" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (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)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (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)", @@ -1207,13 +1309,13 @@ dependencies = [ [[package]] name = "libp2p-peerstore" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "owning_ref 0.3.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)", @@ -1222,14 +1324,14 @@ dependencies = [ [[package]] name = "libp2p-ping" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "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.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1239,11 +1341,11 @@ dependencies = [ [[package]] name = "libp2p-ratelimit" version = "0.1.1" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1252,14 +1354,14 @@ dependencies = [ [[package]] name = "libp2p-relay" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "protobuf 2.1.1 (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)", @@ -1270,20 +1372,24 @@ dependencies = [ [[package]] name = "libp2p-secio" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "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.10 (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.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (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)", - "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.9 (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)", @@ -1292,12 +1398,12 @@ dependencies = [ [[package]] name = "libp2p-tcp-transport" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "tk-listen 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1306,10 +1412,10 @@ dependencies = [ [[package]] name = "libp2p-transport-timeout" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1317,38 +1423,38 @@ dependencies = [ [[package]] name = "libp2p-uds" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "tokio-uds 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-websocket" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.20.3 (git+https://github.com/tomaka/rust-websocket?branch=send)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1508,11 +1614,13 @@ dependencies = [ [[package]] name = "multiaddr" version = "0.3.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ + "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)", - "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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=9d9121719308491358ae6e4b0be83cdffa992985)", "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)", ] @@ -1520,22 +1628,25 @@ dependencies = [ [[package]] name = "multihash" version = "0.8.1-pre" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" 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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1555,16 +1666,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "native-tls" -version = "0.1.5" +version = "0.2.1" 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.1.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)", + "openssl 0.10.14 (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.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)", + "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]] @@ -1752,18 +1865,6 @@ name = "opaque-debug" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "openssl" -version = "0.9.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 0.9.1 (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)", - "libc 0.2.43 (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" version = "0.10.14" @@ -1777,6 +1878,11 @@ dependencies = [ "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.39" @@ -2227,7 +2333,7 @@ dependencies = [ [[package]] name = "rw-stream-sink" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" dependencies = [ "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2252,6 +2358,11 @@ 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.14" @@ -2273,21 +2384,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)", ] @@ -2429,11 +2540,6 @@ dependencies = [ "slog 2.4.1 (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.5" @@ -2806,6 +2912,50 @@ 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.20 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.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)", + "syn 0.15.12 (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.20 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.8 (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.32 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.12 (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" @@ -3104,7 +3254,7 @@ dependencies = [ "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)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.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)", @@ -3372,6 +3522,11 @@ 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.13.11" @@ -3687,12 +3842,11 @@ dependencies = [ [[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.25 (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)", + "native-tls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3981,21 +4135,21 @@ dependencies = [ [[package]] name = "websocket" -version = "0.20.3" -source = "git+https://github.com/tomaka/rust-websocket?branch=send#28ea5eb82b573bf3ace2fc75c36d791bcedf08b1" +version = "0.21.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)", + "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.6 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.10 (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.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)", + "native-tls 0.2.1 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.1.4 (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)", ] @@ -4130,12 +4284,15 @@ dependencies = [ "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.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.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.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" "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 block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "370424437b9459f3dfd68428ed9376ddfe03d8b70ede29cc533b3557df186ab4" @@ -4150,11 +4307,12 @@ dependencies = [ "checksum chashmap 2.2.1 (git+https://github.com/redox-os/tfs)" = "" "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.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 criterion 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f58b0200bf321214bdda8c797cf0071bcc638171c40ec198c3f652a4edaacde3" "checksum criterion-plot 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "885431f7865f9d4956b466126674e5ea40a0f193d42157e56630c356c5501957" "checksum criterion-stats 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c71521cb4c7b7eac76b540e75447fb0172c4234d6333729001b886aaa21d6da4" @@ -4166,12 +4324,18 @@ dependencies = [ "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" +"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 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "630391922b1b893692c6334369ff528dcc3a9d8061ccf4c803aa8f83cb13db5e" -"checksum datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"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=9d9121719308491358ae6e4b0be83cdffa992985)" = "" "checksum difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3304d19798a8e067e48d8e69b2c37f0b5e9b4e462504ad9e27e9f3fce02bba8" "checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" "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" @@ -4207,6 +4371,7 @@ dependencies = [ "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 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" @@ -4238,23 +4403,23 @@ dependencies = [ "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-floodsub 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-kad 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-mplex 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-ratelimit 0.1.1 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-relay 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-secio 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-tcp-transport 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-transport-timeout 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-uds 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-websocket 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum libp2p-yamux 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" "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.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a" @@ -4272,12 +4437,12 @@ dependencies = [ "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" -"checksum multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8b0a7bd714e83db15676d31caf968ad7318e9cc35f93c85a90231c8f22867549" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum nix 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37e713a259ff641624b6cb20e3b12b2952313ba36b6823c0f16e6cfd9e5de17" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" @@ -4290,7 +4455,7 @@ dependencies = [ "checksum ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c" "checksum opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d620c9c26834b34f039489ac0dfdb12c7ac15ccaf818350a64c9b5334a452ad7" "checksum openssl 0.10.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6285ab297861546af7a2753593b3160bfc09f0ab9d1f5bb009e39d81a169b499" -"checksum openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" +"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.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" @@ -4344,15 +4509,16 @@ dependencies = [ "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" "checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7" "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 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.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef" @@ -4371,14 +4537,18 @@ dependencies = [ "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.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1347484b6f8bc4b32a9323d9800b6d934376391002ad9c528cc659fe8afc08ee" "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" "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 subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc7f6353c2ee5407358d063a14cccc1630804527090a6fb5a9489ce4924280fb" +"checksum subtle 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" "checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" "checksum syn 0.15.12 (registry+https://github.com/rust-lang/crates.io-index)" = "34ab9797e47d24cb76b8dc4d24ff36807018c7cc549c4cba050b068be0c586b0" @@ -4409,7 +4579,7 @@ dependencies = [ "checksum tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad235e9dadd126b2d47f6736f65aa1fdcd6420e66ca63f44177bc78df89f912" "checksum tokio-threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bbd8a8b911301c60cbfaa2a6588fb210e5c1038375b8bdecc47aa09a94c3c05f" "checksum tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3a52f00c97fedb6d535d27f65cccb7181c8dd4c6edc3eda9ea93f6d45d05168e" -"checksum tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" +"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.2 (registry+https://github.com/rust-lang/crates.io-index)" = "22e3aa6d1fcc19e635418dc0a30ab5bd65d347973d6f43f1a37bf8d9d1335fc9" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" @@ -4445,7 +4615,7 @@ dependencies = [ "checksum wabt-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ca77c6b934a2b32618941b2f565aac43b8cb7141378c3b4fba4d8fcdcd57da3" "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" "checksum wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d184c4b7081f30316f74f8d73c197314dcb56ea7af9323522b42a2fa9cb19453" -"checksum websocket 0.20.3 (git+https://github.com/tomaka/rust-websocket?branch=send)" = "" +"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.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" diff --git a/substrate/core/network-libp2p/Cargo.toml b/substrate/core/network-libp2p/Cargo.toml index e07338455b..2947435d8e 100644 --- a/substrate/core/network-libp2p/Cargo.toml +++ b/substrate/core/network-libp2p/Cargo.toml @@ -11,7 +11,7 @@ bytes = "0.4" error-chain = { version = "0.12", default-features = false } fnv = "1.0" futures = "0.1" -libp2p = { git = "https://github.com/tomaka/libp2p-rs", rev = "8111062f0177fd7423626f2db9560273644a4c4d", default-features = false, features = ["libp2p-secio", "libp2p-secio-secp256k1"] } +libp2p = { git = "https://github.com/libp2p/rust-libp2p", rev = "9d9121719308491358ae6e4b0be83cdffa992985", default-features = false, features = ["secio-rsa", "secio-secp256k1"] } parking_lot = "0.5" libc = "0.2" log = "0.4" diff --git a/substrate/core/network-libp2p/src/custom_proto.rs b/substrate/core/network-libp2p/src/custom_proto.rs index a2680b056e..863e2d68b3 100644 --- a/substrate/core/network-libp2p/src/custom_proto.rs +++ b/substrate/core/network-libp2p/src/custom_proto.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use bytes::Bytes; -use libp2p::core::{Multiaddr, ConnectionUpgrade, Endpoint}; +use libp2p::core::{ConnectionUpgrade, Endpoint}; use libp2p::tokio_codec::Framed; use std::{collections::VecDeque, io, vec::IntoIter as VecIntoIter}; use futures::{prelude::*, future, stream, task}; @@ -203,8 +203,7 @@ where TSubstream: AsyncRead + AsyncWrite, self, socket: TSubstream, protocol_version: Self::UpgradeIdentifier, - _: Endpoint, - _: &Multiaddr + _: Endpoint ) -> Self::Future { let framed = Framed::new(socket, UviBytes::default()); @@ -273,13 +272,12 @@ where TSubstream: AsyncRead + AsyncWrite, self, socket: TSubstream, upgrade_identifier: Self::UpgradeIdentifier, - endpoint: Endpoint, - remote_addr: &Multiaddr + endpoint: Endpoint ) -> Self::Future { let (protocol_index, inner_proto_id) = upgrade_identifier; self.0.into_iter() .nth(protocol_index) .expect("invalid protocol index ; programmer logic error") - .upgrade(socket, inner_proto_id, endpoint, remote_addr) + .upgrade(socket, inner_proto_id, endpoint) } } diff --git a/substrate/core/network-libp2p/src/node_handler.rs b/substrate/core/network-libp2p/src/node_handler.rs index f7a388ddcd..5f3e74d2ba 100644 --- a/substrate/core/network-libp2p/src/node_handler.rs +++ b/substrate/core/network-libp2p/src/node_handler.rs @@ -19,7 +19,6 @@ use custom_proto::{RegisteredProtocols, RegisteredProtocolSubstream}; use futures::{prelude::*, task}; use libp2p::core::{ConnectionUpgrade, Endpoint, PeerId, PublicKey, upgrade}; use libp2p::core::nodes::handled_node::{NodeHandler, NodeHandlerEndpoint, NodeHandlerEvent}; -use libp2p::core::nodes::swarm::ConnectedPoint; use libp2p::kad::{KadConnecConfig, KadFindNodeRespond, KadIncomingRequest, KadConnecController}; use libp2p::{identify, ping}; use parking_lot::Mutex; @@ -54,9 +53,6 @@ pub struct SubstrateNodeHandler { /// Substreams open for "custom" protocols (eg. dot). custom_protocols_substreams: Vec>, - /// Address of the node. - address: Multiaddr, - /// Substream open for Kademlia, if any. kademlia_substream: Option<(KadConnecController, Box + Send>)>, /// If true, we need to send back a `KadOpen` event on the stream (if Kademlia is open). @@ -260,20 +256,14 @@ where TSubstream: AsyncRead + AsyncWrite + Send + 'static, { /// Creates a new node handler. #[inline] - pub fn new(registered_custom: Arc, endpoint: ConnectedPoint) -> Self { + pub fn new(registered_custom: Arc) -> Self { let registered_custom_len = registered_custom.len(); let queued_dial_upgrades = registered_custom.0 .iter() .map(|proto| UpgradePurpose::Custom(proto.id())) .collect(); - let address = match endpoint { - ConnectedPoint::Dialer { address } => address.clone(), - ConnectedPoint::Listener { send_back_addr, .. } => send_back_addr.clone(), - }; - SubstrateNodeHandler { - address, custom_protocols_substreams: Vec::with_capacity(registered_custom_len), kademlia_substream: None, need_report_kad_open: false, @@ -294,18 +284,19 @@ where TSubstream: AsyncRead + AsyncWrite + Send + 'static, } } -impl NodeHandler for SubstrateNodeHandler +impl NodeHandler for SubstrateNodeHandler where TSubstream: AsyncRead + AsyncWrite + Send + 'static, { type InEvent = SubstrateInEvent; type OutEvent = SubstrateOutEvent; type OutboundOpenInfo = (); + type Substream = TSubstream; fn inject_substream(&mut self, substream: TSubstream, endpoint: NodeHandlerEndpoint) { // For listeners, propose all the possible upgrades. if endpoint == NodeHandlerEndpoint::Listener { let listener_upgrade = listener_upgrade!(self); - let upgrade = upgrade::apply(substream, listener_upgrade, Endpoint::Listener, &self.address); + let upgrade = upgrade::apply(substream, listener_upgrade, Endpoint::Listener); self.upgrades_in_progress_listen.push(Box::new(upgrade) as Box<_>); // Since we pushed to `upgrades_in_progress_listen`, we have to notify the task. if let Some(task) = self.to_notify.take() { @@ -338,26 +329,22 @@ where TSubstream: AsyncRead + AsyncWrite + Send + 'static, return; }; - // TODO: shouldn't be &self.address ; requires a change in libp2p - let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer, &self.address); + let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer); self.upgrades_in_progress_dial.push((purpose, Box::new(upgrade) as Box<_>)); } UpgradePurpose::Kad => { let wanted = upgrade::map(KadConnecConfig::new(), move |(c, s)| FinalUpgrade::Kad(c, s)); - // TODO: shouldn't be &self.address ; requires a change in libp2p - let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer, &self.address); + let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer); self.upgrades_in_progress_dial.push((purpose, Box::new(upgrade) as Box<_>)); } UpgradePurpose::Identify => { let wanted = upgrade::map(identify::IdentifyProtocolConfig, move |i| FinalUpgrade::from(i)); - // TODO: shouldn't be &self.address ; requires a change in libp2p - let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer, &self.address); + let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer); self.upgrades_in_progress_dial.push((purpose, Box::new(upgrade) as Box<_>)); } UpgradePurpose::Ping => { let wanted = upgrade::map(ping::Ping::default(), move |p| FinalUpgrade::from(p)); - // TODO: shouldn't be &self.address ; requires a change in libp2p - let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer, &self.address); + let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer); self.upgrades_in_progress_dial.push((purpose, Box::new(upgrade) as Box<_>)); } }; @@ -733,6 +720,9 @@ where TSubstream: AsyncRead + AsyncWrite + Send + 'static, }, // We don't care about Kademlia pings, they are unused. Ok(Async::Ready(Some(KadIncomingRequest::PingPong))) => {}, + // Other Kademlia messages are unimplemented. + Ok(Async::Ready(Some(KadIncomingRequest::GetProviders { .. }))) => {}, + Ok(Async::Ready(Some(KadIncomingRequest::AddProvider { .. }))) => {}, Ok(Async::NotReady) => { self.kademlia_substream = Some((controller, stream)); break; diff --git a/substrate/core/network-libp2p/src/service_task.rs b/substrate/core/network-libp2p/src/service_task.rs index 93be0e476c..e370a68c38 100644 --- a/substrate/core/network-libp2p/src/service_task.rs +++ b/substrate/core/network-libp2p/src/service_task.rs @@ -21,7 +21,7 @@ use futures::{prelude::*, task, Stream}; use futures::sync::{oneshot, mpsc}; use libp2p::{Multiaddr, PeerId}; use libp2p::core::{Endpoint, PublicKey}; -use libp2p::core::nodes::swarm::ConnectedPoint; +use libp2p::core::nodes::ConnectedPoint; use libp2p::kad::{KadSystem, KadSystemConfig, KadConnecController, KadPeer}; use libp2p::kad::{KadConnectionType, KadQueryEvent}; use parking_lot::Mutex; diff --git a/substrate/core/network-libp2p/src/swarm.rs b/substrate/core/network-libp2p/src/swarm.rs index 497472d93f..0a6bfaa994 100644 --- a/substrate/core/network-libp2p/src/swarm.rs +++ b/substrate/core/network-libp2p/src/swarm.rs @@ -20,15 +20,12 @@ use fnv::FnvHashMap; use futures::{prelude::*, Stream}; use libp2p::{Multiaddr, multiaddr::Protocol, PeerId}; use libp2p::core::{muxing, Endpoint, PublicKey}; -use libp2p::core::nodes::node::Substream; -use libp2p::core::nodes::swarm::{ConnectedPoint, Swarm as Libp2pSwarm, HandlerFactory}; -use libp2p::core::nodes::swarm::{SwarmEvent as Libp2pSwarmEvent, Peer as SwarmPeer}; +use libp2p::core::nodes::{ConnectedPoint, RawSwarm, RawSwarmEvent, Peer as SwarmPeer, Substream}; use libp2p::core::transport::boxed::Boxed; use libp2p::kad::{KadConnecController, KadFindNodeRespond}; use libp2p::secio; use node_handler::{SubstrateOutEvent, SubstrateNodeHandler, SubstrateInEvent, IdentificationRequest}; -use std::io::{Error as IoError, ErrorKind as IoErrorKind}; -use std::{mem, sync::Arc}; +use std::{io, mem, sync::Arc}; use transport; use {Error, NodeIndex, ProtocolId}; @@ -47,10 +44,11 @@ pub fn start_swarm( let transport = transport::build_transport(local_private_key); // Build the underlying libp2p swarm. - let swarm = Libp2pSwarm::with_handler_builder(transport, HandlerBuilder(Arc::new(registered_custom))); + let swarm = RawSwarm::new(transport); Ok(Swarm { swarm, + registered_custom: Arc::new(registered_custom), local_public_key, local_peer_id, listening_addrs: Vec::new(), @@ -60,20 +58,6 @@ pub fn start_swarm( }) } -/// Dummy structure that exists because we need to be able to express the type. Otherwise we would -/// use a closure. -#[derive(Clone)] -struct HandlerBuilder(Arc); -impl HandlerFactory for HandlerBuilder -{ - type Handler = SubstrateNodeHandler>; - - #[inline] - fn new_handler(&self, addr: ConnectedPoint) -> Self::Handler { - SubstrateNodeHandler::new(self.0.clone(), addr) - } -} - /// Event produced by the swarm. pub enum SwarmEvent { /// We have successfully connected to a node. @@ -117,7 +101,7 @@ pub enum SwarmEvent { /// Address that failed. address: Multiaddr, /// Reason why we failed. - error: IoError, + error: io::Error, }, /// Report information about the node. @@ -197,20 +181,23 @@ pub enum SwarmEvent { /// Index of the node. node_index: NodeIndex, /// Reason why it has been closed. `Ok` means that it's been closed gracefully. - result: Result<(), IoError>, + result: Result<(), io::Error>, }, } /// Network swarm. Must be polled regularly in order for the networking to work. pub struct Swarm { /// Stream of events of the swarm. - swarm: Libp2pSwarm< + swarm: RawSwarm< Boxed<(PeerId, Muxer)>, SubstrateInEvent, SubstrateOutEvent>, - HandlerBuilder + SubstrateNodeHandler> >, + /// List of registered protocols. Used when we open or receive a new connection. + registered_custom: Arc, + /// Public key of the local node. local_public_key: PublicKey, @@ -340,7 +327,7 @@ impl Swarm { SwarmPeer::NotConnected(peer) => { trace!(target: "sub-libp2p", "Starting to connect to {:?} through {}", peer_id, addr); - match peer.connect(addr) { + match peer.connect(addr, SubstrateNodeHandler::new(self.registered_custom.clone())) { Ok(_) => Ok(false), Err(_) => Err(()), } @@ -351,7 +338,7 @@ impl Swarm { /// Start dialing an address, not knowing which peer ID to expect. #[inline] pub fn dial(&mut self, addr: Multiaddr) -> Result<(), Multiaddr> { - self.swarm.dial(addr) + self.swarm.dial(addr, SubstrateNodeHandler::new(self.registered_custom.clone())) } /// After receiving a `NodePending` event, you should call either `accept_node` or `drop_node` @@ -479,124 +466,6 @@ impl Swarm { ); } - /// Processes an event received by the swarm. - /// - /// Optionally returns an event to report back to the outside. - /// - /// > **Note**: Must be called from inside `poll()`, otherwise it will panic. This method - /// > shouldn't be made public because of this requirement. - fn process_network_event( - &mut self, - event: Libp2pSwarmEvent, SubstrateOutEvent>> - ) -> Option { - match event { - Libp2pSwarmEvent::Connected { peer_id, endpoint } => { - let node_index = self.next_node_index.clone(); - self.next_node_index += 1; - self.node_by_peer.insert(peer_id.clone(), node_index); - self.nodes_info.insert(node_index, NodeInfo { - peer_id: peer_id.clone(), - endpoint: match endpoint { - ConnectedPoint::Listener { .. } => Endpoint::Listener, - ConnectedPoint::Dialer { .. } => Endpoint::Dialer, - }, - open_protocols: Vec::new(), - }); - - return Some(SwarmEvent::NodePending { - node_index, - peer_id, - endpoint - }); - } - Libp2pSwarmEvent::Replaced { peer_id, endpoint, .. } => { - let node_index = *self.node_by_peer.get(&peer_id) - .expect("node_by_peer is always kept in sync with the inner swarm"); - let infos = self.nodes_info.get_mut(&node_index) - .expect("nodes_info is always kept in sync with the swarm"); - debug_assert_eq!(infos.peer_id, peer_id); - infos.endpoint = match endpoint { - ConnectedPoint::Listener { .. } => Endpoint::Listener, - ConnectedPoint::Dialer { .. } => Endpoint::Dialer, - }; - let closed_custom_protocols = mem::replace(&mut infos.open_protocols, Vec::new()); - - return Some(SwarmEvent::Reconnected { - node_index, - endpoint, - closed_custom_protocols, - }); - }, - Libp2pSwarmEvent::NodeClosed { peer_id, .. } => { - debug!(target: "sub-libp2p", "Connection to {:?} closed gracefully", peer_id); - let node_index = self.node_by_peer.remove(&peer_id) - .expect("node_by_peer is always kept in sync with the inner swarm"); - let infos = self.nodes_info.remove(&node_index) - .expect("nodes_info is always kept in sync with the inner swarm"); - debug_assert_eq!(infos.peer_id, peer_id); - return Some(SwarmEvent::NodeClosed { - node_index, - peer_id, - closed_custom_protocols: infos.open_protocols, - }); - }, - Libp2pSwarmEvent::NodeError { peer_id, error, .. } => { - debug!(target: "sub-libp2p", "Closing {:?} because of error: {:?}", peer_id, error); - let node_index = self.node_by_peer.remove(&peer_id) - .expect("node_by_peer is always kept in sync with the inner swarm"); - let infos = self.nodes_info.remove(&node_index) - .expect("nodes_info is always kept in sync with the inner swarm"); - debug_assert_eq!(infos.peer_id, peer_id); - return Some(SwarmEvent::NodeClosed { - node_index, - peer_id, - closed_custom_protocols: infos.open_protocols, - }); - }, - Libp2pSwarmEvent::DialError { multiaddr, error, .. } => - return Some(SwarmEvent::DialFail { - address: multiaddr, - error, - }), - Libp2pSwarmEvent::UnknownPeerDialError { multiaddr, error } => - return Some(SwarmEvent::DialFail { - address: multiaddr, - error, - }), - Libp2pSwarmEvent::PublicKeyMismatch { - actual_peer_id, - multiaddr, - expected_peer_id, - .. - } => { - debug!(target: "sub-libp2p", "When dialing {:?} through {}, public key mismatch, \ - actual = {:?}", expected_peer_id, multiaddr, actual_peer_id); - return Some(SwarmEvent::DialFail { - address: multiaddr, - error: IoError::new(IoErrorKind::Other, "Public key mismatch"), - }); - }, - Libp2pSwarmEvent::ListenerClosed { listen_addr, result, .. } => { - warn!(target: "sub-libp2p", "Listener closed for {}: {:?}", listen_addr, result); - if self.swarm.listeners().count() == 0 { - warn!(target: "sub-libp2p", "No listener left"); - } - }, - Libp2pSwarmEvent::NodeEvent { peer_id, event } => - if let Some(event) = self.handle_node_event(peer_id, event) { - return Some(event); - }, - Libp2pSwarmEvent::IncomingConnection { listen_addr, send_back_addr } => - trace!(target: "sub-libp2p", "Incoming connection with {} on listener {}", - send_back_addr, listen_addr), - Libp2pSwarmEvent::IncomingConnectionError { listen_addr, send_back_addr, error } => - trace!(target: "sub-libp2p", "Incoming connection with {} on listener {} \ - errored: {:?}", send_back_addr, listen_addr, error), - } - - None - } - /// Processes an event obtained by a node in the swarm. /// /// Optionally returns an event that the service must emit. @@ -698,17 +567,105 @@ impl Swarm { impl Stream for Swarm { type Item = SwarmEvent; - type Error = IoError; + type Error = io::Error; fn poll(&mut self) -> Poll, Self::Error> { loop { - match self.swarm.poll() { - Async::Ready(Some(event)) => - if let Some(event) = self.process_network_event(event) { - return Ok(Async::Ready(Some(event))); - } + let (peer_id, node_event) = match self.swarm.poll() { + Async::Ready(RawSwarmEvent::Connected { peer_id, endpoint }) => { + let node_index = self.next_node_index.clone(); + self.next_node_index += 1; + self.node_by_peer.insert(peer_id.clone(), node_index); + self.nodes_info.insert(node_index, NodeInfo { + peer_id: peer_id.clone(), + endpoint: match endpoint { + ConnectedPoint::Listener { .. } => Endpoint::Listener, + ConnectedPoint::Dialer { .. } => Endpoint::Dialer, + }, + open_protocols: Vec::new(), + }); + + return Ok(Async::Ready(Some(SwarmEvent::NodePending { + node_index, + peer_id, + endpoint + }))); + } + Async::Ready(RawSwarmEvent::Replaced { peer_id, endpoint, .. }) => { + let node_index = *self.node_by_peer.get(&peer_id) + .expect("node_by_peer is always kept in sync with the inner swarm"); + let infos = self.nodes_info.get_mut(&node_index) + .expect("nodes_info is always kept in sync with the swarm"); + debug_assert_eq!(infos.peer_id, peer_id); + infos.endpoint = match endpoint { + ConnectedPoint::Listener { .. } => Endpoint::Listener, + ConnectedPoint::Dialer { .. } => Endpoint::Dialer, + }; + let closed_custom_protocols = mem::replace(&mut infos.open_protocols, Vec::new()); + + return Ok(Async::Ready(Some(SwarmEvent::Reconnected { + node_index, + endpoint, + closed_custom_protocols, + }))); + }, + Async::Ready(RawSwarmEvent::NodeClosed { peer_id, .. }) => { + debug!(target: "sub-libp2p", "Connection to {:?} closed gracefully", peer_id); + let node_index = self.node_by_peer.remove(&peer_id) + .expect("node_by_peer is always kept in sync with the inner swarm"); + let infos = self.nodes_info.remove(&node_index) + .expect("nodes_info is always kept in sync with the inner swarm"); + debug_assert_eq!(infos.peer_id, peer_id); + return Ok(Async::Ready(Some(SwarmEvent::NodeClosed { + node_index, + peer_id, + closed_custom_protocols: infos.open_protocols, + }))); + }, + Async::Ready(RawSwarmEvent::NodeError { peer_id, error, .. }) => { + debug!(target: "sub-libp2p", "Closing {:?} because of error: {:?}", peer_id, error); + let node_index = self.node_by_peer.remove(&peer_id) + .expect("node_by_peer is always kept in sync with the inner swarm"); + let infos = self.nodes_info.remove(&node_index) + .expect("nodes_info is always kept in sync with the inner swarm"); + debug_assert_eq!(infos.peer_id, peer_id); + return Ok(Async::Ready(Some(SwarmEvent::NodeClosed { + node_index, + peer_id, + closed_custom_protocols: infos.open_protocols, + }))); + }, + Async::Ready(RawSwarmEvent::DialError { multiaddr, error, .. }) => + return Ok(Async::Ready(Some(SwarmEvent::DialFail { + address: multiaddr, + error, + }))), + Async::Ready(RawSwarmEvent::UnknownPeerDialError { multiaddr, error, .. }) => + return Ok(Async::Ready(Some(SwarmEvent::DialFail { + address: multiaddr, + error, + }))), + Async::Ready(RawSwarmEvent::ListenerClosed { listen_addr, result, .. }) => { + warn!(target: "sub-libp2p", "Listener closed for {}: {:?}", listen_addr, result); + continue; + }, + Async::Ready(RawSwarmEvent::NodeEvent { peer_id, event }) => (peer_id, event), + Async::Ready(RawSwarmEvent::IncomingConnection(incoming)) => { + trace!(target: "sub-libp2p", "Incoming connection with {} on listener {}", + incoming.send_back_addr(), incoming.listen_addr()); + incoming.accept(SubstrateNodeHandler::new(self.registered_custom.clone())); + continue; + }, + Async::Ready(RawSwarmEvent::IncomingConnectionError { listen_addr, send_back_addr, error }) => { + trace!(target: "sub-libp2p", "Incoming connection with {} on listener {} \ + errored: {:?}", send_back_addr, listen_addr, error); + continue; + }, Async::NotReady => return Ok(Async::NotReady), - Async::Ready(None) => unreachable!("The Swarm stream never ends"), + }; + + if let Some(event) = self.handle_node_event(peer_id, node_event) { + return Ok(Async::Ready(Some(event))); } } } diff --git a/substrate/core/network-libp2p/src/transport.rs b/substrate/core/network-libp2p/src/transport.rs index cb091540da..89c6757bbc 100644 --- a/substrate/core/network-libp2p/src/transport.rs +++ b/substrate/core/network-libp2p/src/transport.rs @@ -30,14 +30,14 @@ pub fn build_transport( let base = libp2p::CommonTransport::new() .with_upgrade(secio::SecioConfig::new(local_private_key)) - .and_then(move |out, endpoint, client_addr| { + .and_then(move |out, endpoint| { let upgrade = upgrade::or( upgrade::map(yamux::Config::default(), either::EitherOutput::First), upgrade::map(mplex_config, either::EitherOutput::Second), ); let peer_id = out.remote_key.into_peer_id(); let upgrade = upgrade::map(upgrade, move |muxer| (peer_id, muxer)); - upgrade::apply(out.stream, upgrade, endpoint, client_addr) + upgrade::apply(out.stream, upgrade, endpoint.into()) }) .map(|(id, muxer), _| (id, StreamMuxerBox::new(muxer))); From 9072fce658cf548013333009754be7316b321fab Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 5 Nov 2018 19:23:16 +0100 Subject: [PATCH 06/26] srml-contract: Sandbox mem IO according to COMPLEXITY.md (#939) * Sandbox mem IO according to COMPLEXITY.md * Fix tests. * Update root hash for deploying contract test. --- .../substrate_test_runtime.compact.wasm | Bin 47463 -> 45231 bytes substrate/node/executor/src/lib.rs | 2 +- .../release/node_runtime.compact.wasm | Bin 624959 -> 621533 bytes substrate/srml/contract/src/tests.rs | 28 +-- substrate/srml/contract/src/vm/mod.rs | 12 +- substrate/srml/contract/src/vm/runtime.rs | 168 ++++++++++++------ 6 files changed, 140 insertions(+), 70 deletions(-) diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 5d9b1fcac3726fbcf0d4a685d6c9f8481ee438a8..736d1d423bd86cc4ca37926218ea43b7b5afaec0 100644 GIT binary patch delta 19028 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 diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index 70f7b8b7d3..2e9bd1099d 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -623,7 +623,7 @@ mod tests { let b = construct_block( 1, GENESIS_HASH.into(), - hex!("d68586d5098535e04ff7a12d71a9c9dc719960f318862e636e78a8e98cf4b8d4").into(), + hex!("cf0fee74c87ecff646804984bbdf85832a788b3ca2a2aa33e20da61fa7182b37").into(), None, vec![ CheckedExtrinsic { diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 2a48d20c98d216742495a038849834566e6ccc45..5021eb25b6991f9bfe5a70b669644c08464e5196 100644 GIT binary patch literal 621533 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

Z;;U;FssHaw&jif9Z=9E3?s3jVSJU36nZ1Fi& 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

8iPCHX{j^qt=B=m!i%YCooB&wJUPW=%~8dFwF@f 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

_>_s>FeVHTQ67$z$7t6UW91q!~l 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 z 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�WPylJ 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

b-+$=8a~ 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 literal 624959 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�W=9YT-*ADeN*mT#dvG}Ne(q-nSQVM`XcX7U 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

YOEoJPa;t@kLD}!5fXH#w8s_&(Ldx$IgFG= zo~BHrs`UG5s$~wqZ=^}uEI4G3Lej9;T&r|}nZgyN&|`_HUm55g>O9O~LNk1Ta+}i} z9UAhV&IfP?E-<(-B5G@E9(3r_;23(b#)Je`4e1C`h-t?|Lv!_#pcd2TWRrG_(gmOUxpsRwT7)<5zX1?x#@Oj5olhf!BIJ!>G2Z z&K%`e!?YElyfN3-f}MU&BD27iG&XvsUh)U1Y@JJOHR_HFQnf zeu2DZD5>aS|1r#((c-z=Jw({9x`tG9J=AnWY173lWvYddYbK4HZ8))~<4SskSojl5P&CwbAn zcDJ_nlVOd|lmOna20!z!2G*LkKgqdO<-I{^0&78c)GgdlWYUUDA^>5o2Hpe(o0Vi9 zVvj-wtH7)U!1>pNIY};&uXu>4MI(4U<~LPZ4c<-KgA_?#ahlCM89h2S{Eo=8VzCpV zDi|u08|u5qsi~i#T&Bid42rAFwj5{*1J8b5%g<@(sjyXwPKhFq&OG^{vS)~FAq|=2 zL1aBgeul_qKO#kbjkpOCk+twSo}W0E5gOiamJ6~=(mR8u{#eh>FJL!D0j@;&hlK?A5sZBf9l zI{$)}o>Fg~=?n72fgSbH2RbsVsbjoYq7n&A@M2}A8c`k>M+Vd?3mrGe9Qqu8+jpTgYVCA9&GmFoR0teg z45O;V?s~dMsk-L|1mLaa+j9^}(C}%#b=NCf9AtS{#L70rcZ;;{i3m~D=612 zEi&6fS`588uzi@FXCCnp@jYN)z44r5(%UiGEdJ!01p&7q3oMam=E1z=E5NgGjAn3$zt|mwmC{}YG9J4Upz^!_M4yeXCcZu?b8&U-Vel=L7o67eFMk$86y zhmyMXR_lm%oU^?I-;thjg?1%`?J4dhd&-^>=d`e=D1!Dh(*y0PRjJ6y>|O1rAUA^& z{Ai<;-fF#1iXqP*3_9hR@I~|%!8NCRN{VA-Uxzk_C%=m?ncParw+L+%xatq)FA9-%lE(v^9}6uSbB0q0sXPh$h^Y6~V1KZrTw& z>2Vhey?p5R&xN}*2Gil)7(~+MB7o5i?-uQ zbpLw1Oe@1J`REsmZ&(}cEE4rD?h3_4l6;F}g3`-eh=ZrPm)CX=UCzA+jaDI0zq?MMvW%kq9;J8{H;|*dk(mw^x*KL=`(?NgiTMuDw(g)> zI;Nr49rSKcjtl1WAor6kc`waQ!XHP(|0 zO2gC=uPrv#c+6pix9mq+O`_*USFVJg8O^DQCuxF}@=)?g_?XD|@-YhUi5Ttz3G}2s zA`l#!u#W{F>fB!hjx3Kvf)DznL(2quv(Ah$ZoYb1#5jDZ3N(mUd#@69idq znbHQyFQ}uz<;y6QS|%((w@mzrMJXu*g>Ed;q6E&emo9RpNlb$>HumsAQTVWj87};!5_9AJU z;EOv%izw1nn{V}M!*pDsnQmGd1xaI|l&D5xt1`A>YHr7Mhc}RaP3MH-kj#q3_C;~! zXotN3sq4oBlJ$A zPP_^1p1Nskg0iJ?mER6jh;2HhG=q+zgGrGdM2kk~lqictaGF*e0@^ZFz_blW%>`k? z=oM9@byfyn#9vMq>o1rIP!d>R5TO1=TaX=iF=6ADtzpy@BoBbTmULi5e)88--tN(R5 z8bM{W^FHJK9Va3{=?b@V9N7csw2^sOP>h@GmlmP9=|7KE@3hgt&^iJAh)Jl>Ogq!DUrEeSI->7#S zR~=!gK4{q9mu$Cl1pH^v8KTl5AECi9*bthA1i^yb(+K6pQuAhhI5nek50|*%g|o7O zHeEzs2lo%qD*JVGq|-NH&5HU*aPXlHUFV<9MkbY=^$(t*GwLO$|B9u6n;Phz?;8Fe z5vWvGkU46sV!XrqkgQRX2#OS1)+gu-Qst!NxF({FfO;BAgbt~uOK(PKjEh4SuJ&Sj z`?C)~Z%dDZ-l~XY(HjFs^AeCf^yWjOHOi8MkA;Dm!cZG|{v6(tWsI-WA>~%buA5o5 z!_uz72zT8B9LrjqC=4FRGl$}6$~`J%O7wBqI&3x(@{M90Q^ZATfY?%>RU9iBN1@?D z04jlxn0Hg{Ijv7Hskko%663CkP)4Wyk1CNUI})Z3`_pJjf>k*0f2rL65~5z+l*G67 zLZdK~5ung-T(hwpu}GbKl9*+ldCl<_8e2Ox@XJ3nsL_pP8r>s*kg9H|fou#v88z^} zKTYdGn}VH6b(_L~UmbesD6C~3MeBX!2Fr;{ z4IoTIvh732d^k??^5&8hJuWR+2LiT2Ct|z87>3wU(jYU75Fe*G#hAg2%2x7glB46X z8f)DXgu6sIlOkQN+HjRDffzBk0x^)rJDOP{Vl?Q!`|}dQ5To*XNXUC)jO1=G2~0f@ zqbEO#MT}fD_4@vG#vCz5Cf6ZFT5`lll)NX#ZhaKBsz7PnRTg}c4n7)B;hW6h`%S?& zxiI*w=Xv->hQl{96h6~A1RtGovrY0PsE*E+TYK3tu_SS7(4@P5(Tf3he!W;u{|xtC zK@i8GaIb9M&{~H3t{|9}#4|wEbFl!5i8on-PBQa5?0o^lrikogWsMs^O4x_K%8wQq^?g(k= z0x?obqQb73se#Z0Atj&t6;Gc5YN&M>a}kaco&sqJs1k1kIx9};lzDp^f3@j`Z`8by zLzF2W01B}Mh|4e&m)+W2Q;tf>7R}3|f{HT*0_ATh`3W;n{uW8Q?4A@Zns2lFw(c{v z3e{O!f6%&{){-MGxk^e&X8qp(e2 zH@~xF%E^;|lLNra?@x!psLbV7Zu&FISKvjL@}VD5nWm{nf14p~Y5tQGiS)7vQ+Be= zcGb>^4?!NmkB3f0CTp47gE|#YCDx=Bp+S(rj6p@3^3N$#5>XgfWfFR#c3@mH7>XI@ z7d0~s_fUx1uDEwq0=UGH=HEjB(@UdlR>ml2HH2`e720xmvzxPfnb(o@5&+dJfd-l;N9C4O`Ps$wb zN>=w!={Bg8<3%rE?6%D%p9879kXO`p0=tvXmTV-LPf??WKKYFM%M`V31@c+-;pj1T z5a|pmYpHm~>4dP>lm@s7;F$WR)}+3nP)3ANOm&#h`BmMAyJ`hLNEraMO3$cO4gB3A z&(^cWciTkx6iURC5H7ZI!7grPlryhUIx)!&II8)H#^oL|-y;z`vXV5oJcmfLN#2Y8 zM_iuUy!N-+G1M>oeh}3enWhBEmzWeX?J6|k@GpPA{}_maEhQ~;cgj8oLtGvoFO5}3 zBeFk?GtZan-Wwn(t~u82S<<9!tIslCod+0-(+sTlP+#5J3{JX8Y4Ak9tv`_J7i})R zSu`d3Re_&W$AYCRcj{`@ z(%K*T*6{w_@1Fanj&et*=`n3}lAsND;o{@qjkF`qO`(pco3`>!mt4i*3m!V2zKp4U zEe%=)I0~fyQ7Kz*;>wlH7`wSLhp9k#+IyLMoP$a(g3Ljs$Ft4nyBU;NO@tWw*e5Zd zaS)NPnt%D-H?z`V-J)UI6^AhO!K?_5Ju;-T{BS%yFbp+i23*hJa=A|9IUU|8+aS3g z3zGE)lhUTr3(e9GAK)ry=N@?m5@o0mV0xXERp$A2IoicQmC=k2@>iMbIb8YHPIXG( zD0e-%?GPD+R5Jioxua~DndV)Ds$HZ7pqgYE=v~j){?SnFpc+rnYHS^$K=D?Jg_IZ8 zIj_L7r(^~7K^YA8xZdM@Ig5UhQemAq0a(X(aL5nI;GIZ@c&Q3!jp3m65OgV0H{=RZ z!_$=cKAefKW80@3Lj?xoSd*Hm0$5FbZ+$C84<;sPaM@wY98*`4>CVG za+mKcBX>Qv8A_bz$h|V#{D=;E7P*_t)Vr9p*$iFJRLhEfi8pxp!)Wm6`WkbFQ5UtZ zvD{MHBiFbrbGOz8B#?-0uS%&bWmN?RI94t1kDFIEH_$dI2h5fH9>5Xo5GMc1_{DIi z>}~4tZ1YtPB47m^bk)yd(;MXKXPS6Y?y*-F2^&s2@WQ4B-X-&xnHR#R_Dv5fr1lEyti2um+Z}PxfrE z>?n$E`vJhP6ML)Hl)a^(2fGKJ9+U0zb)+H!E}$~4z2w-I11snnr!632DiSee6EXSk z%kt0IitHFBsZG zV(4Ix+2(zEkJ(NG#?qw*OyB(CU!j|p+M85a=DF-=Ymh@C2GXa!Atn% zFpuX)UYwTfRI1q!xliN#Ia#^~)bUBwL+e%kHd>+TG+^fHl(eDZ2pEJ+F``Ql#5j{_Y0f8C0Ow~k^{_zBwNJXJo6RDsUfMK zG4s{?isvgm9-OZ}ypZ|oL#JiF>g49DcNNc9dOSE^A+3%%Unz>var@$o+Yv}6uCN>z z#O*zE72;HLmDjs&Bcf-_5skm|PqxdTG;6?0o$k>bee+otsS!Ojw$ zinJ&uxr8e6QW?#Btm7wq6Y?^UF}rVr1qk{>f^8|SaIq7cd9-0}x@61F*v$Gh#WPYq z@Jn{|D%-5ElwT|7&gGfT;Bgj{f(4zlu8Er(L=C2@7px(L$u*ABcAGOJlBAS(pJevuKiyOy|(Rq>2R73@6wz6J2&7 zd8C96srwf&enxuv_m*0$YH3eFksG;D=YG|kg;5F4_G){0l!OIea4-XUMt>XgC>o(D z3W7XURzi)hNXia*Q11|h_XkFig?dI`YhKX+MgfU~xUW1i1*!j`T06CnO9wnL$h8>j zzcpsd#xz&ofKeyj?CVs@oYba~8?aW8{icMC5U|0o&5g6Wx<*&}baf302q{Y#p$n2e z`ld$$^=iv|e6?n@4wXH_jaK*p>7z9WZM~Bq895D8DGma^auFqWc5OQK%}Hsq>27x> z-EF7KqQm?tvgq`9aE8RKar_qDyHCpuxh6M5zO#6S)Z@(gl38>g8#Y7Yd`aC$U43}a zqC=K1h(>$pvv-EvqbMPz*MYKZhCDIX3LYi-14J-5PsHH_y%V=JV=+Ze8C1A4P7@t7;8yB55l?BL)5&Byol7(cRW%7=Z6t5M>j-P$NpvV_-EymJ zzr4f8#LL3)#q@0wR@AdYv${Kn%)@vktUF~SQ{wPB~A%uCC+VOi~u%EWTp&Gvd-^*4WxjuD$ zFLI4MWBn}W3HQ_H$C%<5`ZZ!j&unV~qR6LIL(HY2hhkf&Rci#z9fKfB$Fj^XHW>!<)E_UmCvAHNao?_T*GGx# zArHeC(~nX^oEQvz21apR0)zx_GWsT4s(qw%pi@0K3!5L_LkQ-fg9Snt+0hoEy z)xr-x2B@;;3DxI(o~lhrU{ssAXnJL?Qg2yado$>ce^CBeBg7K>!`}ngo`*{RStG>4 zYaFxnkWY^PPCwh0%|yimaQswy%0-7W@GEB&24|{sg!!4n10%sQHJTbf*rm{Tb65ZF z8c1CuK3yV-p#TuaSAvuS)wArM4c!(zH|DwHhrANTG{k=r)SaD9~up+XqLN?ST0A ze3%64$uxCH>$sF1fCdYHWt9mHwh$fH%*%(Vgd@?D!va>MHzLCXGY3pb> zXYuu!Tsy`rFY+|#@t~*S{R{Cly!W(t8dm2#4M&PS4SGE2i~smAPeX3)xXVbk%g*Q~ zWh4x|1u@b+a7K@}K|~>k{JmVAhtJ|UbnJ>&8TJ0LIcbb6yz>a%G%DT)owmT(Vi zC+CxS)%~)A>y$l7^<`7p@m5ENIygc`WH>LS!37%4>W!3Vf)c#V2K>^%%332pBgTa0 z)_GM7*C*lvL4)gYtaC5NdhZNiUhLGr+P2e#Sm4t+$E;NB$Ak}e(LZCQa&ntYdJFwf zJ_LigDsf~f_+_XsmGjZ9<(ah-RJC zvoNEcy$5Ew2vuMVb#*@MOTee@`pjt($^mOpGC5bN{LXLKVe8$jw~)YKZ(Kvt)#4>i z|8){lD@UK``cy^n4odT>-s|IJ?g?yWF*prbrz}o}c(x*0r^nBDS$CL#i@`7%p3XL3 z<5rV1pXyLa_u8&kMyrCdyBdas%ZGT5GUFh*3 zUC57p-0@TII4yJF^4uJFMTmZZ%{7;yrc7eB-@_&>6d3Uz?`Ji!>j_2z{xze5qv?*Vw zqGEX)=P&}llgjS48)*m?LeRR14 z$0XwTRC`ctx3NA<^)9Q~M32?meY2tixRBX2Z2mCctR28*3y!g!;Gp~h>a~mIoNcZ` zBC<)Py|nS*vHH!IFtVjzHV>3sw1zi_+mK{ou^|qZyNyN<=H!#7lx}MhwKEhH8%7w? zG*MUQ2qYRHM#%|Q4TXg*5hC~bV?jo*O-Eo|?FVNRM1x9YZF3QW(1T0Lgll#>JDP2L z;W%($YmADN!0c#gex!C!OQHs870#L z;BY8*&&HxwWpfjHYj$CThl$Ts--p3oMiCQ#>e`q?2#cZsX~|6ohhG5T+CBR(?vcc|i#EAQ)UG?z4_JPFcsvvgJCS z2@5}`F<$tMd-|@)RDHMfbjK2AygNBSfz^K6QH}gxZ(QP|yGI%uk2%5U188YUmV4QSgLZQxY;;m3bB{dQGqF2AI_N=r#o!pHAoVabT*>! zFN?$H>7W|&F=vqjIBt z%7D9-FU14o#=6{w7DNX=vb!7LGMf2gmy61&sCFNsRT-k!FP|8|jx9 zjxwK} zv(1j65f^-Js)*&@J(D*4%L>Pnr-S49iUqLa^(VoOT~3%+^j=#yo;;mxl4n#BEVJPE z4`E0S$@JsNFPlGoY|H{@(M(A_qqFFBg+s~H!J)ii0Ymxn(?68g6b>a%DTee_sc6gJ)p3PXSfh$x(NN5VcrKdD4$7fQ`A6hLYgY)FKJC zxOqeoZguu<*}YC&oQ%nf3*PJ;4{hgiyZ_u~Y2G`6V(eV0bL~~~;9n@*#FKFC()J2) z!@1h*60>yxw{+66G%Q}<=`_%Ygc^+x-vBbmYFxzPpjIxk;6wFer5crTL>}TOUZLn8 zQegSbhPVYX`k*N+AJA>r@foZkwum(K)n%C;L zva)FevaD=86)#frO`uviKp3#s@&-2yH|flBV}+t%FItv8|1N88He?z(g24R9@pYR# zWK-gzxsDQEXxK?(rcoQED;9R>0)X7Al>%fLI7M+iAOnTuzcN&`n8sh;aoA{a<_5HJ zPvF94uZmZK?G>Q;x%E728P$01j1j z@|+L6*a%*94>^g*aqWBjxy2?h>alpg$Kr0@_(NNWy3f{hT#6XCN4j)5g};NafO^>A zSZc50e{FayH+BfFRTTHZrM7JhX>%X($}&X3OOO zP;P7&2{yXR^$kJ_{E9t8Yfcuo5+?(AU{8ga#eFMYwh>%!U%8`n8I^;Iy_{D@Z3cdK zpc$bDEW3x*a@mg3R`>Q!MSDZ@X2k3BX>$Sdp=#agJn`~77kc7#Fz63tkIaWluSCtZ zwxAQ&Nk(8}W28_|$L6RA16&lurrY!WaT1fB5+g;8_71lVYsR~d=>#?}_KrUilmq(C zW?&i7ozAJ>+^qHC%w>Od?bKfmV-3%7AJ;&B9AL%?=ETSTZ&sn z2YxYRS{0LnH{^e^TxF|aQjs!h=C}OiqH?X0Ezt_uO^qKzD|1N=u2uV{5?K3|q9tt~ z9md+1`L6a+rO4#W=^eBWnljT1SR@yEU}-!nYvP(y(}XaYH9_Ei+Jmc4P4&X!Se*m* z(t58vHT7yVGO+n=YnDn!;0NG}Q_+lXLZjYtlGttdv`{eZll60poV)B&V1kxjB;qf0 zt_J9+exh%_qydTAtAk>1sFd&$!p}oQWN02Thg?Yt&FS>V4dLiwS=qc&;sh|3p!vMg65xnM)F z`2ex;tVkp{aS%w1%r^HmUXa0e$?1bn(r;e)8p|^Jgm@8|`k7h|lMtr#Sr~3MjiQ%h5b_~5DKe-w zk9n_9SqZBw9C?uqEy$ za7|)TZv*3cP$2^!cL1+p3u>8&$=Mc6W$5!Xwd*suNN>46u36UjxaPCQuf&ImQS03b zfQF5=x5-n1rV}dhgKcM;Wvu|LV;RjiP?{l$eC~ zwOv4M`9d11`_rO;s!h0axGQ!!Wz4kX4(utykznRM%_v#L!o|v2Hhi+~5u`o|M$z)B zvwO&F{}Dd3EGphU^~)94C9R*lEZ~_WF zPM1`?1lLJC$;5b}t8{rh$uTfHWiYDut8~k_aGx?K3eIU^PRS>!b0!>mXO*UI`z9WX z2I#7HCeNGaHMT%Na;>Mk#8~8F=7n&z2IkXf$(P=S{u42e`69B#d|2Hrj6n6ybW~iA z)<36o8C=)0_y!4!ekV_r^BMB2I)5@T&TJ`I!{n(5&s>uv4}(W=G_J&7#Er3UK5-r_ zYcJ+Ai7~63@-@u5ok|hcacWB9AZ7~IFnLPOWd~5^NZ-Ub2=4woVhoq}zVa)z+6jy! z#@Wm%WI(jF^cnL&e2$Eb?!5KtLG4YLCbC;N;>SH0D>~XCb+%+R-0mvCNwcN&lSQAK z*{07$gQhbyHe~dUggFj+uXinlDURE7mV!kVPf;x*!m^zAMv)9tF9AZnhQe7=jKKe9 zv2)GaIHu5SY@B5R`@@t8YagN>Fyaim3?oGSmThLk#PSHSV^+Z8&EE98NfL*71T3pf zC)%B~RG^9wB`>97zKICf-CVD?;z{;2uXk8vPq#V^`j#>-sv#$=DhMm*KWE#$9WNpO zXLl`HjpN(XI8g(6X?c%N_zD)4H+kTDFm2DlhOV4H;I70` z^}O$&i=XZJ$zCDHqI$r8L$frvl?1b?j7{Sln8@y5=-JNha^CYq4t1X{hkU$pH7;_F z^a-DJlyLVuVWFJsv734HGv0&gijj$_Nd+_AoJPhlxis~1ACqHv>FWvhlZj5TaQ z6R)$ZZXI;!Qm0x3E9odjbf&%Q*h$X2cI<9e3mGCyL7X}zyjMkjsq7n@LTEGP98Ddf zY>Oy$u*hOjrg+)H;sQHPqm-<|6ml2_Ol6v-(-Q}h2^59&anY3=v=gPV>S#1lt2f6R zVWrGzXwr7prhB~IPa}F%oQQ0~c2JB+e2toN6ObVBTfv)d^se7bu9xsXE7W|0 zi;rBxPuqLmQ#DeVvx+FPSuU-@K#*pZSk#uSYYhgC@tqIQJ(Cez!0v6@)%+Yp9xAIg z;QM#*fneRRSde7?WK_l*jm1%+dIoJrYZ^eA5wwP;= zYBw5b0N^tv-n!dE&b}%@BV4#V*Fyu}zsK}awP;@JU~Xk}!I8XOAeI*bL88B9^8wKf zTX#J$PGQawvkXL_b{kt(*cg$mORcfYt&-tItmmWG-MKy1MvkiyaGV#E5~h9*(hPd2 zLJ^0ur$voAnmLmZqup-kNUXtbOwBfR$m!5-{2-BjmLIT30N?{&lblt708>Pief~=hTekEswtqXdrKmBf7 z9tjMAI^s3SaM!8Ob41KuP8QQO60xPG(zitQlRLUPDVV`Z) z?CBx1axF(p1HxXrmWBv>K0D4GOIIgG_>)2FVBTAQ%c$&GR2@Av>4aW2iH&T+a zvr`Fwm2b+Nx)y-w-zBp#86xD|v7ied{$X&pRffW73;ZEg?d_D}616At0KT{?zbGq zt<<4bJ{WUS9~nfc%g9p)8aOfM;yugGA8pwr6%r~_w^MU#GQK{AkzyDVCR$gaHd4`R zuufj>eNABitT$QcYPd7XwL->IVO@Sw9O7EqLVD^AZa^nt4L(nRR~bq+DT&Vncte`@wN3YVJN8-@L^hn3jg%}Szz^tvv)#UH<#{e_@c(s3RO!4+MdAHuPP<|EKiVjFCSh-ECfHn82B~%7?hzQml*W zy$a8ecq2xVrOV?w!Epk})nOw<-!|(EG%sAJQ;uMKr-T^&v`#rf1UCdkd!Ifk5e`au z51ePP+cbendaTs5*?G^Y_m+W`7x&k{7F2cMbHM+j{J)6*q2i~Gl(Q2FMPy|TM&rU! zt)4)hTZ*BL?+{^ZXV!+vce_6sQZ|bvPyPK@A%9Y;>y_)deD^ON;lYjcBZR_rijRJ+ z;MYxDA3vggE1OBnG8TO6NV&~GPKOk*Hil85zL&Hv4N66TbWW=)ILTN%bM*X7{0o4G z%`+=`w2!d@k=lhnkS?K3R6E8< z)siE@0kLN}iT5>k#5n%&ZOB68m|?jGtzO;`X)3$3J4`zen@ zSuC-W2_eoxwJ@37EB;tWxo-}yXRe3$v`Q7he}VY#YMT@~ z!U75c+JmO%4jj3|7!l?&#$3))JB!@Q)REY;CE=)U?iew)q&nC#I>_EOK{r}- z!wt2-Z~ciO`g-zr=49 zU(|(QAF>b)i#%wO-VJ17%_&BbUw#mfV+sRePIdziV7>=-%2&)<8fVobrCEvk6KiMN^Ska&)HlJHqE@smz3$n(_`JOUKcKTL6k**sgJEZF>Nfp3Q9 z@8tCe9k?Zq8xhA{LDyJcy8t+u@g{Yr)*0RFV=_clErUu8zB|VxF8-S0NBabU~;J;lJR;YW5q0=MxNd2I=k6* zRu)^@S?xGHJv`etE86I`t+R?s9@^Q35c0E!6Y{1WLe>$rO#c?hb`m@b){cje@vk?Z zEmL`gx=UZZK+(MJev`dYngG(-&g7EXNhsq4kItTJqogF8=h&qhCV$Nf*n7!eab0Ob z5}hI3745RgO3DB`Ef?t`#}Bh1I)QT4r}KGr&YO?YtJDfPRm~tIYR1jESe;T&`m9bM zv0_S?l--+nSF8@~%w<~xOrUr^g5bh>vE3zS@^a_h^2CB2wGk?b&V=C(PE=9<+?K%s-Br@=!C>yizK3+*$T>c zvTZce32~n*j*^g8{34Ad^<=_fCj35(mLDH!P_~bL12M2RKC3l8^>{TJ)f8j43KMez zO{({wOAfb0f!1r_A`%O+2df=17{ar*uP=!!o!ZObk9n>7Nr#8*xP)Qx+e!HTiMaw))L|nuSHem6aKkv z@*o5+NgTN`(rf4&iwL8XcN1CS9hyFBo&{jFI4b2!G2IR`5uG6b%~(c%(J9dHX&Tg< z-Cl}UI5t}8*l0o*h~M+6hD)lpGf8!adcQSz1r*5 zGBRSt#Mz56&9i6|4=v zfjfXIXVo>B6C10s>M9S<#CNq3aSyi@z2*#FgU}NFvw1EN zEUuA)uw!D5@3d&{=23OhqE2g_)Uh=k;z@2kM;rawxnhyaxY+HAUF^o4@fQh^xWdy< z+0l@~N{cmY-S^9BAtQ%_)ET@m`p4EU`O{98<9}-lqc!}1o z*HL$4aiclPp*!)CfiD)T&b3{Q78BDHP*OXt#)(7PqVF)9%YsOW&0@|qd8ZlH#x9pfQV17?@=(OaVUd*Li z&Vmvokg){xA&fdAMzxyl1FJU;Uy!Cly5+!%eISQ5Yw4B)XcSiqtuYC4fHh+v&)979 zSvCgR`z0k{r+O=IN6-8!0?p_u_qzw9e5N|Ki){Jf{Y}|io9txPbxT!hK=^dM7D9y^ z^Wwp4j`m-uzVUo7!w#$!U}mk8ko2pwaf&EkRaS+l$P1*G8vXq}hYU zDopmUa^z*~SYF2dfDJghEUQanUc%e3FVe6h$({QjwX3;>6a<>$hW)b?x8hWpogx#n z9`QZ9pIET61El}k1O3%F|8WpEB-}W>Ko_h-7A-(87qng(VeUmo45UW#w|MT&j^!2S zoDcy^KhokE$~**{>PJpbUX;2+WjJ&@5eJwIQ4lgO^}v<7!;S0=5~T(j)hhKd-m4*g zZ9nZX-m7AxjEby|@!lAk;OG#CHHPlK=3Y9Eg0dJDa8bP2DJYYv!+Nh2ltofd_Nvn| zD@*L4DRm(3iFh$$i8?rk)g0D~3LMsYmw5&)bclk&8LoWHdL`rFEjQ^YsArBj;?ali z?9_Mksw(J)vVpWvD;p@4@C%>nsz`cUwi`axi4spr%pdP;M^Mx;bSeVC(K3|$+jJ_V zmTXu~FGA98FiFe)!+NR+A|*?6&k0L+w%I|+hitc2!g`a$NI%r(yt`&$lRGt2LneL) zO`Xm7WjG05ei=zunWtuNqsAmPcZ-ffXO0}X{ebn#FBJmEW;j`=$P4o>%BP~uRmc4< zroeH(i{^aX?_&EOM#+;BNXDI^7Zd1FN;g^icR zIg+>{qkh?%$}pQjois%PcryT+lWx(qb1u>EK07B&?VL+8JLeJ;BY8VVE@5ZqgvYdV zpn@S{Bs}Dnc6_-lQ$>;z$n}$!5~x;;@NG#D#_?Z&{@a_s+6fZ8?-2v36aO`2y0-b%xRzvc#GUn%6w|dl8mC?%;W8D95{(0Vj@z6=qRV3PadqNnS4U_A!F{FLfV!Ai! z24K5!XF_3e$>U(z%|__4c-g+@dQwQF&do}^%z?>_tSv@Eotw)5L(U1gG{dNjA0?9P ziI?G`Q`VS#bDT$}=GO2K)n{!_b9fGf6`Iqsaes49;o#F6Kz_`I^;8)JE6$th0SOyR z<-TN20?5Q3WW3CI`xBYMjx-ozxiL!gNOAL;m0%a*e3|h!epBU6U zov!pOG{!Ks+N4U{#NhTTOANS4!ffU-4OHkyDk7Jikv1?tYS_})P9e?5c52?_$QMnE z9QiWh%~exOOnP2sB32ovx*`^*AwHO~Mz7#)@l@WK31nHLY2r1MiF=wAtH#QDGS-g7 z!PcBs-i}j`ld$Ytce7s3yY|-8kkiLSHtIe=r0Xao|=Nv!c};JfbgDp3pG}?e71M87we-%+Wp=;J-J89cQ|-s3+UJqveB;XuY52|K z$z%oIb2MK`R-`u?ur|P&Ys5T9&gp`e1YLTlFT~iLCG`_#_nO$fmh(d!x1)Ea8ZudAfx>_n4vG)&bQ?N@aQv}gCR{z|zayw1`?t9MkaHZ4O7cAN6L%B$dZ%no5_=R?!C{7Z07Mig*CDaVFfeSChTAt#g*2P?$ zg=H~-WmTp+wVS+P?nL9**Sr*-K+zw^`d=K6JAXkI;C87L{l%I)FYV5qiQx~e<>t9$jbEZK6N&imML5;?JD$(AiyaU9FBotPxHv7HAHB3(&Wwqm`w z_bRr5Cdz{VZGg~!AC%IP4g^9AC2fIH2*nH~1%{F^eZWwrWM=4;>2x41Gi^Fh{Qv&e z-us+$udft`0RPT>{?{LQpZ(r@?X}lyuYC@6Vh6V~YVb~#g?Dm?HRheQ9Nb#i=_}80 z4sQ0wX;@~=PQ8QM84!io!OgQrU}Ag69Ng^XCg$J&ne<%{5ry`q^C)&!UCb? zaJrkVl09Sf)p5=;XsfKeIQIs3Yj^JffSS8?i`+3%M%xBE)Yh4)ZF}T9xq`?(VXhzz z#g%r5J0SH%2n2%o?%V$Y%D66r|2m?AJK^?UcxjcB7l_PzPGbmD;7ayl}0J>a7!;<)YC#x><1$ zoO5(@emiR`ItM4fBAI-2L3Gg$f^{s+`;6tfltZ!bB-7DeGomaLDKtazOEk4&%4pqH zgA~pyMAq=HsJNbVx~fBk5oMhblXV)0m)1{Ts;xPo7qo;r<}6xeEPj8?e&ia|IuEONn>RcOvJ- zJ{yZ1^1)|0*SEnu9H>-AJhxp=KB|1_FLfT>{WN$*|w`4t~A+4`&QP= zWxwSJdydALAph%X=x%-X8+T@XykR$fDO_4IzZBbzGIK_pjy9OfKGLWYVcb@2;0mQ2 z7`Q#yawF`5!8;*_y{xl7+mBdbbhL-*LRTpnAim`K9JYMA6x^&=5IXaZTw8F$b2l=$ zeBf>Buh&F7#QenO&0!j$X`@oH4!3TU!=GKdGb~5k`_a$t=`}r)!@?AXpdfv2 zZ9^dgb21w}CB3z6KgnEI}uGVHztWvkus}&tc;Yu5n>wvyhSHgO(o= z5wwdRa^0E3l}6V-%-K@cK0qE^WMtiIan)H}-v93Ie3)OUPu67*KD$I~n9sw74*+)) z>+bN2$PL(yvjfkVjInZ2`y~6IPSAzQUr(Rz8j)QQV(W;@AX#gpgFQLzX^@U8x$T(O zHTK>35hBvsYUmLBr6Wjk-W}ry?P_I&95OW;Rv>S{k~BMsA)1&@yjh_{yslWFwncKm zsh$zjVM((CYcM$3MszeyJJ;NDfrbe-9rK#$e z{oP1ex0Q?bwxQ^=hNf_mW#J-!(2`>-lBF{jIfCg7hO0h`)1j~f@6LN~QulrwtUSIE zZFS&^^CQDgQZr+ycMzZjpd<_Fh6FbR0FN%006io@8|Li>J+RhGaJ>2zLx4NY(fZc4 zZdu&EilOM{`Witf5CCYYSHvn0283d#7-7;^Zf)ZWr*I$CUaPi;frY^^(mG&=J4W=( znP-VJOql3|qT_GOr`X(2%1BoSMlp?Rl)4&wWUqldRxebA=*~R?XZ8E( z6Zj{%NM{SB3a;KbIcsV9+X0Y5=xetN! z$(9t^G)EE{xH66=*vkpbNS~2`-{=I=xM)kO(H0ppAQOzouC+RLVdX?d=?6l_r6oy! zRa@-zyMz9gsjY+Q7woQXG5xZi+jQ4Z*1i`zMbpCk6rEdbWuKaoy3q9EZft7F4mpjf z`ED3r?WxgC3w=1qRpI<;G;gdgqv@9s2u~AoVWEB^KwA{grUDz?T%!3=u0>qi&&2$l zPsIVaM)XoB(Tf%v9Zg1BKyqcP2;Eaxxv~7W=~&Blj9Kt1Hi(fb?ImaDaWaY}QW4P0 zrNp$H$i2gbEVtG5zhtJWs}c}l33urcz_E-tz`E2JV_{=Ewi|D8N+i2h_9S}g$Rg}1 zK!)G7q7LaK)Uy`oopmBrvJ*!;b&iLdxzM}aN-_IMaPEQsg4C1cJPa{SU#39jSe=V{ zGp_>5e0wp0KIxg;doy~yhe6?+xEy3My{eL$uV|T_{;4^E2e8j`|CiOJka?XLsl?w_ zP~nmnl4dT82>0XqC)GikU!BDL_)gZ@ib=OKUjWnzoiF2upIpVt>0W;74p!#hB&`@`{#EL@BHEq&Zj7z7tPq*weW?$@0uV#jmeT~eKOmmc+ja|K=6;|Z_a z%X!k;fWJe?x*HGQLO(NAD(COnLxbW=eyxxtBbas{* zr#;lNm5WSoU*a78F0!Rpzgrw4^f`-&-n5-D4Ibb3^I0!lC=+l%EMFDZMB&=yt|61| zSAod92|V&u_i+MgbSy(0*znLL94O;5%RWPd@Tn!b z&;h%+@0$S;d7V|`by;^O4M*-?AML;JwrKYt>_c^c1WST=7* z;LO7Y$)0D7pl3WlF7q+EtLtv3Z!ROLKU{;&_jY&NT0NKPrH+4>v0#^dNSBn{g00np z84j(rk(&dfwCh!TrXgCzsh(WDxum2UPIci-kJpMtbt{%=HY&^c--^Z2W%%V#9?F3u zm;k4n2<`*E;?lvz1rqDsoUlnZ`YDKD>q_G7S5wd5FA7&8Wdyuj00-w4u+Ow;43M>9 zM@STEh%nupMTRrb>ugCtFg`%u?l#@c2MBC%{F4Y%GEI(1dBNASUi~+%_);qOH zT&uNiwxCp@>BYxI^=&#V+HSJHhUV6h;o@WC))CvLt)r|-fP+g)bpwkLmCWSg=Sp|T ztk}NX4z0LhVtY0vLNU5vo_SH1O#awgWpzv4cVstBhv zZ#IzAhn>j$h)lk7H>*wszhn9}M<|<>vtYf*7qz|6-6DO#0drn_>KNbX^F}-tB8Mcx z+Qf&&lG=U@7mjFmIWAe&fqxsH{CX0PEhI4r413k?7UiJO+Pgd3F0rGWOQbOvpIp^; z0rwUi9t0C|1sc4#lcsOm8q2y0?$N4Q=9c?qSK!Rw0o{bPw)*G_~;!49D?c94R}|H zfW=N%+=jN7KrU--myXorF0?I8U1j4NWXJ(+cF$Q~9cPoR;_@^%t(?yVR9V*-e+>Ab zU1=)LOGODLqE}sUvsjn)q9rTpa@$CI2{+A*Bg1f|LmRx>B`*Op4gkg9%v^5#)9$vi zox)XXyTw2$2^r3)E-u^LE<1Zm>?0QJ?JgZoZ5MOd`xgEfHYs6bz~L)O*m4D^on$ZXq&vV|JOECd0J-#vMmg+S5d490%s~ftHMf z4Zs2xc-0-$N|cqqc@=QvV$-BR9~wna^1K#BGWcb1umS>M_b|T<#3-HZ+ODL1n4OwEbJUKBX>5;!S$)VYw?D0(H zQ3KG4j~Zf|W|b9i5x1cvP1gDsJI5qYcHSovUQlW9tuX`2nXJkgS`PGETNPP3w4H&o zX}U{wrnVb>5u9QXaBFjy32;VozHm9`9+L~|VXnB+kjmbavP|lsTme#U0MW9Pa)^CE z0$Hw=uS9T_!NszA83nEbcAmFO-h5nZyvs}~=-xOkN?1JuwL4%0@ALyn9r6VaEW~xr z-Ln#5joW%a$Z^u*UR0D%muRy$VQ8A^R~m|MIElZ)B?l>gciVDdYneCMNl$He5`X+| zhUJp@O;6=}Of+IHInq7x2R#QB49(2MA9>Z#*s1SkP+25b4tC~|_}#l1uvJKTFc(C& zhWX;40P9{{)X3$r;!1RaiWfET`Hs7IT@fnFOLWO;LWVYpDJ6~~?EK`;pV$x@R_w2G%c(3k4iRBN0J5Cy?I zH0j91#%EMG$f-~V&(WJ|a`b;iI8l>rFT*O5ItsIwcpyu;*ODYJ4RH<)Y;8$ZDVHqg ziSMN>Pn{+AWESH2c1&3742=b!kLTBs=dMGzGY~u5&`Tz&%h zA|r!HM%SG|S!YR(%FB%kIRmQ*Ur@m4m{`|@`wd*7(pPWiQ3t~%_KHeD4FTQeCrU4L z;vQkdbSH_XgK(~Rm++G|WyCc{2-}Euu;>qXx#?&Jycx_w?k-~n3nP%q-tJC-n}`g2 zon7D!!x@e+6F{8uR`75}x%j^{X7v#TKAiB(T%CP50hq(~B~1&@>JgbqNeQ}ci)Od6 z`*Q9SQSY}xg0^pTG`o)&BWWXg>r4s1YPtGhb*EJ1UQuax+l8>rcA`WxyrbAolyW*z zLI@vluBB|zoSaKDc$1Qvdc$Lz3BUjl5nj%^%}jQA>P%0wpter+c+`8|m=GsUnve)b zi^j~@6g2w-J+!7dy*+^cvGya3>uqCrL-PGiIpN}3E_X`x6DGrp58T_cJ>|q&Z`nEA zDfKeL_)ss4m4vQLY+s#g1}$xMJ*wdMQcnV3=I|I1UNp_v1ty#>=iK*fWxS5Hw#ON5 zc3@RZm)FEkQ0RAArgN*4fezX&iN?9rMP|ICK8Cz^s319n#5#ETI8Ox2@tR~40%%xG zwc`PpN3q!Zz*TbU1|!ys=jgIO^L`tJ8ic-`hNov$M%hzl&@oE02sTq#*`B0502t0)sRM1Pj z7RgKa+Ok;(Lt4C5E9yPSO^3>geyUZ5$*OW5rglM%7t<~SbROku-Zlz^KwH`GV>#Mr11Fn3 zncKbIsTa3a8{f{bXAlEKDym1JDReH>n; zKuBe_JM8s1%uWoB-EQ5nt7L%}8&&q_fjWJAiN)WP#qCdi(=&9(z>g6;mjRH_s!Q}{ z%43+P2+DeUXh(JiA=wIOs5U-E3;b=g)YEYNuq%=ovL(AOOWCL!L|AgZ+rv?VxbzUE zo~4zOfBPBa91TEQo&RaN{mV#b9oZc)Yl3aMcIf9ybaW-N>Bt_|XR-)ySlPN4Waood z;?8_4t07{_W$38Bm6a3s*0v#4I7EdZ+=~2dFbN-WQPSHt-KDYf`4X6YWX%flB`s*4 zu*;dM*bHooP1#Wg&LPqFELvLBYP{b~NK2-{2qD03J9}u6h-ec8X;-#xcTiNYO-;D0 zcD>cQONP3rH9#~1blZA!T{L9xNH$qBte(I)gIuC|g4)Mye&rRkr^UqeN~;J9QZB0) zcWm)?zLw?(VsQr6k{Z~IpywN2O32~}5#o_q0w}OJ4Al}CdrL^r*k_m_W9L(A&?5%~ zhk0)7HZmITx~qM__2qhM-{z*k*oBX+ZYEh;vdac~J5)dkwGOI3Cp6+;dsdRBwn|NW zH{=wou2Pd6GlApAZncM~BOIw`u>m$$CI>WVF4zbKJRxsw^Nu}`_=bV!GXT*({6+wI zwsGn|lo8;!xIL?EMs$I~sQ$(ajEItRBTSP{#0Kj>v~r1@rSIV>0!q|mCH6bLEe4GF9FrSQisTpQo$#Ra@&{oA~odT zfDVL9*@+^L!c#`bEhaH#943_f_A8fwL{G&he$aE5%{TE z2puwrGGOuD96n<=u+*)Y))byyxt^YK_ht1#yO^W03fcDi&`N+HyPEL<27@N^iRu%6ym(Vx z9p9yNyADMow~ea7(+MF5D=&2kq#xf4rIPDFlvzA()u>n(WsIgWZ0cs9aTFuf!nNL| z%hzOYFahoF7tzz2S_70(qt>u?)aC3eo7T&K>xGh1Z$VL}Vo#j02+J^aFe}tV?wBpL zKbEfH$l|T^=pbnvSd-BnfMEO=$fY34q}kCah(cYJA_-^l*BY|9dmFVDY^laonFML) zdy2B#GcN}!xqTuj`#5x}KmPtGd;I-JaA&)gyO!v?QPUBatX`&oLnp3!_4|alU<(^c zwV`|3LDDyw=KYLE?|PvzR{{5I#d$gsjf{V%F@zy=4tO0 zboFx7GfY4J{(;ZHeckXF6bElsRAxALvST9w9@-0x1dmf5=4efC2-ILqQp_nOTUklN zN9%roQK)F$%Nc4TibMutc=R;R{v;{rKc@zw|FzHNKm11sBLdr%u_lDzj=N=YJ& z!#>9Yqd zb+km+W+h6?6KLp>^-!X!wVL3Or3(pd+0rT z&+8dM9slS2U0Er~;j!+Xm0Ue~6XhE3dHqUNPReNlA<+$%{D;^y{>rT|^0vCVd$QYD z>KpDXM=6`~;kANu@uuf}MT}c;{<3v_-RV z7qlxl*S`r|rd{73=uNvYCJ$n_Y>WG25Z9whi2hN&{o7OzM9gb>snyZ9(pjC_RsZI6 zsxJPGx8*p0o|`+7S^V7h>L$jA^Ai)(BkS%ijC2-DW3y8ugQaqQj9%Tch~JL!(dhW}Y&1gcXvpWKYYts|@bGvkDjlAlofwUV3sF8A zpBgP3i>AkT94(BEPZdTZ^;aIBp4u^6h|1H^-T8^}(YzAqZnO}U3YHsMDI6PTOuKxY zXn1<`I0KBPXUl4JczSkfv~-;YL{p*VsC+n2_H23W^w?Tgq(92UzjcSFCkyL_3sdVl zNAkr()9Z?bLv&I+zOGapS$Al>e0X-alj*JPE{u$9TEBVo=t>GTOOtD7 z%i|NJwOySXI=iiggWci6_@Tq)b(7Ph9;P;>@yVI#q5wHNRo1wtrpwW53&rWHBcBtd zJ2_h_M{crLN3SW2+Nz9?9#f@>LaC%VO(ipQwM(vHw>(qj!`1nbwaP*a9bn2st{jaY z7(X{z@0y*Q zSz87#3v9)(eudY}<|htnj6xu5IY#Hqj~o7#_?$mB=un$AVULVY9nw~tnVyLzr$HdL z?`*+i=ge&BaADNV4UoCXjZ9CKi_;U4O9rF{fXdX0t(sxwM`(H-C@@m+8)_)*hoL|i z*r0`ItT;Ux4NVmaql4_)sUszi;}uClSH?R#k%yE;N7>)DR;4@*jF$_OHhST9G*m3i zOyoxjlZC1B;ADO#*)aoU>R3DDY-Dz#!?3VEU?5wH)&Wf+KcWs8jmB&!Ykg`n`<-PA zc(4c}1I``!a{iX7!ZG$C zj_OdRjbie5#qr7U^7!3_lB1)AsX}plWL=?{2Xk)7mkt~5 z8Yb_D8jb_~$pScZoN*t{L;eb*40srF2~bAzGx-tQ6@HK8!TRDPLp1~hbS#*rqos1( zqga5VX$@GNf?yVQNWiDD$v~dFj&*f)b$6}r+R)Y0wXthcS8rEe*XHi7?(XjO-5a`l zx;J)j>hA6C>)yP+Ykl|n_3JmR?^(Zb{igN3>-*Mk-q5w7d&Bw-8#eT8*tlWShTaW* z8#ecJ^>p{F@7d7P)3dQ>Q%`SCU(e=^T^qYMuHU#}W6#Eo8#it2-PpHr^QNv%-J8~L z+OVl-)5cAkHuY}m+qAj2tGBy%eeZ_ep5BeUn|gbD`+7I`b@g@kt?%2=*VDJLZ&P1y zUtizm%?xof-EXGp%~ab=Ql>7~(9qbJYiew6UbL*`!o}ycp4E27l5>{Ux983{wl~He`mkn@Gtd0%$;2H zp<~B??k)eO>$cl}?%_u+yy!nJS$gA5-~U19x@+%v_25VU^Mh}B>)U_+1Hbc$Pk!#H zFMRQ@zV+89Gxf{PSl!*z+kf>nyI=O|2j5EOM?Ue%r@r{*r@!^rnfkURmfL^z&Rx4- zcIRl}!MFeFuYKXmPq!^wy>s_%qlLG;{R0&K+!wz2t-pS*zHQmg-J^xM`yTw=C;#x% zfBx0y{{DeCJoM(Dd-xrXzW05Pf8c|k_`^?s?vKCx^w-s%=Z-3<-ciwaFM?d#xfBuc<{{DXzOK&UB{?adh;pDo(%RAS-|HHrk z=|6t@tKWR*wqJfn*V`^R`Q?*)_P+8}P0dT&uUPk;?@mqkUUTjCosYczhbIpln*ID2 zp83kx{=?t=5G8PM<^A8Rzkf&b1@(=~?)%`9x!>A&@!50F=FV%bt6x{&Q{R-UYiev- z*0OKu8BMn|XX`I)S(IzeHRZCo93Nk6$SrQHTXJ?oe{NY*V?%rMtxegcv)lI7Uzb~( ztE*quxU{vu{-Vp;8gGgw>+ia3?(+@zKao4X@&13wy`t&t#pf>&u@H1 z(^U<-TGrIJ*4O2_7q6*5pAW6ieUPk625zcfn=3bO$t}%oY3ggfvhn_t%a%8^J>F!@7p6o3cxmFPi&sce!=$FV1gmm^;}p_pydmt-tzI%fIhx zfAB52-bMG_an{_&o98}p&Bpqc#=hoV&8>~)#TVyZS^tVfa}O-Pu;rXZyISUcw(+;# z+j?$&_ixnS_w~!0S{oYX9$R+bWc#s>D;saBpL-dk_`)W$DA{p=ZUeDhm>Jw`)e z;hw#tg;(D3vERSo!Ux~5sP~b#Ki<@G_13ZRxBdL|;CH_J%HenZ>J=Tg{Mw_x@t*g- z|M3rf;>ka1T-BLtp<5FS}{qfm?1B zQVoq1#*UPZ{mi{T``+LD@DnGVx%M^1*WJ1DbqzUyU#PEJ*Ex6pMY-;!7uK&@baBH~ z4Ljy<>B3q64g=T2-H zJ#dCl3vrj&_?rmSW z|N7tfgZno(U0I(Uy1ZpqOGm?*_doHf!p_C(+Lvw1Ui{1du;l*lJ=S*LB`?44;WyVG zX=uwWYHI&~hUWgUrPMri?yk9ap4EEWqVwk7c;EH8H*8;e_8azH^~OJ+`|9c&8(QkK z4=mep-;G-u>*{Z5xS%I{-;y=;qpi2LwB_!ozh?7AZENZmfuN0Z?|k6T7q{hF8q2M( zxT3Y5Su}PuU%bDy{!ngpTT5fEt!rq>8-Csks$NYf=BExJEFh$rOd(MVvGEXsfQ!4* zNGL^QF2vku81(}A(js;LAO8Xy`_aSff$r-OVaoetcLc^NSy8OpPf2d%+GYJ z9*WS~^U=_r>8ZkyQw5S{tS$W)+MAskm)5mzczSwb5J|OwT<8j&`2Kgd+S3vj5C1=Z z^7}e0chR$cxZ;PIR-Uz9{PtZO%_+XE(Z$;z+N_*QGk>@uqx2v6a?e~Gov?ZyskhZp zPrqgMf9Awzt{F# zK6~vEuf3_}jab`4%(dJoK)?}=--{cveykA3!kW=MhW z<&Aaqz;14l%h`7CUtjY4yWR82dzae7Gw0g;pI>UYxdj(B{kFZw&+@saiT%^be_7F< zlYNcf_cQHQg#Q$+bCEe;p3an@9LxBD{qL88=ed6pG)`Em{g=z^XwKM}yNI7WnVVDc z2};eKbZxqI{`{FrkMy5@_l#wl-8lSce(f_h<*sd(9kJH@w&_2O#E(W%4LEC)RjkGj zcr=9Mc;F18c~MJdackQW;MTtEj7;Xtv(7#zlR04e8|zokyzYdIN@@y8m4pL5^6#HD7M zJ!+k}mo1$9=KgdWk-6t7?03rTb!?RrmxOwmlXrN0b(Q}4v9_c(HMcy$SW|#~{{6|= zDcJF8m45a~x2d&x8h@yPWu8Aim$}E$&mY|DyH@(WRQSQklRubLgx@_Mu@>z4J@&u* zZ@GUCE18gTODz0X^~o@i$8>f^LOC@CLP(pZ_1a-H<@gD9R}Y+ak|fUS)uT*>EZ~T?kODgDM`b7rbAkE-E6Ul zm4p!%%b})E+b#2aNZW(`$UnPolGe5hJo~WcOpk_%hF0CU_ZN=li=&~XTb)gRx>yRO z6&Ci}ggl_)GW&`JAXJ#bs1-^l^V(U=heSb!Xa#V5TfW~CBTQBBBTS{FW>{5r_f#1W zu>kQHZXTZ+pPZeHhk2b$_+c!yQ+$u-B>uD>ZhV}+jg=1mA0q49QXeV+5eI~R$3?H-{DwpJEcB?;)vNrQ+nox^mc6W`AVV zj5A)SQUzvvI2-!=XO^H?KG@%XGj`>va)N=OUe&%#AWt1%hLuQRm_yX)AjbkzEE5M? zZii3U?(R%7jubd}0V?_E5Z2SFa3VHc?2K&RNh3Xac-*YYI;2Q918L*j2$ca+f%z0l z5Ep=i4Hra`XnO>jNZd@=%+74CI#)xznDT9pLEGk!<;Yuq)0b;%)A(CC!*rCH_UbvjX30oCkp5-Ma;b;1tZrK>L_VnSQZco3+R-X z5l6S;36-=$nx$VcZ-WP!#1cGQl3WL8;aWwu)+1@zP7#@?jv(2vouxu~ko8dD>KpI| zne|`*yifxbjCm%Y=*-W+83x@%OVI(&PAl@gxuG+guU7oWLFV~=rF>{Z~=P3p%sTFY`tm6 zQT(FY0pe(31S-syCmT@(J>8v8(GOSzg3ajgwB-79LQn;@89I7+dgzLh6I=F8n5fih7-|P_rn3m9Y9JZE||0)Kcf%=_H z#i{L7C>X8X>LP^#3o~K(T{=8I!%S69JJr&a4Ltyk+L0TDPqr-}eDHqKG9;kBa2{Wj1cJ21doA;#mI z^T#BEF%(IcRgH^Tfhx2Gx;g#uLlVm3%z1$B30`4t}wE3UM7LGbW_=ZNGKjHmfJ9^iwv#)F4M zqK$`Xu>v|+UgYxV4o#pl+NFlHh7Ntr<40VPW;J(~CO=Wa{X)g6I3}mJlZDZ7G#}_l zevHX=Mne@`G(PF4*>aIBF7%0K0!~dwkT^rAKtCLwRIj&YQEMM)^5Cs+Beg)Dxfw~& zSu&Fer5q9VI~cl{EQk#+wMh==?;f9?<;1~xLotZs!tK;ncE|HNsg63Prq@o-;CKTg zKTwz$>+i?SKx7uVs$=!5lE|R#^jAkKu0fI-$ND>j(i}>DnX$PefP)k88qpjwWy+ZFumD;O2dU2X-DD+_(3@?t{Dc?pZB&sd4qn z*7dzeHV^BOwCt%s)d0t*?w*!lP&meF(}rn#0LwwBGun;5lc2Bf0p~%)^w%0gjb`A2 zXe(g0t%S8tl4NTWi9!#EJjNs(><%)qWJwe41ikY z#go(;-wkFt>0Po-^@O~9+<7{756}HlR*%!Fdm=cKy&5^kOUMlZZnOHBV&N1H>6NgGMuOw`Y^T~8u$2rK*(~vge^!j?5c?MXB1Hq zYpsz*b8b9U8n`-gVp13kV}njXM&fm1Cz!N z+}RJe=jHi}6MTe$D4%E=2%m*xg%O6=jh^%qW&P;b5$2 z82llTaipOrVqrQezN=*L1qP}o?}W*dL2a-!{#r|Sv61PS-njypk6!62PPs z9nBxdxf?OS+WVDF*0__Hsb5<0Ej%3(M5H2Y!XxODZA@d+Oc-aT!O(Jpatk{D1cv-3)`#p85k8=0OgOvq)50+zUU zP?)R%;#&(N5?uYLps!nuB?yfj=eO}3bZjShB-M?@P0xE-6?c6#G(7&xPJb?Xjav1i<4jzZ=NkT?3 z*T6ch?ChqV=w=vmWFz4Q2Aq$@b93l~Vrecx)JA&>vcIh?EyYq>1T@g=yl^@_BdaSu zOM%CC1Dj#;0U6HTxpGdHuQ#S9J%X61NOVKnL-n{#0lTp2~eAr0ii% zr0w8iw`OK-Vp=TRjV&rxo-2pl>5*8LAL-#7P?rSl*$wNrqKn&|Bm+mXz_UfcLOD_- zpi|gz%^>H*3IOJK!<5!IIRCFzZ10rLG1+>MGr^K-zI(UnUh4T`IDd5Kmz*D#;ZLXD z`I$s%cQ=0gUJpTKeRn}i6vY`(xJcx$UT7JiQZkIgI}S_HNsK~%7wXCac6rn~+nYDL zUFi1@>fYh4TMkMcIw<`arEj01MSkK|+q@kix?AV&Ya*6oP2?+kId%8w)*4Bxu?Y*m zFsFgWNP3t^XcDxN{UDqTI2_DR^hX@IVVUPRZt!@aB+5}Jt>H$Wdo1!iHEpSAR;VT; zWo{RF4CW!-B>L!K)3e8gdfpV_w4V;;8MDG3z`m8tf>IL(QRkU4as@Xyc*3U$c~DyeaIdn*Act>!K~5^7)pnx zJ$nxzN|w8-QaqN^snFq+Nx>wgtP1iv&6Y?}VLDtRsrqi&us}C9+wrJ_<%w*ijKe|& zT*Ox^30b67$^aoiPaN0Mg-O=#-mL{Az-_d$fBZz<;X}Mgk#B--R-cyI>34*Qj-DG; zItFlDfL&L&jmE~tN5&;!507I#cjqf?Hb5ZYFnK)*81f3>P#V!-Um(NW`QhX{Uz~)t z@C1bYXNBtI7xhwP8SnT+8{(XfmZ*^lUFOk)7*HvSTv_ zaWoooTF;OqF|&@r>81(>tQS$oOKw`2#GiLQe-g$g_A%lv@PQK;Kv=vfY(^4TW=*%j z&&IS0+ynr=0mH4dnY)maogc~QX`!N{4{VB*O~MIyt9CbBafOC=|z%13Q8Yjz1nW;jlA%B&qvmhuNb0SnyJkxI=cF@$%lWB+1c%>e})xI0#UW zCk6LAAGp!kNh340GImdmO;@#zAhK(^m=vbF!rrm#-0F=_-6cPdJgZ^;b+ip>zy@O% zTMGFirdx0Gmd?!`T2bJna7=J&(VIAvhm?F5?^`2660Jqi=JWsZjfD0AX6#=U&nbbl z0Y)G<;VDTs!PX=zFIAz*sF3>29i-sHVIAYedn^d84zU zK+#EzMo7GS)r^M~=PqEF?$}D~V*88~oH<;S+esnC7?Yd`Xa{deqGMkU$&%9*i8mY) zq-u;w*Qu_yCdwa?=#3%~AHFALptCw*k~HDP--DD4$8P>?2C5`GqI5K!NMJd!4e15i z8QZhzev_HsFntt&agG{w#5TayrioV7%A3J=!ia*KlaxN3WSm7`E3Do_*KX3jjnEy3 z&bLfSjfsI0Pq@Ps<>=5aijHsCvdM9Q8I3#)cohK#E&~jzTiE0f?~%epDglLW67jl% z5_D4D9nks%sxABD1`LzY$L&ZjO+Gq>VqCQM+L6#R##&QHq?T7yh<1a8UXI3j!EMS| ze3u7D5OSC(Ce98`m&woVAl(uha*OqbmQOaLq( zd#5u~zfgzfK|31QURsU{X~8+h6G8+Cdw~mL{Pa<`T!kV!qBn5?T+4|Gd9*L)nMTPS z^46*X0z0k16+zxdu)y*t_7w2KkiZcosjHm#%7-(xxjRj$V4=x1Va{zK=XR!*H+$lQ z&Qee~^Aj9R>h%HM0PAg^$s%^iakbk^|6aUzY(1pyFfXpr16aa?HXzL!bn_)bLGg%P zc9>lXS<%5laWb4Wg>q;>V65|@tj0wvlUfHPU)Bm>0^nrZ6?kGM3lUGhV$lmTzQ4@W`!W(4&Q`IX&@a zdL-O_7Y^LW*cN_&*(pn9p877P(rql`vK5%E$c|-76R2qM zXp`1V2sA5N@FHaMLCl;=FF@JMb0P`dk1J|3)KwU^gG9RuoZ+S{Ei7da31oX*LVS;!4 zcsfpkgTIu^)ZjTZ;59&{wX-u}DU1(Oyka0Tl+oFuM5_t4?zV|$Yxid`@dX=d35J470YotE%<5} z*;p43ypiK}u_Ok(Rs`wWA%`=>W5$+)q_@i3k0 z{Wc-)p@f6H)9(us=ZK{jD^E21|Oaa`zh9&-VvoZh-M z0}9zP>rHOHw!4O6q{MTuAegCpuv*wq1+$n;2lWefS~{6WAsM zDUlcFp~QO_i^rXFIyYmk3Z&kUr(<FFx3LC`Xwgi>c4t^*ii^o2!p>Z5KJA^x_TwF(b%WCkfT?{KFRi0P+dbS1lUkcf;8r?a&SCGR*sm`v%A+$xE}T$~8v zgXn!d?^Rj^?o0Shph*gdPFvzuV^aS!O-xaE!-uDTQ> zcFE{tvd_ZA<6-os@*MZxXcC$vK@i3@&1rx`O%y22)~#j&1~bQ$Zq<_SHx`exnmrUv z2PupmWKE8v63WtK&q3|Pzc-vZN)`$O^f<%r^pcIyl8(}9ccN*+Z`5H2hav>jv{yh% zXz{#fb*F^&SRL8=BlQy$L3iZ{Y%&2x_+fI4A?6yN_yT4WvugOsm`%foBc>CMSL0bb zPe{DNX7MSKi6N~j82!g1(s^YXgoM+DW7jz;lmmi9OA2YM2`xz}3@KsZ(Y{z-?Iz7; zfi45Gxs3zXI$l`R?A-utPkIJWqfK*EwkrsuV1RDQXsNx>A*U6I@>8$|vyP~Pw6OwP zu#2a3Q~6BzrVIj#$HTOgco-(jU>1cPd2j-cs$34R*4kQn(Z?ia(`md6cS?FVC`}GX zY0{Y~oU~>)qk{yP%472+F%H5Ebe_~2akbIc0H`0lUZG^~Ut(+2Ko6e;NlPqEsY7q` zSWgIfT1~a`X50c;IwT7n+64!{B+1aNxR8gXoCG6cKyZR*eko#z#_9{BNi9`?U6v2q zMd4KUVccnY9k9V8R>0qVZc|hkH{#yIsO{t+*(=5v7j(3-(@N)tvtT(VK0t7E<7uIi zlK;IguPf|r2Bl~hD!7ltX$OUQ3^mCo8JTO^7I=3;LOO&XMn zyBmHWjw`UIam@CgF?Q`N)I$y_@J@(FxES(YOU@yDsIz*iZVvt) zbaWm3Kvl`hgA)sGlQ4ggBq4pUaSeuZY1VuL|nId^lC^F5Z;h5 ztp?5}$J7H9IKabeakzl$YE|69 z5da%H6@Q1k7HSI+AO{;9(SE-|>op2{V{rZ9BA$f#<7=X!DpbYdFyw|CTgQ!(m%?nJ(4pxS zvIr*_aVma#Ok%=_X#>r8JmwvX1SqFL|vC(G|gv@q$ZTxma95pGB}?9%jK9 z+B=n6%2%?0@_U<@80O;^LLO(FViRNH6xQ0yHsP%zR)G+BR0i-EX1$1PC%Wi)(<8dD zo_dFTKq5cv7lm}y7^?vqs?|WegCIcx^6b}E>Z~`4+i`-hsXE^wn#gG4=*o=5X3S6; z4|yQm@Io#g9yblNf{oN}$oqyFHHV0}LZ15432#GiyTo2^fi`3~DKot{c|dK9;OPuQ zCk92wxx(p6m1hTQ7~IkA*q_Z68Uo=x%Www_2?r2uijQ3!G3ey0AKd+68F>X#Xu(8Y zWZ|_1Np{-^am`LvZGZmg!00GU&0fVb;FfbYd#XyB*eay-yl+(g@Xp20ZXJYo z;b}afd$wDivC1%H3s>wsox3~Xj!)zPl&cX2|1t){EBsLY`=iqlTmu|ZqU)Z*Q9t4R zW{dEV)a>+Og@SJLcIfsd+-!P{3_P=#SJ{f@ZJ(g7!+RMuWT=)IC9Irs+*Td!3?P<> zmJDF;Y+3B)5K0ENfBTGxw}$0M?KqMTCIDTaYTYMLHm?k&%L&zGI*#leHjM6hD&ZCv zV|3WSsnx>ciTmU#&DJf*l5Nc#q^d3?Mf;}9@$&%*AN$Od5~sx$kvL^LHaIO`3cn%V zFXDZ2e(l40r~L`N9_tJOIq?_FvBG@F`9f3*1gv8{`USI%tp|Yt7A!1rkh?K&E)RcfFZX^0Ww#Gn~ zViSs6BU@u2z!jZ|)&vXZCZmh#&OQbzOOzB9(HEie?y|bxQRJXuqE5AgTKX(?X5oUS z(D>I&)$BY6o38GoAYvVHJN;GaJ7NAF zWTxV1+%;PpM$`u4v=*O8S_d?qv@>871W#>BhEyk?LOo%sl6FK;iUm0UrwjS_z;(J> zg+Vu09T;LDo1PjQKg2hoT(#I+&!a&c_cm-9Btz$P2DDLx5Gd_hwMp@DwmTSN zE!vGn73S&6Iiw0YMOYQI4fiUjiqe5xq!#-0goi*?6FO5tlCQ&ii93dlr8p|>pP_T7 zcp$L~vUsiDy3f<1y<~E6m~9Q6<#7XQ6bxc0?LG zWb{QfjmbqPl{QA#kD$zHvRfSd8%4x{#DHT%VwL6nDCH7?qL8VpE}YiOVT3E@Zu^4a z!sOs6F807j$*@aUO@@lwiK$X7wfi=7}U2R`j&)Kb5`El@e7Gd<9%l5(9frNBGt9arfLBbhsgZ z<5;%y`$)1*5NvAYol-&L@RCg}&tKln5$5f@@K`2OVv_M|Hn-Yta2wv0XZ4+jxa1T# z4VDT&gY+RqkXTemFz14E+#Lv_?NtG9Ji%*;uxfICs}s4T!*~Ys zl%|s~wxno0jMRY;<(NsWK~+#cY#45>7?6!evs0~@KZ@EP+mLz{rpOeNX$g9li~`Hg)a#&hE~QwgD^-{s%Xq$yvQ$5?=xig@r^R zJ;X7RaU92&?PPn(WUlk?WMCI^S$+(`qMs{~{c-a3`I1N%cT3&78z|=}GpS zjw*X&k;?_0q@j-Zv2nr3zrz_o1apEmrz!YBj`324S7n2G%R8D`F*^feUjCQ_5~;gM z+LkEjYmHo|HBZ!9866~pp!nKnX%UxXip1z#4_)#tL)L_1k=k1{qX;K2;GnBo*q}?&jl5d!-;_oVp&8&b zeN?WLCZ75ul3JoE?*JOK&mpKFNK;dOje#W5X0~su*-Gtw8}8<)Bu!&}{wuS76gBb3 z{4df7)F})|%VB0?i1C&&?bF8>f_2Hz3Mj?}&><$KkCP&2ACEwO)nUhBL@pyXw4|(6 zu@p2UbIy=n?mJY*sBAtk?)u4)4G9M`UIyylftcskwOfR>q5!NT?$!=7hC01!9uJXs z+;WUuK74vy*%5{mpC26D$5BIhdeUBhzW15T;&=Tjgu6YXk9XYJ zlF8WjYJ7Z@INy88e7xMA(HCXju(Lh0gYb>~>61d$>5usIOkI0sgy)sCd@kWvXix2~ z%eH6ua871`Q2k{I=_1ogcot#g)AteHO8iay@rj+xM~UmZNAL6bgY~ZeuMpQqRzmu% zupEu+nOuA3F2c|Aw~W6>>s|Ygkg5L08{9ZvN2u>8{T3mgUAN!Ic;-tb_M4dvPcFXi zb?xz+gOu_VWy1$os>|M_iJApI}cYy;tQqzj(+0cWLutF=9&FBbhRq1qc|-2~T*nYYTfwzV5P zR}$*$G9iDJ&;Qw_4i0}uD7b%tkft-o2-Qz#vxDy!iR+UxUnA6bzd@Q%IjABrEe-LXEe&-nG77)b9Gdl}Ku^Wf#eKYa-7^YNWoL6TVWEd46g1 z2yl8CC7wNlRiWs!XSHW~Rjn?Yt8Zv*YF^abVqdc2J631%UCndsBUTq)#Fwj*PXew; z9`&@6Pgz}_y&~Je^XeA@Zlddzuiu7jw#Pl4_Wv8Ro3g#3bYFIJc>Mpv z|C=DtfAtnk=bCJG>$TekwqLhn=Pshx|KBvlpY~jCNOic|p0Ccbzxn0#UwyWrQQ`m5 zzor*C`oM$V0e=vMoPiEXZs_Ju{5Hhb^Bkq(Jv^uL`OsWO-#rWEH}M?t_fFbX_z6Ps z!|=sF*idE#f1&@tpPqy6i~s#c%C8~}{QE`*CpqQK=R1D(5kh^uahyN#(|yD@6Lt}b zf1gizeRQv#xXBGZ{d07z^ykj2ly6AN{2gT^>xAE`X~#1|JcN(FA(3e`5B>g;x{?pV z@9pD`--mbzAFok2cY%|sLYevMK2f9Y(yF=_5Eq=Pe;=<=cNJwNBZS{8n6F@2{X0Qj z;YRwmk-BL~Z@w`$vPsIZ~)>1yK%ZXIJ+W%TA9{RcH;`aD0oB@7M(#GwSKa0G850CdG(V%5pB88BD(k!Gf8_c#r^-KpG#m8=F~}D$(`XhU)?{e zQTMv4e&<{BZ`7#!a_WXTsqZ_9hqVi1QTVMIbqkc0t`mOq)&08~bzei>u!gEX-+cdP zjk@nT$rlsMgpIpuGY6!-Sik%rRs*Ve@or@=9{j&rbgW#`nq8puZP~J z;U3a!;nf+JIGr?@giVBd2>-*1_Dm5o#r**ExbRrz#(0gjJTKH$ZBtI9t~Jd_LS{O?j;drrSE zrScX30r5~S$RSUq%2)Hwv)-1>C&1+E3zWYwRbDm}{k}ta`%E^^t5W&OOY@Te!@5-o zPF3^fEz}S54KQ3ndEtb9)$QMu>Q6lS>z6y3Bf$AR#LWgl-qV*Q^42T&JHAv}p!_6x zVUG7qIUAD3kS9Ixw9wACXnO~F9pp)d)~{B7O8+Kh1FQp2*g)E?G^l^U1f(k0iJdaJh}T!A7}I-S!%F zms3}35`IA*3h@vwuc~`5^)&W9gwml_5U%xw-@|jj?|rFy%05gy;EXSxdBy6a{2e^Y zw)sBVkUSP({Uq^Qh%f7Ka@+*rtBHSsa9yh0^ThMS^?O~aUB%P%Sn==+eJCDadJlEO zUihPTB`{Z+ba}<~OUueT-adc%(0&>}(&Ksq{RTSormA)xAs+T!_|vOTIWrC|!7zP;z^TP(0-!AOA%{@w@=P4-gl>|9Sq>aQYk4g+tQYgr{LV)#cA; zUb5+j`Gx#PNz?rQnS9}&@cwl?t1ZF%XL;5-i$1->KVQc4yLlF^6Rm#Sr(ePIhj|um z3YMSZS#w*>-Kpi`H&}^ zUg#I_Ol5+cu~7MtC)%;lFW{`oT)j}isyxZs3;hEAtBf5XEmSy_7x+Lbsp2v0B_&>4 zk+X1Q+rruLzErV+7bu&~-ky%scn*79S=ZIbua%VMW3}>?7U+eZ#bZwQC*HNt@3z!F zPSXn28BgVf{Vp1;-$!1Z$OmE1hIu?dy&(65eHUc8x2N*L-Vq(v@4ed+S{3j=$j_U1 zCv65C4syfCklBOo8t^dmzoR#i83Hbe9_zPfJefnF(}7n08RHD)!kPvd=Ue23=ddoK z<@%i@FX%{$pMf1QZG%vne$_IS(pII)_EgD>H&w+|eiP+`esZuXe}Z^`d04aUln*d_ zu&VsKQt_~kH&8yvTklQftM4aM@zBq$ln*egmUq9ADj(MSPRa+keJho(_J5Fy2OKzW zQ-TAxVF%Y5pWK+}``_X@!2X|j)>zIWd^ur(@F3wI5Q_im*T!?elhEEjFeb?_`u#1> zq3`eVta<(xVW2~4`8(AACGx|1KbWfjW}bzkD(y9-_NsnLWuu1&w;m}0RIENlbqSlUJ3Z5 zc=(lnJ(0@;F8y!zoc2J7*H0&~ypwjMcj@=~R9%;XEropHVXeBaB`@%>2W!-QA7c)C zUF`*VJ+vLdhf{Uc&-Om2UoRz;T=5kB>?ZsOVOX!XrsnWJsUP-%+N`x-f06P5mshBb5!#oeucYt@$=T-JkX(#NP*H9+lUphSv--8DdylmlYBEb4DQ{zwT;J-JMw12~+ z$(YsmVd7zYia$*M0q1AP3(v}X2k|sa-cH#t?#HXzd7>)*E0hg;y}InjtIB?7XVUJ8 zsy?4dl?^)C?|Gc~AoJ9E1f2Nd=Jt&AoKP<02iSyiA-s|D+bRDRLdh_p{Q1Ns z{vGM72t)dePk%S*(qlsUZ}NN-e}_m{{gD1R&sXwyE$JPp^bhbXy`YVBg`xa2JgeXT z$~dk_rGJfQt@A^qr`!1}(o}vIf6Mt(nd|wxfj{l_m+`l6o3q!6G)2#Isk(|ke4V2g6NC}*8wpnsoo5o_=YbckF$Y^!;(-Va%>Hwo>{EGUO9g`RVeZUYbXKzN-D_Q}Mu8 zo~C`RiGI!RuN+Sw@zAdJxqjcIyl9zz+fw<8-=2z#7U-Aess9;%8TxwiSi_eshn{FSDqRrzsoc<9ARttda7n<)Obwwfi__ z!#dR}`why5@w`ykzkU&A({jTT3ye3=(_qVe^{o!pVgCnshj<9XItKXuBV+4hg3<>x z-@uQn(=)r>{(Sa^N}ltmj|aYdg1B^oP%h{Mp2E9;yyo-3i zztE?`<b+tHzjrr>gFJuUz(n%f8JJOzW;-= zY1qsMt9>>4{YUCb<_WM%pGnodENS=l8g*O97rm=hcR6{1P7kHV9H!JkzTjM|ZhHLb zenZ_J>IQzMv^4JyWfacT7;`^$)B9+?y2onN-9gzk&tVSfAld{s}sJBdpU zuKvxX`VDyxQ8vI*X}?4~EqjG>Z%Wk-{XRz7v`qU1@gTQ^dI}#&)m6M_uhWnIVUN?V zK1_HW>BEFK6P`)9m+-Nh+cP?MI!P!RbCghg^5uk=6P`;b+raPL?(4|0a`zD+#n&jE(Nm}1MwgSh46PN zAMk1@m9O%Tr{ZCpCnz7}rxR7}e=Su$%;PJm@jq8pzWH~P@q|6~SCkh|(=Q@Fz(Mgo z;$faa&iJR)c&f|akSgD-2Kas9mK2Ox$3VN%Hj-ChFOj^Kr>x|!KOhV+?c+JXD{Ygx zdMugCJyVHK$S%rFL-y_sMzL|PqFV%wQ)3hPDTt)ePgs&qE^d#MW@V_ln{#MG}L8$%Q zOn5LA=P~nT)*;ZSjz3QDOL@(|SBZcBfwBP)s{Iz)tIGa2$_8G(yecoMivKUl2At|3 zFW|Vw(3dLv`^cS=*B>Vo4Guiu2yxkkf?OKH9O;5AMgBK^1?m~I7an&4}XIEFi)k2@#{JLOVD#X+M20Og^sa5x{sGH{5>AqAa{A$(xHgyACQ@Qk*Lp_Dhel)?eFvjn^ zgnpl=ZW_)nX3UMRt{ihK@jw^SW3Dydv#aV}K>Yl4CI4JqcO&Jt`@AQ44m3bX^XUt( z|M;me`vP?XOrM%^D))m?OFZQ1O- zHR>*>taxa^w{+dKT>8NpbuXc=<{Rp!<@WS?eT2FJE}`s|evBbLU)|O}Na$xMyP3MD zv%VA54Ru0z<7w6{SJnN~QD*~tH(?KRzJ*YB;V#0<2>)ipoeO=QP`v1O2_-|`lXo`g zfa{MDKS28Pgrdp&hn>IJ`w1n>{v)Ay+Aivg#)o>ZB7Ph3&D7gT_*LfdYQmnu%JyGH z{8glXj8HuCj3GD9(9RviRqqc7*Aj;G|4Llr3hh5i`|?Y9HKAng69p%aJxVAUJJ=Y8 zh|7i;(t}-`q)ZN3DDZ*SPgL@=EyTl`sH}dADIf4;2l;{5DDUA^`B3kJ#}e6QD|J_^ zAir8Rxf1!}Vfv+Iigdk0lnJs@TE;m-dYDH@KZi7}dw^fvAveG0NS9pv_Y7Y0QsB8c z@&(U(_zUCjCoS-lefU47=Xdrblop7rj@>d=Tdb;oBy5sv<&b+ ziKppsDEEA-uKGE8#L3(Lj!=8xGQ$0YIYRaK>ARf%@i5^A;vVf0*Ec@}f^y!c=KXDIf5tkNhxijmNu54{d~cDt{;GL9YpVmeSu!dKi0XCn8Pu6a7vCuQ2Z5gK&bh zYsuS6cpKp_5?-ak{65PZ!nhQlZ+`|ltTJIOPuB)pt8UmQYEQp!Fb?U=)xTPG7xHmg zJe|xxT{pCQ4*8PV!yM8wds-e#*9~PiQdh7F@$JM#xAhBW5PDA6Rb0PUFVOE1@-B77 zYSvAk1wQz1EB9EfzS3uV@1lIbd3BL4ALj8Z^dE5QOAE9g+W9rg2fFmF1D5!x-i}3rwe{*KI!kny2VD;C8zF3DSeUnBH6eKzgt{9Q`X$J zs>?o@DjR%Kf-YPgPSDOa+S@_cLAZ=iG&;n2%%uH2;{ zDrLDiUKrGO*6Nq2&3)re02KQVE6jIrlpGM&BMN*=4DE- zuYZT6MX3f37ml^GTNU@dO6zg)IhMi;8HZ`ry%AGmZ>^P1Uu|cod|`C`#*N*Z2YI9K z_}K9!E=?ciD20xf+Dww^wp-6`Y<$LJZ2Z`=<>|5b?>pL<&ZyNluWmf^f*NBj^R07U zl{j_Qx#>**`Cxqs=4=~X$=>kqD4HM_oRRlei`Exs?q8$w5R@~x_=QCIXjUour>H>ki{0EljryF=0laX7o}30H&oIHpQzw9o&EhYv!%n- z-!QUy(^$TH^TwXSNcV78&jqJdtI*rswRt$-wK3njzGryD$c3{8zI2D3oz`Jzr+=}! z=FdB$tD#x5%1*xQIa+W)D%kTNuV(E(+}qXN1BfSJqE?c0za8SNe`^o@-Tk8LV!zU2Ca z5z`RK;SjWFdUDX-?Mp+$V;hGzb#Gk1neU5j+&tVJZ8?pGc$e$=Yc-5b`Srcs!y_Ae zH*DCP@9EmS;wrwpN5)LK*xx_Oi>4uQgZ2>w3UA!Bxw~)ENY_a3=B~{n!#yh(D%`ui zZ`1H_@5a8u*yc^^H?F_*6$_6mwevIt&`RIS0<9D{6tNV>!B98$jBXz3&2Q@N$#)O0 znoc+Ew^3&&-^z*iw#R@0TWf=*Z91q36YTFFTs7M}47Tteo$v*f0?(uWZ+qwcWl3_? z`IGO5g+1(9;OzbZd(I9EgLz~|q=~E@5ZyD~s5MsIGb1E~9+4T5UA0qAWqPKu0)d2( z7YHFh2!ZfUI3bKc65dL9Z-w8*?ZSHZiO9_N;=OvVx~psS1LurXud7~0L`K}Waqstj z?+y10!~Wfj<0iAYN@Sj=Wm>3@IJV4E2xv2<-}ZZ*$TUW zf_n=E*iYiZ4o@<$8 z`tCFDp|11TG*yw7MJ=T*Ke|4#4r5_*ial6@aL)l>6_6Z4ZaOsZK-mf|*rm zqBB)0nPs`;;JqVnT~)e5LaZ}la@~kK(TU27BunWjE0aRz*erKoAD6m}QQM6biO%yn zN$*4_wagNe*QL}YqG%A5JMbp8ZBX2CQD${nE7|1dpphivUzn!Q*uZ%u>f%nkn91S_ z)3w&Rku}Dzx)YtC?<%E@O%zL{8c}|lU!v*#=4$!h+Hs*WL8G;nR&cAGN;g{T`;45I zD-&C2+Cj;zQn@wg+DzBNrvLtMZNUqNw!mi!y7hJ}S5;zaZf0pwcrM8k>SeAm^>&Tw)bnHyQ_aR-i#vyfDr*Od{8 zY*cLO>cTnpEs9thbh(Ogb(P32-m}k5kUQWtTib_t@kiY3Hrlk@yT~kU?Yf(|+6x-I z04HUhil&lPX>DfG>fX!U@$A}QRky9X^ue{mb6ga*!4)LNUhDr+?U^mhUpE^Z8+3A( zCML^GCGNYhWE4C4squ)qi!^9LYMhD8AT1&mTF6W1qc_qjuJGKIwuQ~5t}fr_<;JZ# zkiZ03X@#WO@ecbT&gIQk{P+!nXX=XF##$hPRjlJr{s^yBHa7g9F=@Db*-cZ*{;6x5 zB*s>zET5UXW^r8g?pEzC#qK_GJKXWEIULoSwtj-=v@%Vj@YhXh5?s?OTs1fEIoCy# z<5GjiB~4tKrhe8V{(aivx4U&XeAwT^;<1K>((V0Lx0Ov{^2SP8i6)Vy%;jn9BIBcI94%-W9F19VZ_q^;?i{G{mTk_*;1$r~a!2r3zEXuJc zlK7$bL_y;l8z;u+`ybo0?aXqs3$Pc$ahbup4ud8Zj_+EHYUJ{DKeo{JoqD+6gtKqg z$sheO$I4`;vQ1M9m4ZFh4}Z2FWp}i>OUTQzQ0$) zkB`UGfr`EGEOytkJgy9eYojZn@!B4Fek-6}{DF#Roq)E*sofO5e+R{N+h;Q_tt|31 zj#UlXQ|HhA)bQmz+_1>aT|IPZbSg}hiK;HED$cGJQ{v5qHey$6k9s>i1)duSkHE7`vAb0wW^ycZpv6m zlLK2letGJBrjN4l5V__KIj1)Wg)nJWOM@Nlkl3b78~L33PuI>q0HVL4$DM4(mfQl= zR23FYjKTFOF9>DtRyLMbLPP{m7qnjk&S{wgtcW@;lkB~k>94dPqMEH33Np1#w!M_bu)02Sd zPGky+d5h`c+~X!mlTl~hvL(6ydt-w~5A^=Tyw#N@M=Gi7Ae->;u5+gYQ0w+u&tZmH42Fr2T8%kci?rU#*$XZp3HO06B z;*qx1vB4WZ$F1OS=oiv;F&thnntP6YNXy&pqyAhw5iFZ+rrknqQ$zrrhiCK3##!D} zS)Sy`b@Ms1Q+}rg&`y_#O`#HlZpbn~hvfRX^^XAZ{(v3qd&|tnqREWj%oZ+}i!0mf z2YQ>wN&_sD%BpA*7x*(GbXkjB37h|i7X*X41#82FmBRLwU^Ao@ z(2~vbCKXSlZTnsH%KzYPjeTmgZFjv^;GH#RX)PT%Dm6Hc-0qC~IZyeUy8GvBlB-G< zxKC`OxX5=tvg^$)fVYKR?41s>MuLkQ4d|aHQmEZdN%@s(2W8zU(KpN-WwL6BI~6Fa zI^Vm{$}W-}>RQ*^a5(=ULF3mJH@?Yaqg9pfx5jt-h>zbK=-ul)e%1YOR^%1)l-FAe zT&LNSDzz9(8`WQ#c`D7;6a)ti5GQ!5jb(lCoCU2uczkra zhE-YNC33iARf!@#e0IB5ezRUUxPI*1<;N5J<;}e(N5@^fGR}%p;lOYt#sp52u@zVF z3n5b}vbab}Lght%_mK|9+A6fJ-9tCOol4_aShR*)C%jW9EH-XLlgCPlrZ~P9jCxw< z2Ag|z!EX@ zQ|kq-GpA_A^|mx3N=yk$A4fmSYAHnhxLBYy?8KshneVdh1rV6Volj`oLxXja?f?hCIs3gB9!uKA(T<-uC zMi6{yWR^C@BwEljp6cB=-NIgIuQi3S(1)|T zU-*@uk>k!xb*lkGqWdv7LRd6~s~rRmJ=(|d40hd|w|o{2TxBT4oAC)Cwja5c9G1{#W zFN&1+8ZdfM3^fL|cdPMnfw{2D-JPQ&|Eo<~HOguujIs*ikNLdlnO-0I=O>cZ0z6K> z0zlT$-Fj(6XaVICL|@c7L;`Ho&yOBhyD7(Gn`y3yd6hf|ez&o*rG0TUocB`I@y+g4 zfHAW;uOQ3hL@7o71<^YKiNKw8h+mIYOJV+GDcRiPt?0HL|8ooOnjGOVIa~u|*fq-B`JEnTO#G ze($YAZ+tv-yi;NMkKb+&KP=|*Xd5CF8Pmqzc3rpD%;@eD7hNS@)vu{0YPZz*51r{gl^ z7ak8&-7O@PIjJC0vNM?tbgDn)HWNIWRHOvwWRi10d{NZ$xZ2scdB{^I#nOulmm}{T zZo#;`ft|yYa>(GBRFx=+4skHPEc&d;7VGA9IPB&XE3u^tTx%Jhp#c*vMDT#0$~NlL zKjg>3-f?cb0bghuQKSY!l1Sq(j(V`cK@{z>2Cbc0_ecf37dc!p*%$~)351CH<z}BZ369NgT1LYcM&uVp*xoE21ltHdm;>qrD?NK8%cwhfEMa7|B@$O&e8Q?{OP8M zaZS?l)lr8P^e&R$g_@EUj8ifP)6HKO6`}ag)kE!& zO8iSxswz%0DUvMvl5?7nR^Ia}jhmeQGw4QfD!w#S8wLQe=4{7?oI4@C=Gb$vHjFsO zx@zDp)dYvs>(A*u+F68-Ri(xn13E!iE&a0S(qv&*?6KorAVGU@!-*#W?j+55gOc`Y zYu^w(G-+qmd~~5$OdyLUFfK&0S;A}0b0~vQrQxH=FAoitRSiyB!iQ@dAsIy3NXHb& zp;jLYczR}U~{x%d<7+-50 zah>fN9&ygfcvf!<-0y7xuTnz$6e>t(N*fnKPyfVoyql z5}FThOZ?!gqD{Y?%ZV}J&UKvb!+m{JZ#q_Y`$<>Z9k$f}jjm$i^|B}m+_}WWb@Qg^ z?SWXkPg9oO6t}!b)u*kZwe7=;jxV>3^z zOLKrFs;k)KL4r3Bo|98a00(JYKh=?9cPu}IAo48 zJ|Q~HwL-fsdSVZfMiArY5q2&K{}$QTO<4!_@DR?(NdflFIHS;#;xi5$CHNXlB~S(7 zJHV8;M)ywM|8QwrK`TNPLP8V(DishN%dejr(Nd%A#E5L278NwB5;~s4;J;yNL`&NW zMpQOXYswmqL2Tl(tiLh3fAU_AIg1swLo9xFo6nym4Pq)J;S-3K>;U~uQ_{AgwO~}K z0?v27aVZHV+4!3~<8UeQWfr|fVvDjQ=0gmONLcnQx6(+4`mW=&5ExnpGRC*wN+YNP z@{^KSBjLo6^|#$hBaJYmXCz3VtyH1YZx2tD<9%WqU?Wf1MVtAA{4m9wmz5BhO`rh! zJHi8ab$h{TK`e4MAK)SZfLiJAj2@oI(0FfZnEkP8^3uF5 zbY7;$7PdMEK?vH^cz_l9fDMydf)w8sJwF&_zhA=kF6wQ)TigDmU(vh*eHF0#FuXuS z0oDsO zLdMDWgkaeCh36^`y}!SG6KKtS%NeWI;Gx2egfc?zm9gI&8NW78aL>gytoP1yOLGYs7G4S^2dA>t`><|^dt#bz(q!cnn6Q%}Y zTJinShXg*>J0kK-@gm8Ss+>vl1JQdIVl@5>b08YOf7UWz=j1LdLTG$vM6}$XoOC=B zjR#)U$qSrQQf&{n>N${2mgmYq>QFe&@SxHkj9MJOU9n}5&DJiNhaMqA3eeJ3Qexi< zPBj_VKeTo;e&{0yi_wgr9TGwz;luT>rT*dQ!qh7V7+7bqKe=_Z>GDJ|S6#NPYr~SY zl#)sch6D+zdS~?3U^lnxN5-V1;<}~eqnoj7{#E-KYbUaszIy?e;R5%6dqm%K!MOgP z9ZZN(w6{B%-*%VqR6FtDG5m+v_~8=UWt>Dll1gU4AVw&Y#y=8W4V2olnfEP$KW;fF z(WTP1op@GJ4n?OdH0OdaiK>3IJFZqQXMks>aGNmc6kZEdE)l;g`ruv}zdOo9J8tZs zwRT*O^YeC&CCdAy3HcNp2jV@^hfM^g-90}Ry{TWADQ9Dx$O_>KDIN|xX=ar=AEH~B zFoSiH?CKX`mEAcv^g~KrBVfOzbp_~{r9U2h=*&9)M2}WaNo4?);$S&yEz7b4<^)1B zUY+6avHoul`afOj*UgDvAJ^*Mtc_mw@(0u-zp95nw*rK$i5A2SR2J>xXVUz9^r2pM zKv~+h4u2u~5Lgh#r8iq^esSHcm!dw&f`*|12`jF|d!v61>u?Ji9RWBRJS0$tvU*?i z{^i^6X_Mud&DDbs_qv_sVGlM;uaw7zO;2f$p$D;pvx4waiPQT_(cAjhoC+z=8aKgS zTG0Q47(Bi5X9Txnh3(MPXumy3P?qRNRW$-57g890;V*~wd>?O{9k92L`uN)J9@Z`` zH6(=AHP%>O%M{|vudFLH+N6?w4WT|ulDJNOHF|xI#LcE`Oo|RHFk{>U!{LNpevP^W z2q0W2H_5~!+MU;yi-4cuqm|eEPp8&gQb_jzZ&W3^KtdlQpFTh(34> z${kfJf<3X|xp1I<>86K)5oWTQV4BWsVru!D(Hr_XIs<%nj)Cm(-7EcJIS=Ta#3~CS z4z@u}f;NKm{#MkcyM^Y>m?;vbpOXS}>xZv|fu7sU3NjBQMNfV^S~JCT%_D2BT?5vX z)y}&uNw~p1|DC8U7_c0Go;wkXj>NnuR8z9r;B_cq^}Esfqz*-jWhx1wSC0E!CBGNl z@P_c*0o=+;EE;qsNofKbY_cpCROk5pGXyYmS?gTH)HNZ;O2^3`ME7_be8N<@L1bo} z;_hr?N+sRs2rQc-PV%fNp!YR33^4hJ(KFY39Qz}zm4qrt8b1Kk6k!%Cia(0lyxiMJ z;qf~iYvkegFx}LTs^qhI0C&T(ANNQ0q*w1Kws^R z+?N=TDDkLjh*F&YB(;h6N9*M*^{u*t{dRJeAPktYXaqS}ROe{2KZ&L)vMfyPcpO>T zJ-Xzk)eQmdTTH6;%nZn{z!)4+U@%E88X*epk{tguI^$##5tE^d(Jx48!d4M~7Olu* zFd2D>mdsf^+>A;*e|{SI#oOrXYq6Xq%tTod3ZWzq5zO*0ru_MSKfw{~s79tD4-ssL zOv(;9yRSMqpC>r`Q`>90wW($TTG;eBbxp#y&<=?QOPBU99d?1q*^h8zW5JGhTefDi zxV>68c*~9koI9lv|5dk;Qw?ESfn1F7i@n|67Cs>~!C1Qv;IvdA*(4to;69o8kI}tT zZ7(0Bi~Tq&lbm!{bVv}pkVO@%|I{5QQ%&94F#9evX&)M*e?ziSjvD>z(+u>$;vzeY zMY0L0CPWSj!3d$v-$b80HO8f{yR}PLf7DT}p%0S9M|~?8LF6K4e|!3t>b-rZFHsH& zfffnmmcsCne-~X@e@ur^AqWHaqoUkGlH%_X1Q3)lGkE8>q=r;Q{0+u<39^)B|K)rPE=bu*q-0?!4H%gI!+987)Urupm1~8CN1B`X z#}Ex&5pi|(65R>zq_;>k_(oAFu*^bK|8+(i^h6syO<~E}rTSL#|L#nzi|kg?JzOazJfcihFB&|} z7Bwm~V?(7DCPoPX;`0XQYf(clfzHOc(Nu60rTF~8vrZ=t*t;G=RNWHI7R;DIbH~x8mP8+xNp)Vr;c*2b>7eou5_926 z;!rM`ybH?A|6U&}zB$@5q(#hBRYk|O-fEY24JL+(APOtsy#dg?Y|U+TR>d`PEMja? zcs5p18OMI{Irnd1cabZeQdbuyR8zcs@RIeAgVT8GEpp)ge@T(2+7K`)Gt$0DHgAgR z6;IztFrW(Z>%i`Fw3B${;5BQ`32%7P&7FY_g5x>FRaVT7Oa&n-R4;{Vp)r|P4QBF| zJ-xodb$f!K#t{SAb+KrS8CSKcC>qiQImTYyE2Ak^K0)67L*D=ebEuhuL?l{M4X-X< zGq}f%l6Zj2=;Vk08nB?_9S|l1BX@zUQTMo_q=e%QvY7C`iu|?f4U?RKq}Eja6G}B? zA--D1dE!9VT8mkg=sVLlFl#g5HMxj*9#r-qDapoP zI|$Oc*K9O!iPAWyIKGmxrUoYd)z=NGiPL(rxsbga65Begq`R2GpW8tvY?!RbGS2O+ zjAdNCb=a1+ zhCy49cp7-@(v)tw7pj-W1X8UapSCXJ<{JksHF>(1m4M)?m*Lo_h$Z3gJfk2$)_ha% zJahrR!;tl`Q85^5>8@=JiOjTH7N9 z2gV(=Ui6sC;cVhMQH29fAtBV?I(X-LqrddfxTO4~@wGiJBk9K8)HVk8oD zpCViYC=$G%=Gz8O`Wajx0lq%c6&M4Tp4y+PxU}H=OC*NCaSAac#^>eSEzP$N+7iPH zTIzZRA!!RghVaXRN0xL>!I>1QUQMjTs>+)0=&-T{EuHqYS8$U^ccK`2!oGEd{bc@~ zgSG_P^4?GL>MI5i!!ia>B~z+OA%T`}8@#G@^%smF1f=fu)k4h!+(qSlq;+-2iV;y` zxNdABG#EFNl6}`&3o@RP?xv{r$AXtwA`aBTNGOcP=}R4Qg6Q8ph^Jx*u*->iZ)^b1 z?H-cdjKZ^tt5V%qs)&;cC)M{1K5pg_7jthp|1NON9Xak+6QiKVQ#d&P-ocyODW7_3 zI#_W&T!L}vgG^5fYeJbYn5h8Y-`B$ti%Lck|1ERYi##`&7IpIW!Lo~ph`v(sAdf+7 zbFOU=-yZ_C!O=b!@I3+4)-`FBBrtGGNFGzr=N%z@ysEXpj8QI8gR~o2o4BAp#SaVw zuY&oeb3#^pTvbuPhyfEg6vX}(@O(_bg z>K{5+ET6(BC}d*gBvOzkn*H#(_D-)$x%k8W#2~0Nv$UyjO?BZ)X_JV=y)L-tKN$+h zszC5;GC2`xigQrngW5bK;O0No`4nfJ?r36aV_MXqyST^NpB@Bhc`L>oyt<=}5VRt* zkE}*ugr6C_aN>hbnwc-i9X#4gwlAyK{jOJ|V=y%6(?xPPWVjKCba^U}{%kniE6Ns} z5P*id0+7{Q+2xp;arMuI^RS|^U`$*v3F0FYYHLy(CQpBU5L8qe@4wy?T<`27#Ucff zrB15{{JR*05Ur;#|epk1$*?4;IW@2n$~ld1vQP(Uw%0 z_YPX(uUFxdxeMFs*L7y;+lvIeRu6^@A+)g238`O)8KC0#g$upj1l+LDcD??gdM5ZB z#38&mlw|Qs%N>!!_SOMXh}#dh>4=o6Gl(=42f-x+=9ibd0-+(^B}){yHvkyk(BCP% zL~m#&m+MQ|n({J_+L?tl#+x?*q~pSpd}f zh5<_z)%@26mjWjOGydeIFS9&L2l&L|cfeDTwJ7=GO-=Upkpsmjo7J z-$T5nl$^T^)Mc4H;I39($E8{ET2MT5>!2>`o#E=~-x!4X$n$Ac=i_rY{&IH+Fm3Qs zVXu+DO%*F{$P~Xhc*_TfZ{)_=RT$)6MWqT@l{oEOq}u#ecpgmVa;^psR2TL@oR-w& z=kg1J+v2xF)i`P9mQ^EZbcK-##e@v?QIq6%2CrB-muE|*o93o-B`>vDC>BF@I3~UN z-NDPAhVgW3=qk)Lm?OaLRYBRg-+NjnXCnAyjB*h)gsFm5ptQ2TKlo={5MJ-!{DZ*< z@xj^Mf9QV&EBBAuzwPY*@!+42M#pCB#?h91|KMM=pLh1m(N_8={!jk1{L{e)k48IG z_}r3zHuwab{C(~*I~cjEe<0Puk|1$~3yO{*|N9Fiw#Y7X-)BE^y>Kq5+>OVc#F)T; zK6u8W=MOix8k(83aJcDOfaLEA48q5CWf`pai}hMKc4Ii)bodIF-Vt@?ngmy$k83IZ U(!JU?f8%}r%6*0x<=*Z815s>V$^ZZW diff --git a/substrate/srml/contract/src/tests.rs b/substrate/srml/contract/src/tests.rs index 8dca8ad03f..62683e0a95 100644 --- a/substrate/srml/contract/src/tests.rs +++ b/substrate/srml/contract/src/tests.rs @@ -204,10 +204,10 @@ fn contract_transfer() { assert_eq!( Balances::free_balance(&0), // 3 - value sent with the transaction - // 2 * 10 - gas used by the contract (10) multiplied by gas price (2) + // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) // 2 * 135 - base gas fee for call (by transaction) // 2 * 135 - base gas fee for call (by the contract) - 100_000_000 - 3 - (2 * 10) - (2 * 135) - (2 * 135), + 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135), ); assert_eq!( Balances::free_balance(&1), @@ -261,10 +261,10 @@ fn contract_transfer_to_death() { assert_eq!( Balances::free_balance(&0), - // 2 * 10 - gas used by the contract (10) multiplied by gas price (2) + // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) // 2 * 135 - base gas fee for call (by transaction) // 2 * 135 - base gas fee for call (by the contract) - 100_000_000 - (2 * 10) - (2 * 135) - (2 * 135), + 100_000_000 - (2 * 26) - (2 * 135) - (2 * 135), ); assert!(!>::exists(1)); @@ -295,11 +295,11 @@ fn contract_transfer_takes_creation_fee() { assert_eq!( Balances::free_balance(&0), // 3 - value sent with the transaction - // 2 * 10 - gas used by the contract (10) multiplied by gas price (2) + // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) // 2 * 135 - base gas fee for call (by transaction) // 2 * 135 - base gas fee for call (by the contract) // 104 - (rounded) fee per creation (by the contract) - 100_000_000 - 3 - (2 * 10) - (2 * 135) - (2 * 135) - 104, + 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135) - 104, ); assert_eq!( Balances::free_balance(&1), @@ -336,12 +336,12 @@ fn contract_transfer_takes_transfer_fee() { assert_eq!( Balances::free_balance(&0), // 3 - value sent with the transaction - // 2 * 10 - gas used by the contract (10) multiplied by gas price (2) + // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) // 2 * 135 - base gas fee for call (by transaction) // 44 - (rounded from 45) fee per transfer (by transaction) // 2 * 135 - base gas fee for call (by the contract) // 44 - (rounded from 45) fee per transfer (by the contract) - 100_000_000 - 3 - (2 * 10) - (2 * 135) - 44 - (2 * 135) - 44, + 100_000_000 - 3 - (2 * 26) - (2 * 135) - 44 - (2 * 135) - 44, ); assert_eq!( Balances::free_balance(&1), @@ -412,10 +412,10 @@ fn contract_transfer_max_depth() { assert_eq!( Balances::free_balance(&0), // 3 - value sent with the transaction - // 2 * 10 * 100 - gas used by the contract (10) multiplied by gas price (2) + // 2 * 26 * 100 - gas used by the contract (26) multiplied by gas price (2) // multiplied by max depth (100). // 2 * 135 * 100 - base gas fee for call (by transaction) multiplied by max depth (100). - 100_000_000 - 3 - (2 * 10 * 100) - (2 * 135 * 100), + 100_000_000 - 3 - (2 * 26 * 100) - (2 * 135 * 100), ); assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 14); }); @@ -528,12 +528,12 @@ fn contract_create() { ); // 11 - value sent with the transaction - // 2 * 139 - gas spent by the deployer contract (139) multiplied by gas price (2) + // 2 * 362 - gas spent by the deployer contract (362) multiplied by gas price (2) // 2 * 135 - base gas fee for call (top level) // 2 * 175 - base gas fee for create (by contract) // ((21 / 2) * 2) - price per account creation let expected_gas_after_create = - 100_000_000 - 11 - (2 * 139) - (2 * 135) - (2 * 175) - ((21 / 2) * 2); + 100_000_000 - 11 - (2 * 362) - (2 * 135) - (2 * 175) - ((21 / 2) * 2); assert_eq!(Balances::free_balance(&0), expected_gas_after_create); assert_eq!(Balances::free_balance(&1), 8); assert_eq!(Balances::free_balance(&derived_address), 3); @@ -565,10 +565,10 @@ fn contract_create() { assert_eq!( Balances::free_balance(&0), // 22 - value sent with the transaction - // (2 * 10) - gas used by the contract + // (2 * 26) - gas used by the contract // (2 * 135) - base gas fee for call (top level) // (2 * 135) - base gas fee for call (by transfer contract) - expected_gas_after_create - 22 - (2 * 10) - (2 * 135) - (2 * 135), + expected_gas_after_create - 22 - (2 * 26) - (2 * 135) - (2 * 135), ); assert_eq!(Balances::free_balance(&derived_address), 22 - 3); assert_eq!(Balances::free_balance(&9), 36); diff --git a/substrate/srml/contract/src/vm/mod.rs b/substrate/srml/contract/src/vm/mod.rs index 83837740eb..63cdc5861d 100644 --- a/substrate/srml/contract/src/vm/mod.rs +++ b/substrate/srml/contract/src/vm/mod.rs @@ -164,6 +164,12 @@ pub struct Config { /// Gas cost per one byte returned. return_data_per_byte_cost: T::Gas, + /// Gas cost per one byte read from the sandbox memory. + sandbox_data_read_cost: T::Gas, + + /// Gas cost per one byte written to the sandbox memory. + sandbox_data_write_cost: T::Gas, + /// How tall the stack is allowed to grow? /// /// See https://wiki.parity.io/WebAssembly-StackHeight to find out @@ -181,6 +187,8 @@ impl Default for Config { grow_mem_cost: T::Gas::sa(1), regular_op_cost: T::Gas::sa(1), return_data_per_byte_cost: T::Gas::sa(1), + sandbox_data_read_cost: T::Gas::sa(1), + sandbox_data_write_cost: T::Gas::sa(1), max_stack_height: 64 * 1024, max_memory_pages: 16, } @@ -322,7 +330,7 @@ mod tests { data: vec![ 1, 2, 3, 4, ], - gas_left: 49990, + gas_left: 49970, }] ); } @@ -385,7 +393,7 @@ mod tests { data: vec![ 1, 2, 3, 4, ], - gas_left: 49990, + gas_left: 49970, }] ); } diff --git a/substrate/srml/contract/src/vm/runtime.rs b/substrate/srml/contract/src/vm/runtime.rs index 5d419ffab7..3bdc9bf12a 100644 --- a/substrate/srml/contract/src/vm/runtime.rs +++ b/substrate/srml/contract/src/vm/runtime.rs @@ -25,6 +25,8 @@ use sandbox; use system; use Trait; +type GasOf = <::T as Trait>::Gas; + /// Enumerates all possible *special* trap conditions. /// /// In this runtime traps used not only for signaling about errors but also @@ -89,6 +91,70 @@ pub(crate) fn to_execution_result( } } +/// Charge the specified amount of gas. +/// +/// Returns `Err` if there is not enough gas. +fn charge_gas( + gas_meter: &mut GasMeter, + amount: T::Gas, +) -> Result<(), sandbox::HostError> { + match gas_meter.charge(amount) { + GasMeterResult::Proceed => Ok(()), + GasMeterResult::OutOfGas => Err(sandbox::HostError), + } +} + +/// Read designated chunk from the sandbox memory, consuming an appropriate amount of +/// gas. +/// +/// Returns `Err` if one of the following conditions occurs: +/// +/// - calculating the gas cost resulted in overflow. +/// - out of gas +/// - requested buffer is not within the bounds of the sandbox memory. +fn read_sandbox_memory( + ctx: &mut Runtime, + ptr: u32, + len: u32, +) -> Result, sandbox::HostError> { + let price = (ctx.config.sandbox_data_read_cost) + .checked_mul(& as As>::sa(len)) + .ok_or(sandbox::HostError)?; + charge_gas(ctx.gas_meter, price)?; + + let mut buf = Vec::new(); + buf.resize(len as usize, 0); + + ctx.memory().get(ptr, &mut buf)?; + + Ok(buf) +} + +/// Write the given buffer to the designated location in the sandbox memory, consuming +/// an appropriate amount of gas. +/// +/// Returns `Err` if one of the following conditions occurs: +/// +/// - calculating the gas cost resulted in overflow. +/// - out of gas +/// - designated area is not within the bounds of the sandbox memory. +fn write_sandbox_memory( + per_byte_cost: T::Gas, + gas_meter: &mut GasMeter, + memory: &sandbox::Memory, + ptr: u32, + buf: &[u8], +) -> Result<(), sandbox::HostError> { + let price = per_byte_cost + .checked_mul(&>::sa(buf.len() as u32)) + .ok_or(sandbox::HostError)?; + charge_gas(gas_meter, price)?; + + memory.set(ptr, buf)?; + + Ok(()) +} + // *********************************************************** // * AFTER MAKING A CHANGE MAKE SURE TO UPDATE COMPLEXITY.MD * // *********************************************************** @@ -104,16 +170,14 @@ define_env!(init_env, , // - amount: How much gas is used. gas(ctx, amount: u32) => { let amount = <<::T as Trait>::Gas as As>::sa(amount); + charge_gas(&mut ctx.gas_meter, amount)?; - match ctx.gas_meter.charge(amount) { - GasMeterResult::Proceed => Ok(()), - GasMeterResult::OutOfGas => Err(sandbox::HostError), - } + Ok(()) }, - // Change the value at the given location in storage or remove it. + // Change the value at the given key in the storage or remove the entry. // - // - location_ptr: pointer into the linear + // - key_ptr: pointer into the linear // memory where the location of the requested value is placed. // - value_non_null: if set to 0, then the entry // at the given location will be removed. @@ -121,17 +185,13 @@ define_env!(init_env, , // where the value to set is placed. If `value_non_null` is set to 0, then this parameter is ignored. // - value_len: the length of the value. If `value_non_null` is set to 0, then this parameter is ignored. ext_set_storage(ctx, key_ptr: u32, value_non_null: u32, value_ptr: u32, value_len: u32) => { - let mut key = [0; 32]; - ctx.memory().get(key_ptr, &mut key)?; - - let value = if value_non_null != 0 { - let mut value_buf = Vec::new(); - value_buf.resize(value_len as usize, 0); - ctx.memory().get(value_ptr, &mut value_buf)?; - Some(value_buf) - } else { - None - }; + let key = read_sandbox_memory(ctx, key_ptr, 32)?; + let value = + if value_non_null != 0 { + Some(read_sandbox_memory(ctx, value_ptr, value_len)?) + } else { + None + }; ctx.ext.set_storage(&key, value); Ok(()) @@ -144,9 +204,7 @@ define_env!(init_env, , // - key_ptr: pointer into the linear memory where the key // of the requested value is placed. ext_get_storage(ctx, key_ptr: u32) -> u32 => { - let mut key = [0; 32]; - ctx.memory().get(key_ptr, &mut key)?; - + let key = read_sandbox_memory(ctx, key_ptr, 32)?; if let Some(value) = ctx.ext.get_storage(&key) { ctx.scratch_buf = value; Ok(0) @@ -181,22 +239,17 @@ define_env!(init_env, , input_data_ptr: u32, input_data_len: u32 ) -> u32 => { - let mut callee = Vec::new(); - callee.resize(callee_len as usize, 0); - ctx.memory().get(callee_ptr, &mut callee)?; - let callee = - <::T as system::Trait>::AccountId::decode(&mut &callee[..]) - .ok_or_else(|| sandbox::HostError)?; - - let mut value_buf = Vec::new(); - value_buf.resize(value_len as usize, 0); - ctx.memory().get(value_ptr, &mut value_buf)?; - let value = BalanceOf::<::T>::decode(&mut &value_buf[..]) - .ok_or_else(|| sandbox::HostError)?; - - let mut input_data = Vec::new(); - input_data.resize(input_data_len as usize, 0u8); - ctx.memory().get(input_data_ptr, &mut input_data)?; + let callee = { + let callee_buf = read_sandbox_memory(ctx, callee_ptr, callee_len)?; + <::T as system::Trait>::AccountId::decode(&mut &callee_buf[..]) + .ok_or_else(|| sandbox::HostError)? + }; + let value = { + let value_buf = read_sandbox_memory(ctx, value_ptr, value_len)?; + BalanceOf::<::T>::decode(&mut &value_buf[..]) + .ok_or_else(|| sandbox::HostError)? + }; + let input_data = read_sandbox_memory(ctx, input_data_ptr, input_data_len)?; // Clear the scratch buffer in any case. ctx.scratch_buf.clear(); @@ -249,19 +302,13 @@ define_env!(init_env, , input_data_ptr: u32, input_data_len: u32 ) -> u32 => { - let mut value_buf = Vec::new(); - value_buf.resize(value_len as usize, 0); - ctx.memory().get(value_ptr, &mut value_buf)?; - let value = BalanceOf::<::T>::decode(&mut &value_buf[..]) - .ok_or_else(|| sandbox::HostError)?; - - let mut init_code = Vec::new(); - init_code.resize(init_code_len as usize, 0u8); - ctx.memory().get(init_code_ptr, &mut init_code)?; - - let mut input_data = Vec::new(); - input_data.resize(input_data_len as usize, 0u8); - ctx.memory().get(input_data_ptr, &mut input_data)?; + let init_code = read_sandbox_memory(ctx, init_code_ptr, init_code_len)?; + let value = { + let value_buf = read_sandbox_memory(ctx, value_ptr, value_len)?; + BalanceOf::<::T>::decode(&mut &value_buf[..]) + .ok_or_else(|| sandbox::HostError)? + }; + let input_data = read_sandbox_memory(ctx, input_data_ptr, input_data_len)?; // Clear the scratch buffer in any case. ctx.scratch_buf.clear(); @@ -289,12 +336,13 @@ define_env!(init_env, , } }, - // Save a data buffer as a result of the execution. + // Save a data buffer as a result of the execution, terminate the execution and return a + // successful result to the caller. ext_return(ctx, data_ptr: u32, data_len: u32) => { let data_len_in_gas = <<::T as Trait>::Gas as As>::sa(data_len as u64); let price = (ctx.config.return_data_per_byte_cost) .checked_mul(&data_len_in_gas) - .ok_or_else(|| sandbox::HostError)?; + .ok_or(sandbox::HostError)?; match ctx.gas_meter.charge(price) { GasMeterResult::Proceed => (), @@ -332,7 +380,14 @@ define_env!(init_env, , return Err(sandbox::HostError); } - ctx.memory().set(dest_ptr, src)?; + // Finally, perform the write. + write_sandbox_memory( + ctx.config.sandbox_data_write_cost, + ctx.gas_meter, + &ctx.memory, + dest_ptr, + src, + )?; Ok(()) }, @@ -357,7 +412,14 @@ define_env!(init_env, , return Err(sandbox::HostError); } - ctx.memory().set(dest_ptr, src)?; + // Finally, perform the write. + write_sandbox_memory( + ctx.config.sandbox_data_write_cost, + ctx.gas_meter, + &ctx.memory, + dest_ptr, + src, + )?; Ok(()) }, From 660c747c51ce721e7e8183a4b82ddcb3f57eacef Mon Sep 17 00:00:00 2001 From: Hero Bird Date: Tue, 6 Nov 2018 15:39:55 +0100 Subject: [PATCH 07/26] Update fixed-hash & uint utilities (#1078) * [core/primitives] Update crunchy 0.1 => 0.2 * [core/primitives] Update fixed-hash 0.2 => 0.3.0-beta * [core/primitives] Update `uint` 0.4 => 0.5.0-beta * [core/state-machine] Fix errors emerged by fixed-hash update * [core/state-db] Fix errors that emerged from fixed-hash update * [core/sr-io] Fix errors that emerged from the fixed-hash update * [core/trie] Fix errors emerged from fixed-hash updates * [core/trie] Make use of new Hash::as_fixed_bytes_mut method in tests * [core/sr-primitives] Fix errors emerged from updating fixed-hash * [core/executor] Fix errors that emerged from fixed-hash update * [core/test-runtime] Fix errors that emerged from updating fixed-hash * [core/test-runtime] Fix an error that emerged from fixed-hash update * [core/transaction-pool] Fix errors that emerged from updating fixed-hash * Add From impl for hash types defined in core/primitives * [core/client/db] Fix errors that emerged from fixed-hash update * [core/{client/network/rpc}]: Fix errors emerged by fixed-hash update * [node/{cli/executor/runtime}]: Fix errors emerged by updating fixed-hash * [core/network]: Fix bug in parsing constant str * Update Cargo.lock - Add crunchy 0.2.1 - fixed-hash 0.2.2 => 0.3.0-beta.3 - Add static-assertions 0.2.5 - uint 0.4.1 => 0.5.0-beta.1 * [core/primitives]: Add fixed-hash/rustc-hex feature for FromStr impl * [core/primitives] No longer provide From impl for hash types if byteorder support is not enabled * [core/primitives] Revert to using From impl again in primitives tests * [core/..] Fix some bugs that emerged by recent fixed-hash updates * Update a bunch of Cargo.lock files * [core/state-db] Re-add whitespace between attr and extern crate/mod * [core/primitives] Fix bug in From impl for hash types using the wrong feature guard --- substrate/Cargo.lock | 34 +++++++--- substrate/core/client/db/src/lib.rs | 16 ++--- substrate/core/client/src/genesis.rs | 2 +- substrate/core/client/src/light/fetcher.rs | 2 +- substrate/core/executor/src/wasm_executor.rs | 2 +- substrate/core/executor/wasm/Cargo.lock | 33 +++++++--- substrate/core/network/src/on_demand.rs | 6 +- substrate/core/network/src/test/mod.rs | 2 +- substrate/core/primitives/Cargo.toml | 11 ++-- substrate/core/primitives/src/ed25519.rs | 6 +- substrate/core/primitives/src/hash.rs | 27 ++++++-- substrate/core/rpc/src/author/tests.rs | 4 +- substrate/core/rpc/src/chain/tests.rs | 8 +-- substrate/core/sr-io/with_std.rs | 2 +- substrate/core/sr-primitives/src/lib.rs | 2 +- substrate/core/sr-primitives/src/traits.rs | 8 +-- substrate/core/state-db/src/lib.rs | 61 +++++++++++++++--- substrate/core/state-db/src/noncanonical.rs | 2 +- substrate/core/state-db/src/test.rs | 16 ++++- .../state-machine/src/overlayed_changes.rs | 2 +- .../core/state-machine/src/proving_backend.rs | 3 +- substrate/core/state-machine/src/testing.rs | 2 +- .../core/state-machine/src/trie_backend.rs | 2 +- .../core/test-client/src/block_builder_ext.rs | 2 +- substrate/core/test-runtime/src/genesismap.rs | 2 +- substrate/core/test-runtime/src/system.rs | 14 ++-- substrate/core/test-runtime/wasm/Cargo.lock | 40 +++++++----- .../substrate_test_runtime.compact.wasm | Bin 45231 -> 44807 bytes .../core/transaction-pool/graph/src/pool.rs | 2 +- substrate/core/trie/src/lib.rs | 4 +- substrate/node/cli/src/chain_spec.rs | 2 +- substrate/node/executor/src/lib.rs | 5 +- substrate/node/runtime/src/lib.rs | 2 +- substrate/node/runtime/wasm/Cargo.lock | 40 +++++++----- .../release/node_runtime.compact.wasm | Bin 621533 -> 621448 bytes 35 files changed, 249 insertions(+), 117 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index 27163a40d2..5ebc858b57 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -457,6 +457,11 @@ 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" @@ -679,13 +684,15 @@ dependencies = [ [[package]] name = "fixed-hash" -version = "0.2.2" +version = "0.3.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "byteorder 1.2.6 (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.3 (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]] @@ -2907,6 +2914,11 @@ 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" @@ -3275,8 +3287,8 @@ 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.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)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (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)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3291,7 +3303,7 @@ dependencies = [ "sr-std 0.1.0", "substrate-serializer 0.1.0", "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-beta.1 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3969,11 +3981,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" 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)", + "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)", ] @@ -4324,6 +4336,7 @@ dependencies = [ "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" "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" @@ -4350,7 +4363,7 @@ dependencies = [ "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 finality-grandpa 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "20d8cf871510f0d57630e75f9e65f87cba29581ccab1f78666d8b2e422d0baa6" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "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" @@ -4539,6 +4552,7 @@ dependencies = [ "checksum slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "053344c94c0e2b22da6305efddb698d7c485809427cf40555dc936085f67a9df" "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "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" @@ -4593,7 +4607,7 @@ dependencies = [ "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.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "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" diff --git a/substrate/core/client/db/src/lib.rs b/substrate/core/client/db/src/lib.rs index ed4f64cf44..1e37b61cfd 100644 --- a/substrate/core/client/db/src/lib.rs +++ b/substrate/core/client/db/src/lib.rs @@ -357,7 +357,7 @@ struct StorageDb { impl state_machine::Storage for StorageDb { fn get(&self, key: &H256) -> Result, String> { - self.state_db.get(&key.0.into(), self).map(|r| r.map(|v| DBValue::from_slice(&v))) + self.state_db.get(key, self).map(|r| r.map(|v| DBValue::from_slice(&v))) .map_err(|e| format!("Database backend error: {:?}", e)) } } @@ -367,7 +367,7 @@ impl state_db::HashDb for StorageDb { type Hash = H256; fn get(&self, key: &H256) -> Result>, Self::Error> { - self.db.get(columns::STATE, &key[..]).map(|r| r.map(|v| v.to_vec())) + self.db.get(columns::STATE, key.as_bytes()).map(|r| r.map(|v| v.to_vec())) } } @@ -734,9 +734,9 @@ impl client::backend::Backend for Backend whe let mut changeset: state_db::ChangeSet = state_db::ChangeSet::default(); for (key, (val, rc)) in operation.updates.drain() { if rc > 0 { - changeset.inserted.push((key.0.into(), val.to_vec())); + changeset.inserted.push((key, val.to_vec())); } else if rc < 0 { - changeset.deleted.push(key.0.into()); + changeset.deleted.push(key); } } let number_u64 = number.as_(); @@ -1117,7 +1117,7 @@ mod tests { backend.commit_operation(op).unwrap(); - assert_eq!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().unwrap(), &b"hello"[..]); + assert_eq!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().unwrap(), &b"hello"[..]); hash }; @@ -1151,7 +1151,7 @@ mod tests { backend.commit_operation(op).unwrap(); - assert_eq!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().unwrap(), &b"hello"[..]); + assert_eq!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().unwrap(), &b"hello"[..]); hash }; @@ -1183,12 +1183,12 @@ mod tests { backend.commit_operation(op).unwrap(); - assert!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().is_none()); + assert!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().is_none()); } backend.finalize_block(BlockId::Number(1)).unwrap(); backend.finalize_block(BlockId::Number(2)).unwrap(); - assert!(backend.storage.db.get(::columns::STATE, &key.0[..]).unwrap().is_none()); + assert!(backend.storage.db.get(::columns::STATE, key.as_bytes()).unwrap().is_none()); } #[test] diff --git a/substrate/core/client/src/genesis.rs b/substrate/core/client/src/genesis.rs index 16dc8f5e05..83c4338b8b 100644 --- a/substrate/core/client/src/genesis.rs +++ b/substrate/core/client/src/genesis.rs @@ -67,7 +67,7 @@ mod tests { use trie::ordered_trie_root; let transactions = txs.into_iter().map(|tx| { - let signature = Pair::from(Keyring::from_public(Public::from_raw(tx.from.0)).unwrap()) + let signature = Pair::from(Keyring::from_public(Public::from_raw(tx.from.to_fixed_bytes())).unwrap()) .sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } diff --git a/substrate/core/client/src/light/fetcher.rs b/substrate/core/client/src/light/fetcher.rs index 38a46c7d68..95e02b91f9 100644 --- a/substrate/core/client/src/light/fetcher.rs +++ b/substrate/core/client/src/light/fetcher.rs @@ -478,7 +478,7 @@ pub mod tests { assert!(local_checker.check_changes_proof(&request, remote_max + 1, remote_proof.clone()).is_err()); // check proof on local client using broken proof - remote_proof = local_roots_range.into_iter().map(|v| v.to_vec()).collect(); + remote_proof = local_roots_range.into_iter().map(|v| v.as_bytes().to_vec()).collect(); assert!(local_checker.check_changes_proof(&request, remote_max, remote_proof).is_err()); } } diff --git a/substrate/core/executor/src/wasm_executor.rs b/substrate/core/executor/src/wasm_executor.rs index 56624060e7..90d6db6001 100644 --- a/substrate/core/executor/src/wasm_executor.rs +++ b/substrate/core/executor/src/wasm_executor.rs @@ -845,7 +845,7 @@ mod tests { let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); assert_eq!( WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_enumerated_trie_root", &[]).unwrap(), - ordered_trie_root::(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()].iter()).0.encode() + ordered_trie_root::(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()].iter()).as_fixed_bytes().encode() ); } diff --git a/substrate/core/executor/wasm/Cargo.lock b/substrate/core/executor/wasm/Cargo.lock index 691a9291a2..94dd14381d 100644 --- a/substrate/core/executor/wasm/Cargo.lock +++ b/substrate/core/executor/wasm/Cargo.lock @@ -17,10 +17,18 @@ 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 = "fixed-hash" +version = "0.3.0-beta.3" +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" @@ -141,13 +149,18 @@ dependencies = [ "rustc_version 0.2.3 (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 = "substrate-primitives" version = "0.1.0" 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)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (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)", @@ -155,7 +168,7 @@ dependencies = [ "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -170,11 +183,11 @@ dependencies = [ [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" 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)", + "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)", ] @@ -187,7 +200,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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 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 crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "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 nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" @@ -200,6 +214,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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.79 (registry+https://github.com/rust-lang/crates.io-index)" = "84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9" +"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" "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-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" diff --git a/substrate/core/network/src/on_demand.rs b/substrate/core/network/src/on_demand.rs index 399ba3f408..bc0f3aec9c 100644 --- a/substrate/core/network/src/on_demand.rs +++ b/substrate/core/network/src/on_demand.rs @@ -820,7 +820,11 @@ pub mod tests { }); let thread = ::std::thread::spawn(move || { let result = response.wait().unwrap(); - assert_eq!(result.hash(), "0x6443a0b46e0412e626363028115a9f2cf963eeed526b8b33e5316f08b50d0dc3".into()); + assert_eq!( + result.hash(), + "6443a0b46e0412e626363028115a9f2c\ + f963eeed526b8b33e5316f08b50d0dc3".parse().unwrap() + ); }); on_demand.on_remote_header_response(&mut network, 0, message::RemoteHeaderResponse { diff --git a/substrate/core/network/src/test/mod.rs b/substrate/core/network/src/test/mod.rs index 0da6523d0d..843ad836e0 100644 --- a/substrate/core/network/src/test/mod.rs +++ b/substrate/core/network/src/test/mod.rs @@ -255,7 +255,7 @@ impl> Peer { amount: 1, nonce, }; - let signature = Keyring::from_raw_public(transfer.from.0).unwrap().sign(&transfer.encode()).into(); + let signature = Keyring::from_raw_public(transfer.from.to_fixed_bytes()).unwrap().sign(&transfer.encode()).into(); builder.push(Extrinsic { transfer, signature }).unwrap(); nonce = nonce + 1; }); diff --git a/substrate/core/primitives/Cargo.toml b/substrate/core/primitives/Cargo.toml index 29914fc4ce..171841f1e2 100644 --- a/substrate/core/primitives/Cargo.toml +++ b/substrate/core/primitives/Cargo.toml @@ -4,15 +4,15 @@ version = "0.1.0" authors = ["Parity Technologies "] [dependencies] -crunchy = "0.1" +crunchy = { version = "0.2", default-features = false } sr-std = { path = "../sr-std", default-features = false } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } -fixed-hash = { version = "0.2.2", default-features = false } +fixed-hash = { version = "0.3.0-beta", default-features = false } rustc-hex = { version = "2.0", default-features = false } serde = { version = "1.0", default-features = false } serde_derive = { version = "1.0", optional = true } -uint = { version = "0.4.1", default-features = false } +uint = { version = "0.5.0-beta", default-features = false } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default-features = false } wasmi = { version = "0.4.1", optional = true } @@ -32,10 +32,13 @@ heapsize = "0.4" [features] default = ["std"] std = [ + "crunchy/std", "wasmi", "uint/std", "fixed-hash/std", - "fixed-hash/heapsizeof", + "fixed-hash/heapsize", + "fixed-hash/byteorder", + "fixed-hash/rustc-hex", "fixed-hash/libc", "parity-codec/std", "hash256-std-hasher/std", diff --git a/substrate/core/primitives/src/ed25519.rs b/substrate/core/primitives/src/ed25519.rs index 027298b4b1..2e30653e81 100644 --- a/substrate/core/primitives/src/ed25519.rs +++ b/substrate/core/primitives/src/ed25519.rs @@ -241,7 +241,7 @@ impl Pair { pub fn derive_child_probably_bad(&self, chain_data: &[u8]) -> Pair { let sig = self.sign(chain_data); let mut seed = [0u8; 32]; - seed.copy_from_slice(&sig.0[..32]); + seed.copy_from_slice(&sig[..32]); Pair::from_seed(&seed) } @@ -251,7 +251,7 @@ impl Pair { pub fn verify_strong>(sig: &Signature, message: &[u8], pubkey: P) -> bool { let public_key = untrusted::Input::from(&pubkey.as_ref().0[..]); let msg = untrusted::Input::from(message); - let sig = untrusted::Input::from(&sig.0[..]); + let sig = untrusted::Input::from(&sig.as_bytes()); match signature::verify(&signature::ED25519, public_key, msg, sig) { Ok(_) => true, @@ -316,7 +316,7 @@ mod test { assert_eq!(public, Public::from_raw(hex!("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee"))); let message = hex!("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000200d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000"); let signature = pair.sign(&message[..]); - println!("Correct signature: {}", HexDisplay::from(&signature.0)); + println!("Correct signature: {}", HexDisplay::from(&signature.as_bytes())); assert!(verify_strong(&signature, &message[..], &public)); } diff --git a/substrate/core/primitives/src/hash.rs b/substrate/core/primitives/src/hash.rs index 840be7e8a4..5733a738c9 100644 --- a/substrate/core/primitives/src/hash.rs +++ b/substrate/core/primitives/src/hash.rs @@ -35,7 +35,7 @@ macro_rules! impl_rest { impl<'de> Deserialize<'de> for $name { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de> { bytes::deserialize_check_len(deserializer, bytes::ExpectedLen::Exact($len)) - .map(|x| (&*x).into()) + .map(|x| $name::from_slice(&x)) } } @@ -49,12 +49,29 @@ macro_rules! impl_rest { <[u8; $len] as ::codec::Decode>::decode(input).map($name) } } + + #[cfg(feature = "std")] + impl From for $name { + fn from(val: u64) -> Self { + Self::from_low_u64_be(val) + } + } } } -construct_hash!(H160, 20); -construct_hash!(H256, 32); -construct_hash!(H512, 64); +construct_fixed_hash!{ + /// Fixed-size uninterpreted hash type with 20 bytes (160 bits) size. + pub struct H160(20); +} +construct_fixed_hash!{ + /// Fixed-size uninterpreted hash type with 32 bytes (256 bits) size. + pub struct H256(32); +} +construct_fixed_hash!{ + /// Fixed-size uninterpreted hash type with 64 bytes (512 bits) size. + pub struct H512(64); +} + impl_rest!(H160, 20); impl_rest!(H256, 32); impl_rest!(H512, 64); @@ -113,7 +130,7 @@ mod tests { #[test] fn test_heapsizeof() { use heapsize::HeapSizeOf; - let h = H256::new(); + let h = H256::zero(); assert_eq!(h.heap_size_of_children(), 0); } } diff --git a/substrate/core/rpc/src/author/tests.rs b/substrate/core/rpc/src/author/tests.rs index 249d3187c7..7032355ef2 100644 --- a/substrate/core/rpc/src/author/tests.rs +++ b/substrate/core/rpc/src/author/tests.rs @@ -35,7 +35,7 @@ fn uxt(sender: Keyring, nonce: u64) -> Extrinsic { from: sender.to_raw_public().into(), to: Default::default(), }; - let signature = Keyring::from_raw_public(tx.from.0).unwrap().sign(&tx.encode()).into(); + let signature = Keyring::from_raw_public(tx.from.to_fixed_bytes()).unwrap().sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } } @@ -105,7 +105,7 @@ fn should_watch_extrinsic() { from: Keyring::Alice.to_raw_public().into(), to: Default::default(), }; - let signature = Keyring::from_raw_public(tx.from.0).unwrap().sign(&tx.encode()).into(); + let signature = Keyring::from_raw_public(tx.from.to_fixed_bytes()).unwrap().sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } }; AuthorApi::submit_rich_extrinsic(&p, replacement).unwrap(); diff --git a/substrate/core/rpc/src/chain/tests.rs b/substrate/core/rpc/src/chain/tests.rs index 644c7fed07..e673fe0af7 100644 --- a/substrate/core/rpc/src/chain/tests.rs +++ b/substrate/core/rpc/src/chain/tests.rs @@ -36,7 +36,7 @@ fn should_return_header() { parent_hash: 0.into(), number: 0, state_root: x.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), } ); @@ -47,7 +47,7 @@ fn should_return_header() { parent_hash: 0.into(), number: 0, state_root: x.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), } ); @@ -86,7 +86,7 @@ fn should_return_a_block() { parent_hash: api.client.genesis_hash(), number: 1, state_root: x.block.header.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), }, extrinsics: vec![], @@ -100,7 +100,7 @@ fn should_return_a_block() { parent_hash: api.client.genesis_hash(), number: 1, state_root: x.block.header.state_root.clone(), - extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".parse().unwrap(), digest: Default::default(), }, extrinsics: vec![], diff --git a/substrate/core/sr-io/with_std.rs b/substrate/core/sr-io/with_std.rs index ccadb89efc..72fa107469 100644 --- a/substrate/core/sr-io/with_std.rs +++ b/substrate/core/sr-io/with_std.rs @@ -146,7 +146,7 @@ pub fn chain_id() -> u64 { pub fn storage_root() -> H256 { ext::with(|ext| ext.storage_root() - ).unwrap_or(H256::new()) + ).unwrap_or(H256::zero()) } /// "Commit" all existing operations and compute the resultant child storage root. diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index 42dcd37a2c..a8759a4890 100644 --- a/substrate/core/sr-primitives/src/lib.rs +++ b/substrate/core/sr-primitives/src/lib.rs @@ -198,7 +198,7 @@ pub struct Ed25519Signature(pub H512); impl Verify for Ed25519Signature { type Signer = H256; fn verify>(&self, mut msg: L, signer: &Self::Signer) -> bool { - runtime_io::ed25519_verify(&(self.0).0, msg.get(), &signer.0[..]) + runtime_io::ed25519_verify((self.0).as_fixed_bytes(), msg.get(), &signer.as_bytes()) } } diff --git a/substrate/core/sr-primitives/src/traits.rs b/substrate/core/sr-primitives/src/traits.rs index 0ee2db117a..5c568460ee 100644 --- a/substrate/core/sr-primitives/src/traits.rs +++ b/substrate/core/sr-primitives/src/traits.rs @@ -322,8 +322,8 @@ impl CheckEqual for substrate_primitives::H256 { #[cfg(feature = "std")] fn check_equal(&self, other: &Self) { use substrate_primitives::hexdisplay::HexDisplay; - if &self.0 != &other.0 { - println!("Hash: given={}, expected={}", HexDisplay::from(&self.0), HexDisplay::from(&other.0)); + if self != other { + println!("Hash: given={}, expected={}", HexDisplay::from(self.as_fixed_bytes()), HexDisplay::from(other.as_fixed_bytes())); } } @@ -331,8 +331,8 @@ impl CheckEqual for substrate_primitives::H256 { fn check_equal(&self, other: &Self) { if self != other { runtime_io::print("Hash not equal"); - runtime_io::print(&self.0[..]); - runtime_io::print(&other.0[..]); + runtime_io::print(self.as_bytes()); + runtime_io::print(other.as_bytes()); } } } diff --git a/substrate/core/state-db/src/lib.rs b/substrate/core/state-db/src/lib.rs index 598f0c4705..261d768560 100644 --- a/substrate/core/state-db/src/lib.rs +++ b/substrate/core/state-db/src/lib.rs @@ -363,14 +363,59 @@ mod tests { let mut db = make_db(&[91, 921, 922, 93, 94]); let state_db = StateDb::new(settings, &db).unwrap(); - db.commit(&state_db.insert_block::(&H256::from(1), 1, &H256::from(0), make_changeset(&[1], &[91])).unwrap()); - db.commit(&state_db.insert_block::(&H256::from(21), 2, &H256::from(1), make_changeset(&[21], &[921, 1])).unwrap()); - db.commit(&state_db.insert_block::(&H256::from(22), 2, &H256::from(1), make_changeset(&[22], &[922])).unwrap()); - db.commit(&state_db.insert_block::(&H256::from(3), 3, &H256::from(21), make_changeset(&[3], &[93])).unwrap()); - db.commit(&state_db.canonicalize_block(&H256::from(1))); - db.commit(&state_db.insert_block::(&H256::from(4), 4, &H256::from(3), make_changeset(&[4], &[94])).unwrap()); - db.commit(&state_db.canonicalize_block(&H256::from(21))); - db.commit(&state_db.canonicalize_block(&H256::from(3))); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(1), + 1, + &H256::from_low_u64_be(0), + make_changeset(&[1], &[91]), + ) + .unwrap(), + ); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(21), + 2, + &H256::from_low_u64_be(1), + make_changeset(&[21], &[921, 1]), + ) + .unwrap(), + ); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(22), + 2, + &H256::from_low_u64_be(1), + make_changeset(&[22], &[922]), + ) + .unwrap(), + ); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(3), + 3, + &H256::from_low_u64_be(21), + make_changeset(&[3], &[93]), + ) + .unwrap(), + ); + db.commit(&state_db.canonicalize_block(&H256::from_low_u64_be(1))); + db.commit( + &state_db + .insert_block::( + &H256::from_low_u64_be(4), + 4, + &H256::from_low_u64_be(3), + make_changeset(&[4], &[94]), + ) + .unwrap(), + ); + db.commit(&state_db.canonicalize_block(&H256::from_low_u64_be(21))); + db.commit(&state_db.canonicalize_block(&H256::from_low_u64_be(3))); (db, state_db) } diff --git a/substrate/core/state-db/src/noncanonical.rs b/substrate/core/state-db/src/noncanonical.rs index b6cd4862e7..b1d34c09ad 100644 --- a/substrate/core/state-db/src/noncanonical.rs +++ b/substrate/core/state-db/src/noncanonical.rs @@ -275,7 +275,7 @@ mod tests { use test::{make_db, make_changeset}; fn contains(overlay: &NonCanonicalOverlay, key: u64) -> bool { - overlay.get(&H256::from(key)) == Some(H256::from(key).to_vec()) + overlay.get(&H256::from_low_u64_be(key)) == Some(H256::from_low_u64_be(key).as_bytes().to_vec()) } #[test] diff --git a/substrate/core/state-db/src/test.rs b/substrate/core/state-db/src/test.rs index 3c83bb03cf..487a5c641d 100644 --- a/substrate/core/state-db/src/test.rs +++ b/substrate/core/state-db/src/test.rs @@ -62,8 +62,13 @@ impl TestDb { pub fn make_changeset(inserted: &[u64], deleted: &[u64]) -> ChangeSet { ChangeSet { - inserted: inserted.iter().map(|v| (H256::from(*v), H256::from(*v).to_vec())).collect(), - deleted: deleted.iter().map(|v| H256::from(*v)).collect(), + inserted: inserted + .iter() + .map(|v| { + (H256::from_low_u64_be(*v), H256::from_low_u64_be(*v).as_bytes().to_vec()) + }) + .collect(), + deleted: deleted.iter().map(|v| H256::from_low_u64_be(*v)).collect(), } } @@ -76,7 +81,12 @@ pub fn make_commit(inserted: &[u64], deleted: &[u64]) -> CommitSet { pub fn make_db(inserted: &[u64]) -> TestDb { TestDb { - data: inserted.iter().map(|v| (H256::from(*v), H256::from(*v).to_vec())).collect(), + data: inserted + .iter() + .map(|v| { + (H256::from_low_u64_be(*v), H256::from_low_u64_be(*v).as_bytes().to_vec()) + }) + .collect(), meta: Default::default(), } } diff --git a/substrate/core/state-machine/src/overlayed_changes.rs b/substrate/core/state-machine/src/overlayed_changes.rs index 15012ac66e..239dc0b438 100644 --- a/substrate/core/state-machine/src/overlayed_changes.rs +++ b/substrate/core/state-machine/src/overlayed_changes.rs @@ -371,7 +371,7 @@ mod tests { let changes_trie_storage = InMemoryChangesTrieStorage::new(); let mut ext = Ext::new(&mut overlay, &backend, Some(&changes_trie_storage)); const ROOT: [u8; 32] = hex!("0b41e488cccbd67d1f1089592c2c235f5c5399b053f7fe9152dd4b5f279914cd"); - assert_eq!(ext.storage_root(), H256(ROOT)); + assert_eq!(ext.storage_root(), H256::from(ROOT)); } #[test] diff --git a/substrate/core/state-machine/src/proving_backend.rs b/substrate/core/state-machine/src/proving_backend.rs index 6aa6eb9da3..a46fd74b5f 100644 --- a/substrate/core/state-machine/src/proving_backend.rs +++ b/substrate/core/state-machine/src/proving_backend.rs @@ -211,7 +211,8 @@ mod tests { #[test] fn proof_is_invalid_when_does_not_contains_root() { - assert!(create_proof_check_backend::(1.into(), vec![]).is_err()); + use primitives::H256; + assert!(create_proof_check_backend::(H256::from_low_u64_be(1), vec![]).is_err()); } #[test] diff --git a/substrate/core/state-machine/src/testing.rs b/substrate/core/state-machine/src/testing.rs index ea67773ed2..75ad342b6b 100644 --- a/substrate/core/state-machine/src/testing.rs +++ b/substrate/core/state-machine/src/testing.rs @@ -158,6 +158,6 @@ mod tests { ext.set_storage(b"dog".to_vec(), b"puppy".to_vec()); ext.set_storage(b"dogglesworth".to_vec(), b"cat".to_vec()); const ROOT: [u8; 32] = hex!("0b41e488cccbd67d1f1089592c2c235f5c5399b053f7fe9152dd4b5f279914cd"); - assert_eq!(ext.storage_root(), H256(ROOT)); + assert_eq!(ext.storage_root(), H256::from(ROOT)); } } diff --git a/substrate/core/state-machine/src/trie_backend.rs b/substrate/core/state-machine/src/trie_backend.rs index c40a5019f3..6dcaf3868e 100644 --- a/substrate/core/state-machine/src/trie_backend.rs +++ b/substrate/core/state-machine/src/trie_backend.rs @@ -212,7 +212,7 @@ pub mod tests { #[test] fn storage_root_is_non_default() { - assert!(test_trie().storage_root(::std::iter::empty()).0 != H256([0; 32])); + assert!(test_trie().storage_root(::std::iter::empty()).0 != H256::repeat_byte(0)); } #[test] diff --git a/substrate/core/test-client/src/block_builder_ext.rs b/substrate/core/test-client/src/block_builder_ext.rs index b2f15db739..11dd859c07 100644 --- a/substrate/core/test-client/src/block_builder_ext.rs +++ b/substrate/core/test-client/src/block_builder_ext.rs @@ -40,6 +40,6 @@ impl<'a, B, E> BlockBuilderExt for client::block_builder::BlockBuilder<'a, B, E, } fn sign_tx(transfer: runtime::Transfer) -> runtime::Extrinsic { - let signature = keyring::Keyring::from_raw_public(transfer.from.0.clone()).unwrap().sign(&codec::Encode::encode(&transfer)).into(); + let signature = keyring::Keyring::from_raw_public(transfer.from.to_fixed_bytes()).unwrap().sign(&codec::Encode::encode(&transfer)).into(); runtime::Extrinsic { transfer, signature } } diff --git a/substrate/core/test-runtime/src/genesismap.rs b/substrate/core/test-runtime/src/genesismap.rs index f212e2c86f..5e6adec86a 100644 --- a/substrate/core/test-runtime/src/genesismap.rs +++ b/substrate/core/test-runtime/src/genesismap.rs @@ -70,6 +70,6 @@ impl GenesisConfig { pub fn additional_storage_with_genesis(genesis_block: &::Block) -> HashMap, Vec> { map![ - twox_128(&b"latest"[..]).to_vec() => genesis_block.hash().0.to_vec() + twox_128(&b"latest"[..]).to_vec() => genesis_block.hash().as_fixed_bytes().to_vec() ] } diff --git a/substrate/core/test-runtime/src/system.rs b/substrate/core/test-runtime/src/system.rs index 6bc70368a1..a3041647d4 100644 --- a/substrate/core/test-runtime/src/system.rs +++ b/substrate/core/test-runtime/src/system.rs @@ -117,7 +117,7 @@ pub fn validate_transaction(utx: Extrinsic) -> TransactionValidity { } let hash = |from: &AccountId, nonce: u64| { - twox_128(&nonce.to_keyed_vec(&*from)).to_vec() + twox_128(&nonce.to_keyed_vec(from.as_bytes())).to_vec() }; let requires = if tx.nonce != expected_nonce && tx.nonce > 0 { let mut deps = Vec::new(); @@ -221,7 +221,11 @@ fn execute_transaction_backend(utx: &Extrinsic) -> ApplyResult { fn info_expect_equal_hash(given: &Hash, expected: &Hash) { use primitives::hexdisplay::HexDisplay; if given != expected { - println!("Hash: given={}, expected={}", HexDisplay::from(&given.0), HexDisplay::from(&expected.0)); + println!( + "Hash: given={}, expected={}", + HexDisplay::from(given.as_fixed_bytes()), + HexDisplay::from(expected.as_fixed_bytes()) + ); } } @@ -229,8 +233,8 @@ fn info_expect_equal_hash(given: &Hash, expected: &Hash) { fn info_expect_equal_hash(given: &Hash, expected: &Hash) { if given != expected { ::runtime_io::print("Hash not equal"); - ::runtime_io::print(&given.0[..]); - ::runtime_io::print(&expected.0[..]); + ::runtime_io::print(given.as_bytes()); + ::runtime_io::print(expected.as_bytes()); } } @@ -257,7 +261,7 @@ mod tests { } fn construct_signed_tx(tx: Transfer) -> Extrinsic { - let signature = Keyring::from_raw_public(tx.from.0).unwrap().sign(&tx.encode()).into(); + let signature = Keyring::from_raw_public(tx.from.to_fixed_bytes()).unwrap().sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } } diff --git a/substrate/core/test-runtime/wasm/Cargo.lock b/substrate/core/test-runtime/wasm/Cargo.lock index 990164654c..9e33aaa02e 100644 --- a/substrate/core/test-runtime/wasm/Cargo.lock +++ b/substrate/core/test-runtime/wasm/Cargo.lock @@ -84,6 +84,11 @@ 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 = "elastic-array" version = "0.10.0" @@ -99,13 +104,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fixed-hash" -version = "0.2.2" +version = "0.3.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "byteorder 1.2.6 (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.3 (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]] @@ -406,11 +413,6 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rustc-hex" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "rustc-hex" version = "2.0.1" @@ -544,6 +546,11 @@ 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 = "substrate-metadata" version = "0.1.0" @@ -561,8 +568,8 @@ 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.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)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (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)", @@ -574,7 +581,7 @@ dependencies = [ "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "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-beta.1 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -672,11 +679,11 @@ dependencies = [ [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" 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)", + "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)", ] @@ -751,9 +758,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "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 elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" "checksum environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db746025e3ea695bfa0ae744dbacd5fcfc8db51b9760cf8bd0ab69708bb93c49" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "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 gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" @@ -793,7 +801,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"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_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" @@ -803,12 +810,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe" "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "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 syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" "checksum syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)" = "854b08a640fc8f54728fb95321e3ec485b365a97fe47609797c671addd1dde69" "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 twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "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 untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 736d1d423bd86cc4ca37926218ea43b7b5afaec0..ff19b2bdf76deecda9e138a4641b8e0854adc158 100644 GIT binary patch delta 6718 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 Ihg&B97nTz9Gynhq delta 7021 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 -> Self::Hash { - (uxt.transfer.from.low_u64() << 5) + uxt.transfer.nonce + (uxt.transfer.from.to_low_u64_be() << 5) + uxt.transfer.nonce } } diff --git a/substrate/core/trie/src/lib.rs b/substrate/core/trie/src/lib.rs index 68dacf2668..06598ed63b 100644 --- a/substrate/core/trie/src/lib.rs +++ b/substrate/core/trie/src/lib.rs @@ -428,7 +428,7 @@ mod tests { #[test] fn random_should_work() { - let mut seed = ::Out::new(); + let mut seed = ::Out::zero(); for test_i in 0..10000 { if test_i % 50 == 0 { println!("{:?} of 10000 stress tests done", test_i); @@ -439,7 +439,7 @@ mod tests { journal_key: 0, value_mode: ValueMode::Index, count: 100, - }.make_with(&mut seed.0); + }.make_with(seed.as_fixed_bytes_mut()); let real = trie_root::(x.clone()); let mut memdb = MemoryDB::default(); diff --git a/substrate/node/cli/src/chain_spec.rs b/substrate/node/cli/src/chain_spec.rs index 53cf074767..5058f0de60 100644 --- a/substrate/node/cli/src/chain_spec.rs +++ b/substrate/node/cli/src/chain_spec.rs @@ -191,7 +191,7 @@ fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId }), council_seats: Some(CouncilSeatsConfig { active_council: endowed_accounts.iter() - .filter(|a| initial_authorities.iter().find(|&b| a.0 == b.0).is_none()) + .filter(|a| initial_authorities.iter().find(|&b| a.as_bytes() == b.0).is_none()) .map(|a| (a.clone(), 1000000)).collect(), candidacy_bond: 10, voter_bond: 2, diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index 2e9bd1099d..fd68aadd51 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -268,7 +268,10 @@ mod tests { use trie::ordered_trie_root; let extrinsics = extrinsics.into_iter().map(sign).collect::>(); - let extrinsics_root = ordered_trie_root::(extrinsics.iter().map(Encode::encode)).0.into(); + let extrinsics_root = ordered_trie_root::(extrinsics.iter() + .map(Encode::encode)) + .to_fixed_bytes() + .into(); let mut digest = generic::Digest::::default(); if let Some(changes_root) = changes_root { diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 6dad8ca740..d1afc82c44 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -145,7 +145,7 @@ impl timestamp::Trait for Runtime { pub struct SessionKeyConversion; impl Convert for SessionKeyConversion { fn convert(a: AccountId) -> SessionKey { - a.0.into() + a.to_fixed_bytes().into() } } diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index dc519d15fb..355963104b 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -84,6 +84,11 @@ 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 = "elastic-array" version = "0.10.0" @@ -99,13 +104,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fixed-hash" -version = "0.2.2" +version = "0.3.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "byteorder 1.2.6 (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.3 (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]] @@ -458,11 +465,6 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rustc-hex" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "rustc-hex" version = "2.0.1" @@ -840,6 +842,11 @@ 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 = "substrate-keyring" version = "0.1.0" @@ -866,8 +873,8 @@ 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.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)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0-beta.3 (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)", @@ -879,7 +886,7 @@ dependencies = [ "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "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-beta.1 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -960,11 +967,11 @@ dependencies = [ [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0-beta.1" 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)", + "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)", ] @@ -1039,9 +1046,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "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 elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" "checksum environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db746025e3ea695bfa0ae744dbacd5fcfc8db51b9760cf8bd0ab69708bb93c49" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" "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 gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" @@ -1082,7 +1090,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"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_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" @@ -1093,12 +1100,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe" "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "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 syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" "checksum syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)" = "854b08a640fc8f54728fb95321e3ec485b365a97fe47609797c671addd1dde69" "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 twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" "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 untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 5021eb25b6991f9bfe5a70b669644c08464e5196..36962bb6a13a887a90a601b19437244038d86f68 100644 GIT binary patch delta 90613 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Ⓢ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 UVpAXr%N5QoY0s`I_x?a)sT321K1VKOr1fvwL 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 From 3acafa9d2f3b44fb5e9bd7c1e4a84b25875d73f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Wed, 7 Nov 2018 13:55:00 +0100 Subject: [PATCH 08/26] Last finalised block PubSub & RPC (#1080) * Finalised blocks PubSub * Finalised head RPC. * Unify spelling. --- substrate/core/rpc/src/chain/mod.rs | 95 ++++++++++++++++++++------- substrate/core/rpc/src/chain/tests.rs | 64 ++++++++++++++++++ 2 files changed, 136 insertions(+), 23 deletions(-) diff --git a/substrate/core/rpc/src/chain/mod.rs b/substrate/core/rpc/src/chain/mod.rs index 308a9996ef..8542d2ff4c 100644 --- a/substrate/core/rpc/src/chain/mod.rs +++ b/substrate/core/rpc/src/chain/mod.rs @@ -56,6 +56,10 @@ build_rpc_trait! { #[rpc(name = "chain_getBlockHash", alias = ["chain_getHead", ])] fn block_hash(&self, Trailing) -> Result>; + /// Get hash of the last finalised block in the canon chain. + #[rpc(name = "chain_getFinalisedHead")] + fn finalised_head(&self) -> Result; + /// Get the runtime version. #[rpc(name = "chain_getRuntimeVersion")] fn runtime_version(&self, Trailing) -> Result; @@ -70,6 +74,16 @@ build_rpc_trait! { fn unsubscribe_new_head(&self, SubscriptionId) -> RpcResult; } + #[pubsub(name = "chain_finalisedHead")] { + /// New head subscription + #[rpc(name = "chain_subscribeFinalisedHeads")] + fn subscribe_finalised_heads(&self, Self::Metadata, pubsub::Subscriber

); + + /// Unsubscribe from new head subscription. + #[rpc(name = "chain_unsubscribeFinalisedHeads")] + fn unsubscribe_finalised_heads(&self, SubscriptionId) -> RpcResult; + } + #[pubsub(name = "chain_runtimeVersion")] { /// New runtime version subscription #[rpc(name = "chain_subscribeRuntimeVersion")] @@ -111,6 +125,42 @@ impl Chain where Some(hash) => hash, }) } + + fn subscribe_headers( + &self, + subscriber: pubsub::Subscriber, + best_block_hash: G, + stream: F, + ) where + F: FnOnce() -> S, + G: FnOnce() -> Result>, + ERR: ::std::fmt::Debug, + S: Stream + Send + 'static, + { + self.subscriptions.add(subscriber, |sink| { + // send current head right at the start. + let header = best_block_hash() + .and_then(|hash| self.header(hash.into())) + .and_then(|header| { + header.ok_or_else(|| self::error::ErrorKind::Unimplemented.into()) + }) + .map_err(Into::into); + + // send further subscriptions + let stream = stream() + .map(|res| Ok(res)) + .map_err(|e| warn!("Block notification stream error: {:?}", e)); + + sink + .sink_map_err(|e| warn!("Error sending notifications: {:?}", e)) + .send_all( + stream::iter_result(vec![Ok(header)]) + .chain(stream) + ) + // we ignore the resulting Stream (if the first stream is over we are unsubscribed) + .map(|_| ()) + }); + } } impl ChainApi, Block::Extrinsic> for Chain where @@ -139,42 +189,41 @@ impl ChainApi, Block:: }) } + fn finalised_head(&self) -> Result { + Ok(self.client.info()?.chain.finalized_hash) + } + fn runtime_version(&self, at: Trailing) -> Result { let at = self.unwrap_or_best(at)?; Ok(self.client.runtime_version_at(&BlockId::Hash(at))?) } fn subscribe_new_head(&self, _metadata: Self::Metadata, subscriber: pubsub::Subscriber) { - self.subscriptions.add(subscriber, |sink| { - // send current head right at the start. - let header = self.block_hash(None.into()) - .and_then(|hash| self.header(hash.into())) - .and_then(|header| { - header.ok_or_else(|| self::error::ErrorKind::Unimplemented.into()) - }) - .map_err(Into::into); - - // send further subscriptions - let stream = self.client.import_notification_stream() + self.subscribe_headers( + subscriber, + || self.block_hash(None.into()), + || self.client.import_notification_stream() .filter(|notification| notification.is_new_best) - .map(|notification| Ok(notification.header)) - .map_err(|e| warn!("Block notification stream error: {:?}", e)); - - sink - .sink_map_err(|e| warn!("Error sending notifications: {:?}", e)) - .send_all( - stream::iter_result(vec![Ok(header)]) - .chain(stream) - ) - // we ignore the resulting Stream (if the first stream is over we are unsubscribed) - .map(|_| ()) - }); + .map(|notification| notification.header), + ) } fn unsubscribe_new_head(&self, id: SubscriptionId) -> RpcResult { Ok(self.subscriptions.cancel(id)) } + fn subscribe_finalised_heads(&self, _meta: Self::Metadata, subscriber: pubsub::Subscriber) { + self.subscribe_headers( + subscriber, + || Ok(Some(self.client.info()?.chain.finalized_hash)), + || self.client.finality_notification_stream() + .map(|notification| notification.header), + ) + } + + fn unsubscribe_finalised_heads(&self, id: SubscriptionId) -> RpcResult { + Ok(self.subscriptions.cancel(id)) + } fn subscribe_runtime_version(&self, _meta: Self::Metadata, subscriber: pubsub::Subscriber) { let stream = match self.client.storage_changes_notification_stream(Some(&[storage::StorageKey(storage::well_known_keys::CODE.to_vec())])) { diff --git a/substrate/core/rpc/src/chain/tests.rs b/substrate/core/rpc/src/chain/tests.rs index e673fe0af7..172223b941 100644 --- a/substrate/core/rpc/src/chain/tests.rs +++ b/substrate/core/rpc/src/chain/tests.rs @@ -150,7 +150,39 @@ fn should_return_block_hash() { client.block_hash(Some(1u64).into()), Ok(Some(ref x)) if x == &block.hash() ); +} + +#[test] +fn should_return_finalised_hash() { + let core = ::tokio::runtime::Runtime::new().unwrap(); + let remote = core.executor(); + + let client = Chain { + client: Arc::new(test_client::new()), + subscriptions: Subscriptions::new(remote), + }; + + assert_matches!( + client.finalised_head(), + Ok(ref x) if x == &client.client.genesis_hash() + ); + + // import new block + let builder = client.client.new_block().unwrap(); + client.client.justify_and_import(BlockOrigin::Own, builder.bake().unwrap()).unwrap(); + // no finalisation yet + assert_matches!( + client.finalised_head(), + Ok(ref x) if x == &client.client.genesis_hash() + ); + + // finalise + client.client.finalize_block(BlockId::number(1), true).unwrap(); + assert_matches!( + client.finalised_head(), + Ok(ref x) if x == &client.client.block_hash(1).unwrap().unwrap() + ); } #[test] @@ -184,6 +216,38 @@ fn should_notify_about_latest_block() { assert_eq!(core.block_on(next.into_future()).unwrap().0, None); } +#[test] +fn should_notify_about_finalised_block() { + let mut core = ::tokio::runtime::Runtime::new().unwrap(); + let remote = core.executor(); + let (subscriber, id, transport) = pubsub::Subscriber::new_test("test"); + + { + let api = Chain { + client: Arc::new(test_client::new()), + subscriptions: Subscriptions::new(remote), + }; + + api.subscribe_finalised_heads(Default::default(), subscriber); + + // assert id assigned + assert_eq!(core.block_on(id), Ok(Ok(SubscriptionId::Number(1)))); + + let builder = api.client.new_block().unwrap(); + api.client.justify_and_import(BlockOrigin::Own, builder.bake().unwrap()).unwrap(); + api.client.finalize_block(BlockId::number(1), true).unwrap(); + } + + // assert initial head sent. + let (notification, next) = core.block_on(transport.into_future()).unwrap(); + assert!(notification.is_some()); + // assert notification sent to transport + let (notification, next) = core.block_on(next.into_future()).unwrap(); + assert!(notification.is_some()); + // no more notifications on this channel + assert_eq!(core.block_on(next.into_future()).unwrap().0, None); +} + #[test] fn should_return_runtime_version() { let core = ::tokio::runtime::Runtime::new().unwrap(); From 6edf23d155c8120aa674f718c0dbeb90aec40ae4 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Wed, 7 Nov 2018 21:42:47 +0100 Subject: [PATCH 09/26] refactor: Fixes #1083. Rename ApplyExtrinsicFailed method without typo (#1084) --- substrate/core/client/src/block_builder.rs | 2 +- substrate/core/client/src/error.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/substrate/core/client/src/block_builder.rs b/substrate/core/client/src/block_builder.rs index b918ca4956..d7365750a2 100644 --- a/substrate/core/client/src/block_builder.rs +++ b/substrate/core/client/src/block_builder.rs @@ -103,7 +103,7 @@ where } Err(e) => { self.changes.discard_prospective(); - Err(error::ErrorKind::ApplyExtinsicFailed(e).into()) + Err(error::ErrorKind::ApplyExtrinsicFailed(e).into()) } } } diff --git a/substrate/core/client/src/error.rs b/substrate/core/client/src/error.rs index 3971b6a821..aa09344c99 100644 --- a/substrate/core/client/src/error.rs +++ b/substrate/core/client/src/error.rs @@ -41,7 +41,7 @@ error_chain! { } /// Applying extrinsic error. - ApplyExtinsicFailed(e: ApplyError) { + ApplyExtrinsicFailed(e: ApplyError) { description("Extrinsic error"), display("Extrinsic error: {:?}", e), } From 0ab26a9c4f09ace6b2a2b63866971789a2f04147 Mon Sep 17 00:00:00 2001 From: Simon Warta <2603011+webmaster128@users.noreply.github.com> Date: Fri, 9 Nov 2018 14:30:07 +0100 Subject: [PATCH 10/26] Simplify onboarding when using `subkey restore` (#1079) * Switch order of `subkey restore` output to macht the derivation chain: seed -> keypair -> pubkey -> address * Use terms public key and address explicitly `subkey restore` --- substrate/subkey/src/cli.yml | 2 +- substrate/subkey/src/main.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/substrate/subkey/src/cli.yml b/substrate/subkey/src/cli.yml index 30e6be0626..6e1a13dca8 100644 --- a/substrate/subkey/src/cli.yml +++ b/substrate/subkey/src/cli.yml @@ -3,7 +3,7 @@ author: "Parity Team " about: A substrate key utility subcommands: - restore: - about: Gets a SS58 public key from the provided seed phrase + about: Gets a public key and a SS58 address from the provided seed phrase args: - seed: index: 1 diff --git a/substrate/subkey/src/main.rs b/substrate/subkey/src/main.rs index a89f7911ac..190921d750 100644 --- a/substrate/subkey/src/main.rs +++ b/substrate/subkey/src/main.rs @@ -58,10 +58,10 @@ fn main() { seed[..len].copy_from_slice(&raw_seed[..len]); let pair = Pair::from_seed(&seed); - println!("Seed 0x{} is account:\n SS58: {}\n Hex: 0x{}", + println!("Seed 0x{} is account:\n Public key (hex): 0x{}\n Address (SS58): {}", HexDisplay::from(&seed), - pair.public().to_ss58check(), - HexDisplay::from(&pair.public().0) + HexDisplay::from(&pair.public().0), + pair.public().to_ss58check() ); }, _ => print_usage(&matches), From 5cbbd2284dffdf52c714ce4a203aa8b5d9ea1beb Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 9 Nov 2018 14:31:53 +0100 Subject: [PATCH 11/26] Fix the race. (#1081) --- substrate/core/network/src/import_queue.rs | 34 ++++++++++++++-------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/substrate/core/network/src/import_queue.rs b/substrate/core/network/src/import_queue.rs index 955dc12321..b31dee6310 100644 --- a/substrate/core/network/src/import_queue.rs +++ b/substrate/core/network/src/import_queue.rs @@ -166,8 +166,12 @@ impl> ImportQueue for BasicQueue { fn stop(&self) { self.clear(); if let Some(handle) = self.handle.lock().take() { - self.data.is_stopping.store(true, Ordering::SeqCst); - self.data.signal.notify_one(); + { + // Perform storing the stop flag and signalling under a single lock. + let _queue_lock = self.data.queue.lock(); + self.data.is_stopping.store(true, Ordering::SeqCst); + self.data.signal.notify_one(); + } let _ = handle.join(); } @@ -220,12 +224,15 @@ fn import_thread, V: Verifier>( ) { trace!(target: "sync", "Starting import thread"); loop { - if qdata.is_stopping.load(Ordering::SeqCst) { - break; - } - let new_blocks = { let mut queue_lock = qdata.queue.lock(); + + // We are holding the same lock that `stop` takes so here we either see that stop flag + // is active or wait for the signal. The latter one unlocks the mutex and this gives a chance + // to `stop` to generate the signal. + if qdata.is_stopping.load(Ordering::SeqCst) { + break; + } if queue_lock.is_empty() { qdata.signal.wait(&mut queue_lock); } @@ -779,11 +786,14 @@ pub mod tests { #[test] fn async_import_queue_drops() { - let verifier = Arc::new(PassThroughVerifier(true)); - let queue = BasicQueue::new(verifier); - let service = Arc::new(DummyExecutor); - let chain = Arc::new(test_client::new()); - queue.start(Weak::new(), Arc::downgrade(&service), Arc::downgrade(&chain) as Weak>).unwrap(); - drop(queue); + // Perform this test multiple times since it exhibits non-deterministic behavior. + for _ in 0..100 { + let verifier = Arc::new(PassThroughVerifier(true)); + let queue = BasicQueue::new(verifier); + let service = Arc::new(DummyExecutor); + let chain = Arc::new(test_client::new()); + queue.start(Weak::new(), Arc::downgrade(&service), Arc::downgrade(&chain) as Weak>).unwrap(); + drop(queue); + } } } From 7eef5cc3f8c18c1fcb39e8e72ba84f07920c7988 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 9 Nov 2018 14:32:29 +0100 Subject: [PATCH 12/26] Update substrate to use libp2p master as of nov 9 (#1095) * WIP * Use latest lip2p master --- substrate/Cargo.lock | 250 ++++++++++-------- substrate/core/network-libp2p/Cargo.toml | 2 +- .../core/network-libp2p/src/node_handler.rs | 20 +- .../substrate_test_runtime.compact.wasm | Bin 44807 -> 44927 bytes .../release/node_runtime.compact.wasm | Bin 621448 -> 624812 bytes 5 files changed, 151 insertions(+), 121 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index 5ebc858b57..eabd0d765f 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -270,11 +270,11 @@ 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]] @@ -519,10 +519,10 @@ 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=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +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)", + "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.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1161,31 +1161,30 @@ dependencies = [ [[package]] name = "libp2p" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bytes 0.4.10 (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=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.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-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1193,20 +1192,20 @@ dependencies = [ [[package]] name = "libp2p-core" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.10 (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)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.1.1 (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=9d9121719308491358ae6e4b0be83cdffa992985)", + "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "smallvec 0.6.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1217,12 +1216,12 @@ dependencies = [ [[package]] name = "libp2p-dns" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1230,16 +1229,16 @@ dependencies = [ [[package]] name = "libp2p-floodsub" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.10 (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)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1251,15 +1250,15 @@ dependencies = [ [[package]] name = "libp2p-identify" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bytes 0.4.10 (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)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1272,21 +1271,21 @@ dependencies = [ [[package]] name = "libp2p-kad" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +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.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.10 (registry+https://github.com/rust-lang/crates.io-index)", - "datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1300,12 +1299,12 @@ dependencies = [ [[package]] name = "libp2p-mplex" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bytes 0.4.10 (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)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (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)", @@ -1316,13 +1315,13 @@ dependencies = [ [[package]] name = "libp2p-peerstore" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "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=9d9121719308491358ae6e4b0be83cdffa992985)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1331,28 +1330,31 @@ dependencies = [ [[package]] name = "libp2p-ping" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +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)", "bytes 0.4.10 (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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.9 (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=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +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.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1361,14 +1363,14 @@ dependencies = [ [[package]] name = "libp2p-relay" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bytes 0.4.10 (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=9d9121719308491358ae6e4b0be83cdffa992985)", - "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "protobuf 2.1.1 (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)", @@ -1379,7 +1381,7 @@ dependencies = [ [[package]] name = "libp2p-secio" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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)", @@ -1389,12 +1391,12 @@ dependencies = [ "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.1.1 (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)", - "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1405,12 +1407,12 @@ dependencies = [ [[package]] name = "libp2p-tcp-transport" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.9 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1419,10 +1421,10 @@ dependencies = [ [[package]] name = "libp2p-transport-timeout" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1430,25 +1432,25 @@ dependencies = [ [[package]] name = "libp2p-uds" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "tokio-uds 0.2.2 (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=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", - "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)", + "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.9 (registry+https://github.com/rust-lang/crates.io-index)", "websocket 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1457,11 +1459,11 @@ dependencies = [ [[package]] name = "libp2p-yamux" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bytes 0.4.10 (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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1621,13 +1623,13 @@ dependencies = [ [[package]] name = "multiaddr" version = "0.3.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "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)", "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "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)", ] @@ -1635,7 +1637,7 @@ dependencies = [ [[package]] name = "multihash" version = "0.8.1-pre" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +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)", @@ -1647,7 +1649,7 @@ dependencies = [ [[package]] name = "multistream-select" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1901,6 +1903,11 @@ dependencies = [ "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" @@ -1982,6 +1989,16 @@ dependencies = [ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "parking_lot" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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]] name = "parking_lot" version = "0.4.8" @@ -2340,7 +2357,7 @@ dependencies = [ [[package]] name = "rw-stream-sink" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985#9d9121719308491358ae6e4b0be83cdffa992985" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3266,7 +3283,7 @@ dependencies = [ "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)", "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=9d9121719308491358ae6e4b0be83cdffa992985)", + "libp2p 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.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)", @@ -3658,6 +3675,16 @@ dependencies = [ "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "thread-id" +version = "3.3.0" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "thread-scoped" version = "1.0.2" @@ -4316,7 +4343,7 @@ dependencies = [ "checksum cast 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "011941fb53da1a8ac3e4132a1becc367c44fe13f630769f3143d8c66c91c6cb6" "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" "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 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" @@ -4343,7 +4370,7 @@ dependencies = [ "checksum ctrlc 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "630391922b1b893692c6334369ff528dcc3a9d8061ccf4c803aa8f83cb13db5e" "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=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"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 difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" "checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" @@ -4416,23 +4443,23 @@ dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"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.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a" @@ -4450,9 +4477,9 @@ dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" -"checksum multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"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.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8b0a7bd714e83db15676d31caf968ad7318e9cc35f93c85a90231c8f22867549" @@ -4470,6 +4497,7 @@ dependencies = [ "checksum openssl 0.10.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6285ab297861546af7a2753593b3160bfc09f0ab9d1f5bb009e39d81a169b499" "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 parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" "checksum parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dca389ea5e1632c89b2ce54f7e2b4a8a8c9d278042222a91e0bf95451218cb4c" @@ -4479,6 +4507,7 @@ dependencies = [ "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 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.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" @@ -4522,7 +4551,7 @@ dependencies = [ "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=9d9121719308491358ae6e4b0be83cdffa992985)" = "" +"checksum rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" "checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7" "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" @@ -4576,6 +4605,7 @@ dependencies = [ "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-id 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7fbf4c9d56b320106cd64fd024dadfa0be7cb4706725fc44a7d7ce952d820c1" "checksum thread-scoped 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bcbb6aa301e5d3b0b5ef639c9a9c7e2f1c944f177b460c04dc24c69b1fa2bd99" "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" diff --git a/substrate/core/network-libp2p/Cargo.toml b/substrate/core/network-libp2p/Cargo.toml index 2947435d8e..6b0fb9af40 100644 --- a/substrate/core/network-libp2p/Cargo.toml +++ b/substrate/core/network-libp2p/Cargo.toml @@ -11,7 +11,7 @@ bytes = "0.4" error-chain = { version = "0.12", default-features = false } fnv = "1.0" futures = "0.1" -libp2p = { git = "https://github.com/libp2p/rust-libp2p", rev = "9d9121719308491358ae6e4b0be83cdffa992985", default-features = false, features = ["secio-rsa", "secio-secp256k1"] } +libp2p = { git = "https://github.com/libp2p/rust-libp2p", rev = "d961e656a74d1bab5366d371a06f9e10d5f4a6c5", default-features = false, features = ["secio-rsa", "secio-secp256k1"] } parking_lot = "0.5" libc = "0.2" log = "0.4" diff --git a/substrate/core/network-libp2p/src/node_handler.rs b/substrate/core/network-libp2p/src/node_handler.rs index 5f3e74d2ba..ad1f4b7504 100644 --- a/substrate/core/network-libp2p/src/node_handler.rs +++ b/substrate/core/network-libp2p/src/node_handler.rs @@ -59,11 +59,11 @@ pub struct SubstrateNodeHandler { need_report_kad_open: bool, /// Substream open for sending pings, if any. - ping_out_substream: Option>, + ping_out_substream: Option>, /// Active pinging attempt with the moment it expires. active_ping_out: Option, /// Substreams open for receiving pings. - ping_in_substreams: Vec>, + ping_in_substreams: Vec>, /// Future that fires when we need to ping the node again. /// /// Every time we receive a pong, we reset the timer to the next time. @@ -245,7 +245,7 @@ macro_rules! listener_upgrade { upgrade::or(upgrade::or(upgrade::or( upgrade::map((*$self.registered_custom).clone(), move |c| FinalUpgrade::Custom(c)), upgrade::map(KadConnecConfig::new(), move |(c, s)| FinalUpgrade::Kad(c, s))), - upgrade::map(ping::Ping::default(), move |p| FinalUpgrade::from(p))), + upgrade::map(ping::protocol::Ping::default(), move |p| FinalUpgrade::from(p))), upgrade::map(identify::IdentifyProtocolConfig, move |i| FinalUpgrade::from(i))) // TODO: meh for cloning a Vec here ) @@ -343,7 +343,7 @@ where TSubstream: AsyncRead + AsyncWrite + Send + 'static, self.upgrades_in_progress_dial.push((purpose, Box::new(upgrade) as Box<_>)); } UpgradePurpose::Ping => { - let wanted = upgrade::map(ping::Ping::default(), move |p| FinalUpgrade::from(p)); + let wanted = upgrade::map(ping::protocol::Ping::default(), move |p| FinalUpgrade::from(p)); let upgrade = upgrade::apply(substream, wanted, Endpoint::Dialer); self.upgrades_in_progress_dial.push((purpose, Box::new(upgrade) as Box<_>)); } @@ -837,16 +837,16 @@ enum FinalUpgrade { Kad(KadConnecController, Box + Send>), IdentifyListener(identify::IdentifySender), IdentifyDialer(identify::IdentifyInfo, Multiaddr), - PingDialer(ping::PingDialer), - PingListener(ping::PingListener), + PingDialer(ping::protocol::PingDialer), + PingListener(ping::protocol::PingListener), Custom(RegisteredProtocolSubstream), } -impl From> for FinalUpgrade { - fn from(out: ping::PingOutput) -> Self { +impl From> for FinalUpgrade { + fn from(out: ping::protocol::PingOutput) -> Self { match out { - ping::PingOutput::Ponger(ponger) => FinalUpgrade::PingListener(ponger), - ping::PingOutput::Pinger(pinger) => FinalUpgrade::PingDialer(pinger), + ping::protocol::PingOutput::Ponger(ponger) => FinalUpgrade::PingListener(ponger), + ping::protocol::PingOutput::Pinger(pinger) => FinalUpgrade::PingDialer(pinger), } } } diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index ff19b2bdf76deecda9e138a4641b8e0854adc158..72683d7e19b2af43325f7f1ec1357721881a4c0d 100644 GIT binary patch delta 7120 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 EAI8@B6951J diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 36962bb6a13a887a90a601b19437244038d86f68..4fbcc974d009df0e7d334462296e80ed16a01032 100644 GIT binary patch delta 96871 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

BV_%M>uv zwQiV?XfUo#M-#_Sr%aN&8VOzCam%^1g!@;kDA@PS9CEc8eB~T;b1?YZLtz!jNP8UN zqyn$}eY;=-%76H44*|RR!i;#*GYonr7B;VMz|*;GCQ?GH7`qIie3`TTbq1n%Tsy}R zZV1EG3Jw)a7<9YJfuT);ErzWSYT#ryvV79UXbR5?*tVqgmA>Cu4TId{Vt2-FAxhN@ zkMD|5C!Kwyq0I~r(-BI;$6x}P3qD&@y%tOFHK1X-cD9$ma~I?F?e^(pgUg%`?~}1RFCLEJXQA z2J4Q%lgZ|xz}=bb34FEAQU$KhV!iOSD~mneZuK&-WgKSR%A-)oJ&6uS0=^4*hIu!o zd23JmW2sz~%?ep(`CK-f3+qB3Wiyx~m9jDixTp*z)?x2yP0DV2iA?+?W#X?a1N+0z zVxGZ^k!;6Se@I_G%Vzsz<9ya4`TdjD)C3L>nwmHuAY{`PuA;=xk>G>i%26JI40E~M zozLpBQS#k<)}Y>LCH83QNvugzb#5p*2)bwuImms(9ii8nvGba&Qy1Q~urote)@2U> z?0NN27h*TnhwG?Pwku%M(rjt#hP3s=wE%MtQ#B^5ny}u<=WH>{Eiuap%uY>Nfot&v z%wa}`dNyF!Gd4l)EM!f^1g}>%whD)Gb)kj} z7sL#|Fu#&T?ZIac$%g&1#rhATGHy_$1=eA=Vy|I{$ zZD#$vaUi!ZWI_klx#1V8EJIl%#t%{kg50JR3FlgMi+4OK8@6ZdbOA?3t(0dwvj*uq?|8{k+Qi|=XXfjU-d=&R7PHMN*{lo8VT)y- zE-W`~&jyf#+6J z8Y1{a7s!FW(r2>KX@3SGNZ?a29Hp3sLb@9cXiG|KE_;2UHS1Y>1`BbF$dP0cW}NU^ zD|5tpaU&kuuWv*a{PMUgE@9dH!sD`U32V(J$-7D*DW3_QFJWF0cde>Wv9J8SH>(GK zZC)P+14HiZ!{Eb}ovvi$#GNsiWy_j|^f1Kp3};yZ19(+#UXykAD#GG0+M;5w^kNdqF+U2VTS6+C2Fc3Z+p zdsOkz!r73FJ6U7b zki#2o_>N$7m3Q#}O0U)~W&3C$Le99x)l`1HlnnsLiOWHo!rvD>Vu9#)Ve zee0Q1-nyK1M8vbp*?hIipjIiM&r}%dzJi_N81tf4N+mtNN-37&`&hF?()d_jatjD> z!?6QQJN-V;$2z(8K6cRciy8)bU65Vba@iUh>K+D%`r~~-|CSj%6mKzPU2*ffw>DZ9vyw|uD8E_H8ii)8VSjPtnYNByBU3l9#=?L#+h`TURvey~$n|wdQ*B1C`4-!Po!*DS zTP>Hp4-0X%bbf$|1!f)}u!*&T5Cybsbd=qMybm5_C05W*=6=Wwym$UkMImS>U-*z+ z=~;~lBTc2DH0R6251@xS9Rp+iXXHI(7wbaBrpoD`L+%~;h`HG6(5oL|Qv||ApRl<9 zHU?v5)8lMkt!-8JhB`gz1nUtEX(tQPA5O3?wU)Mrjui}4T9coRthAni*57=7+Htu)^#yLo7>RHy51xRo^;X9*g zXaI9qR;s32^zxr#QASf4vA}AVwN}pIVYI(5PQUnDE*R%h+=AZ%|4r<;ve+ad(ybe`A+rs!6>KP9Qv|SFN~z zXV=;i^hy?Z&BKytwZBTAl&{ruKzK4!qghkFvl(;cyUf_$w6}wtZ=QS|OT?x5ZnKbl zhuA+7Lz@yN(YkRJYp+{ zWUj-?Gj?NeG=mX$VIK>oZPZBdWYq}vXds6G2=*=&ZZ1|4Ms-A)iU1tp{V(T~`xt

, ExtrinsicFor

, Vec>> for Author where +impl AuthorApi, BlockHash

> for Author where B: client::backend::Backend<

::Block, Blake2Hasher> + Send + Sync + 'static, E: client::CallExecutor<

::Block, Blake2Hasher> + Send + Sync + 'static, P: PoolChainApi + Sync + Send + 'static, @@ -112,12 +108,8 @@ impl AuthorApi, BlockHash

, ExtrinsicFor

, Vec Result> { - let dxt = Decode::decode(&mut &xt[..]).ok_or(error::Error::from(error::ErrorKind::BadFormat))?; - self.submit_rich_extrinsic(dxt) - } - - fn submit_rich_extrinsic(&self, xt: <

::Block as traits::Block>::Extrinsic) -> Result> { + fn submit_extrinsic(&self, ext: Bytes) -> Result> { + let xt = Decode::decode(&mut &ext[..]).ok_or(error::Error::from(error::ErrorKind::BadFormat))?; let best_block_hash = self.client.info()?.chain.best_hash; self.pool .submit_one(&generic::BlockId::hash(best_block_hash), xt) @@ -127,8 +119,8 @@ impl AuthorApi, BlockHash

, ExtrinsicFor

, Vec Result>> { - Ok(self.pool.ready().map(|tx| tx.data.clone()).collect()) + fn pending_extrinsics(&self) -> Result> { + Ok(self.pool.ready().map(|tx| tx.data.encode().into()).collect()) } fn watch_extrinsic(&self, _metadata: Self::Metadata, subscriber: pubsub::Subscriber, BlockHash

>>, xt: Bytes) { diff --git a/substrate/core/rpc/src/author/tests.rs b/substrate/core/rpc/src/author/tests.rs index 7032355ef2..82f5d37162 100644 --- a/substrate/core/rpc/src/author/tests.rs +++ b/substrate/core/rpc/src/author/tests.rs @@ -71,11 +71,11 @@ fn submit_rich_transaction_should_not_cause_error() { let h: H256 = hex!("fccc48291473c53746cd267cf848449edd7711ee6511fba96919d5f9f4859e4f").into(); assert_matches!( - AuthorApi::submit_rich_extrinsic(&p, uxt(Keyring::Alice, 0)), + AuthorApi::submit_extrinsic(&p, uxt(Keyring::Alice, 0).encode().into()), Ok(h2) if h == h2 ); assert!( - AuthorApi::submit_rich_extrinsic(&p, uxt(Keyring::Alice, 0)).is_err() + AuthorApi::submit_extrinsic(&p, uxt(Keyring::Alice, 0).encode().into()).is_err() ); } @@ -108,7 +108,7 @@ fn should_watch_extrinsic() { let signature = Keyring::from_raw_public(tx.from.to_fixed_bytes()).unwrap().sign(&tx.encode()).into(); Extrinsic { transfer: tx, signature } }; - AuthorApi::submit_rich_extrinsic(&p, replacement).unwrap(); + AuthorApi::submit_extrinsic(&p, replacement.encode().into()).unwrap(); let (res, data) = runtime.block_on(data.into_future()).unwrap(); assert_eq!( res, @@ -131,9 +131,9 @@ fn should_return_pending_extrinsics() { subscriptions: Subscriptions::new(runtime.executor()), }; let ex = uxt(Keyring::Alice, 0); - AuthorApi::submit_rich_extrinsic(&p, ex.clone()).unwrap(); + AuthorApi::submit_extrinsic(&p, ex.encode().into()).unwrap(); assert_matches!( p.pending_extrinsics(), - Ok(ref expected) if expected == &vec![ex] + Ok(ref expected) if *expected == vec![Bytes(ex.encode())] ); } diff --git a/substrate/core/rpc/src/chain/mod.rs b/substrate/core/rpc/src/chain/mod.rs index 8542d2ff4c..62b76ed232 100644 --- a/substrate/core/rpc/src/chain/mod.rs +++ b/substrate/core/rpc/src/chain/mod.rs @@ -39,7 +39,7 @@ use self::error::Result; build_rpc_trait! { /// Substrate blockchain API - pub trait ChainApi { + pub trait ChainApi { type Metadata; /// Get header of a relay chain block. @@ -48,7 +48,7 @@ build_rpc_trait! { /// Get header and body of a relay chain block. #[rpc(name = "chain_getBlock")] - fn block(&self, Trailing) -> Result>>; + fn block(&self, Trailing) -> Result>; /// Get hash of the n-th block in the canon chain. /// @@ -163,7 +163,7 @@ impl Chain where } } -impl ChainApi, Block::Extrinsic> for Chain where +impl ChainApi, SignedBlock> for Chain where Block: BlockT + 'static, B: client::backend::Backend + Send + Sync + 'static, E: client::CallExecutor + Send + Sync + 'static, @@ -176,7 +176,7 @@ impl ChainApi, Block:: } fn block(&self, hash: Trailing) - -> Result>> + -> Result>> { let hash = self.unwrap_or_best(hash)?; Ok(self.client.block(&BlockId::Hash(hash))?) diff --git a/substrate/core/service/src/chain_ops.rs b/substrate/core/service/src/chain_ops.rs index e94db8c6f0..221b05dd77 100644 --- a/substrate/core/service/src/chain_ops.rs +++ b/substrate/core/service/src/chain_ops.rs @@ -18,7 +18,6 @@ use std::{self, io::{Read, Write}}; use futures::Future; -use serde_json; use runtime_primitives::generic::{SignedBlock, BlockId}; use runtime_primitives::traits::{As, Block, Header}; @@ -34,7 +33,10 @@ use chain_spec::ChainSpec; /// Export a range of blocks to a binary stream. pub fn export_blocks(config: FactoryFullConfiguration, exit: E, mut output: W, from: FactoryBlockNumber, to: Option>, json: bool) -> error::Result<()> - where F: ServiceFactory, E: Future + Send + 'static, W: Write, + where + F: ServiceFactory, + E: Future + Send + 'static, + W: Write, { let client = new_client::(&config)?; let mut block = from; @@ -104,14 +106,14 @@ pub fn import_blocks(config: FactoryFullConfiguration, exit: E, mut if exit_recv.try_recv().is_ok() { break; } - if let Some(signed) = SignedBlock::<::Header, ::Extrinsic>::decode(&mut input) { - let header = signed.block.header; + if let Some(signed) = SignedBlock::::decode(&mut input) { + let (header, extrinsics) = signed.block.deconstruct(); let hash = header.hash(); let block = message::BlockData:: { hash: hash, justification: Some(signed.justification), header: Some(header), - body: Some(signed.block.extrinsics), + body: Some(extrinsics), receipt: None, message_queue: None }; diff --git a/substrate/core/service/src/lib.rs b/substrate/core/service/src/lib.rs index 9e7c201e8f..3b817e4ced 100644 --- a/substrate/core/service/src/lib.rs +++ b/substrate/core/service/src/lib.rs @@ -69,7 +69,7 @@ use parking_lot::{Mutex, RwLock}; use keystore::Store as Keystore; use client::BlockchainEvents; use runtime_primitives::traits::{Header, As}; -use runtime_primitives::generic::BlockId; +use runtime_primitives::generic::{BlockId, SignedBlock}; use exit_future::Signal; #[doc(hidden)] pub use tokio::runtime::TaskExecutor; @@ -124,8 +124,7 @@ impl Service where Components: components::Components, ::Executor: std::clone::Clone, - txpool::ExHash: serde::de::DeserializeOwned + serde::Serialize, - txpool::ExtrinsicFor: serde::de::DeserializeOwned + serde::Serialize, + for<'de> SignedBlock>: ::serde::Deserialize<'de>, { /// Creates a new service. pub fn new( @@ -247,7 +246,7 @@ impl Service let chain = rpc::apis::chain::Chain::new(client.clone(), subscriptions.clone()); let state = rpc::apis::state::State::new(client.clone(), subscriptions.clone()); let author = rpc::apis::author::Author::new(client.clone(), transaction_pool.clone(), subscriptions.clone()); - rpc::rpc_handler::, ComponentExHash, _, _, _, _, _>( + rpc::rpc_handler::, ComponentExHash, _, _, _, _>( state, chain, author, diff --git a/substrate/core/sr-api/src/lib.rs b/substrate/core/sr-api/src/lib.rs index 7fffc43590..a80420a8d7 100644 --- a/substrate/core/sr-api/src/lib.rs +++ b/substrate/core/sr-api/src/lib.rs @@ -456,12 +456,6 @@ decl_apis! { fn metadata() -> Data; } - /// The `OldTxQueue` api trait for interfering with the old transaction queue. - pub trait OldTxQueue { - fn account_nonce(account: AccountId) -> Index; - fn lookup_address(address: Address) -> Option; - } - /// The `TaggedTransactionQueue` api trait for interfering with the new transaction queue. pub trait TaggedTransactionQueue { fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity; diff --git a/substrate/core/sr-primitives/src/generic/block.rs b/substrate/core/sr-primitives/src/generic/block.rs index 6cbb7929d8..61452668ad 100644 --- a/substrate/core/sr-primitives/src/generic/block.rs +++ b/substrate/core/sr-primitives/src/generic/block.rs @@ -19,9 +19,13 @@ #[cfg(feature = "std")] use std::fmt; +#[cfg(feature = "std")] +use serde::{Deserialize, Deserializer}; +#[cfg(feature = "std")] +use codec::Decode; use rstd::prelude::*; use codec::Codec; -use traits::{self, Member, Block as BlockT, Header as HeaderT}; +use traits::{self, Member, Block as BlockT, Header as HeaderT, MaybeSerialize}; use ::Justification; /// Something to identify a block. @@ -59,17 +63,28 @@ impl fmt::Display for BlockId { /// Abstraction over a substrate block. #[derive(PartialEq, Eq, Clone, Encode, Decode)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", derive(Debug, Serialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[cfg_attr(feature = "std", serde(deny_unknown_fields))] -pub struct Block { +pub struct Block { /// The block header. pub header: Header, /// The accompanying extrinsics. pub extrinsics: Vec, } -impl traits::Block for Block +// TODO: Remove Deserialize for Block once RPC no longer needs it #1098 +#[cfg(feature = "std")] +impl<'a, Header: 'a, Extrinsic: 'a + MaybeSerialize> Deserialize<'a> for Block where + Block: Decode, +{ + fn deserialize>(de: D) -> Result { + let r = >::deserialize(de)?; + Decode::decode(&mut &r[..]).ok_or(::serde::de::Error::custom("Invalid value passed into decode")) + } +} + +impl traits::Block for Block where Header: HeaderT, Extrinsic: Member + Codec + traits::Extrinsic, @@ -94,12 +109,25 @@ where /// Abstraction over a substrate block and justification. #[derive(PartialEq, Eq, Clone, Encode, Decode)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", derive(Debug, Serialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[cfg_attr(feature = "std", serde(deny_unknown_fields))] -pub struct SignedBlock { +pub struct SignedBlock { /// Full block. - pub block: Block, + pub block: Block, /// Block justification. pub justification: Justification, } + +// TODO: Remove Deserialize for SignedBlock once RPC no longer needs it #1098 +#[cfg(feature = "std")] +impl<'a, Block: BlockT,> Deserialize<'a> for SignedBlock where + Block::Header: 'a, + Block::Extrinsic: 'a + Codec + MaybeSerialize, + SignedBlock: Decode, +{ + fn deserialize>(de: D) -> Result { + let r = >::deserialize(de)?; + Decode::decode(&mut &r[..]).ok_or(::serde::de::Error::custom("Invalid value passed into decode")) + } +} diff --git a/substrate/core/sr-primitives/src/generic/checked_extrinsic.rs b/substrate/core/sr-primitives/src/generic/checked_extrinsic.rs index e69ce77336..749577cdd6 100644 --- a/substrate/core/sr-primitives/src/generic/checked_extrinsic.rs +++ b/substrate/core/sr-primitives/src/generic/checked_extrinsic.rs @@ -23,7 +23,7 @@ use traits::{self, Member, SimpleArithmetic, MaybeDisplay}; /// existence implies that it has been checked and is good, particularly with /// regards to the signature. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] pub struct CheckedExtrinsic { /// Who this purports to be from and the number of extrinsics have come before /// from the same signer, if anyone (note this is not a signature). @@ -37,7 +37,7 @@ impl traits::Applyable where AccountId: Member + MaybeDisplay, Index: Member + MaybeDisplay + SimpleArithmetic, - Call: Member + Call: Member, { type Index = Index; type AccountId = AccountId; diff --git a/substrate/core/sr-primitives/src/generic/digest.rs b/substrate/core/sr-primitives/src/generic/digest.rs index 41ffd6da0d..c71ee4c7aa 100644 --- a/substrate/core/sr-primitives/src/generic/digest.rs +++ b/substrate/core/sr-primitives/src/generic/digest.rs @@ -19,7 +19,7 @@ use rstd::prelude::*; use codec::{Decode, Encode, Codec, Input}; -use traits::{self, Member, DigestItem as DigestItemT}; +use traits::{self, Member, DigestItem as DigestItemT, MaybeSerializeDebug}; use substrate_primitives::hash::H512 as Signature; @@ -122,7 +122,10 @@ impl DigestItem { } } -impl traits::DigestItem for DigestItem { +impl< + Hash: Codec + Member + MaybeSerializeDebug, + AuthorityId: Codec + Member + MaybeSerializeDebug +> traits::DigestItem for DigestItem { type Hash = Hash; type AuthorityId = AuthorityId; diff --git a/substrate/core/sr-primitives/src/generic/header.rs b/substrate/core/sr-primitives/src/generic/header.rs index fc6f73b5cf..ec70d5d66b 100644 --- a/substrate/core/sr-primitives/src/generic/header.rs +++ b/substrate/core/sr-primitives/src/generic/header.rs @@ -21,7 +21,7 @@ use serde::{Deserialize, Deserializer}; use codec::{Decode, Encode, Codec, Input, Output, HasCompact}; use traits::{self, Member, SimpleArithmetic, SimpleBitOps, MaybeDisplay, - Hash as HashT, DigestItem as DigestItemT}; + Hash as HashT, DigestItem as DigestItemT, MaybeSerializeDebug, MaybeSerializeDebugButNotDeserialize}; use generic::Digest; /// Abstraction over a block header for a substrate chain. @@ -42,42 +42,14 @@ pub struct Header { pub digest: Digest, } -// Hack to work around the fact that deriving deserialize doesn't work nicely with -// the `hashing` trait used as a parameter. -// dummy struct that uses the hash type directly. -// https://github.com/serde-rs/serde/issues/1296 -#[cfg(feature = "std")] -#[serde(rename_all = "camelCase")] -#[derive(Deserialize)] -struct DeserializeHeader { - parent_hash: H, - number: N, - state_root: H, - extrinsics_root: H, - digest: Digest, -} - -#[cfg(feature = "std")] -impl From> for Header { - fn from(other: DeserializeHeader) -> Self { - Header { - parent_hash: other.parent_hash, - number: other.number, - state_root: other.state_root, - extrinsics_root: other.extrinsics_root, - digest: other.digest, - } - } -} - +// TODO: Remove Deserialize for Header once RPC no longer needs it #1098 #[cfg(feature = "std")] impl<'a, Number: 'a, Hash: 'a + HashT, DigestItem: 'a> Deserialize<'a> for Header where - Number: Deserialize<'a>, - Hash::Output: Deserialize<'a>, - DigestItem: Deserialize<'a>, + Header: Decode, { fn deserialize>(de: D) -> Result { - DeserializeHeader::::deserialize(de).map(Into::into) + let r = >::deserialize(de)?; + Decode::decode(&mut &r[..]).ok_or(::serde::de::Error::custom("Invalid value passed into decode")) } } @@ -114,11 +86,11 @@ impl Encode for Header where } impl traits::Header for Header where - Number: Member + ::rstd::hash::Hash + Copy + MaybeDisplay + SimpleArithmetic + Codec, + Number: Member + MaybeSerializeDebug + ::rstd::hash::Hash + Copy + MaybeDisplay + SimpleArithmetic + Codec, Hash: HashT, DigestItem: DigestItemT + Codec, - Hash::Output: Default + ::rstd::hash::Hash + Copy + Member + MaybeDisplay + SimpleBitOps + Codec, - { + Hash::Output: Default + ::rstd::hash::Hash + Copy + Member + MaybeSerializeDebugButNotDeserialize + MaybeDisplay + SimpleBitOps + Codec, +{ type Number = Number; type Hash = ::Output; type Hashing = Hash; diff --git a/substrate/core/sr-primitives/src/generic/tests.rs b/substrate/core/sr-primitives/src/generic/tests.rs index c095a2b45d..7689610617 100644 --- a/substrate/core/sr-primitives/src/generic/tests.rs +++ b/substrate/core/sr-primitives/src/generic/tests.rs @@ -17,56 +17,8 @@ //! Tests for the generic implementations of Extrinsic/Header/Block. use codec::{Decode, Encode}; -use substrate_primitives::{H256, H512}; -use super::{Digest, Header, DigestItem, UncheckedExtrinsic}; - -type Block = super::Block< - Header>, - UncheckedExtrinsic, ->; - -#[test] -fn block_roundtrip_serialization() { - let block: Block = Block { - header: Header { - parent_hash: [0u8; 32].into(), - number: 100_000, - state_root: [1u8; 32].into(), - extrinsics_root: [2u8; 32].into(), - digest: Digest { logs: vec![ - DigestItem::Other::(vec![1, 2, 3]), - DigestItem::Other::(vec![4, 5, 6]), - ] }, - }, - extrinsics: vec![ - UncheckedExtrinsic::new_signed( - 0, - 100, - [255u8; 32].into(), - H512::from([0u8; 64]).into() - ), - UncheckedExtrinsic::new_signed( - 100, - 99, - [128u8; 32].into(), - H512::from([255u8; 64]).into() - ) - ] - }; - - { - let encoded = ::serde_json::to_vec(&block).unwrap(); - let decoded: Block = ::serde_json::from_slice(&encoded).unwrap(); - - assert_eq!(block, decoded); - } - { - let encoded = block.encode(); - let decoded = Block::decode(&mut &encoded[..]).unwrap(); - - assert_eq!(block, decoded); - } -} +use substrate_primitives::H256; +use super::DigestItem; #[test] fn system_digest_item_encoding() { diff --git a/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs b/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs index a37affd9ca..ec3801591d 100644 --- a/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs +++ b/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs @@ -25,7 +25,6 @@ use traits::{self, Member, SimpleArithmetic, MaybeDisplay, Lookup}; use super::CheckedExtrinsic; #[derive(PartialEq, Eq, Clone, Encode, Decode)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct SignatureContent where Address: Codec, @@ -40,7 +39,6 @@ where /// A extrinsic right from the external world. This is unchecked and so /// can contain a signature. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct UncheckedExtrinsic where Address: Codec, @@ -143,6 +141,15 @@ impl } } +#[cfg(feature = "std")] +impl serde::Serialize + for UncheckedExtrinsic +{ + fn serialize(&self, seq: S) -> Result where S: ::serde::Serializer { + self.using_encoded(|bytes| seq.serialize_bytes(bytes)) + } +} + /// TODO: use derive when possible. #[cfg(feature = "std")] impl fmt::Debug diff --git a/substrate/core/sr-primitives/src/generic/unchecked_mortal_extrinsic.rs b/substrate/core/sr-primitives/src/generic/unchecked_mortal_extrinsic.rs index 5d91556d8c..e15a37c3bf 100644 --- a/substrate/core/sr-primitives/src/generic/unchecked_mortal_extrinsic.rs +++ b/substrate/core/sr-primitives/src/generic/unchecked_mortal_extrinsic.rs @@ -30,7 +30,6 @@ const TRANSACTION_VERSION: u8 = 1; /// A extrinsic right from the external world. This is unchecked and so /// can contain a signature. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct UncheckedMortalExtrinsic { /// The signature, address, number of extrinsics have come before from /// the same signer and an era describing the longevity of this transaction, @@ -58,7 +57,7 @@ impl UncheckedMortalExtrinsic Extrinsic for UncheckedMortalExtrinsic { +impl Extrinsic for UncheckedMortalExtrinsic { fn is_signed(&self) -> Option { Some(self.signature.is_some()) } @@ -158,6 +157,15 @@ where } } +#[cfg(feature = "std")] +impl serde::Serialize + for UncheckedMortalExtrinsic +{ + fn serialize(&self, seq: S) -> Result where S: ::serde::Serializer { + self.using_encoded(|bytes| seq.serialize_bytes(bytes)) + } +} + /// TODO: use derive when possible. #[cfg(feature = "std")] impl fmt::Debug for UncheckedMortalExtrinsic where diff --git a/substrate/core/sr-primitives/src/testing.rs b/substrate/core/sr-primitives/src/testing.rs index 847af9a3c2..cd1ca5cb4a 100644 --- a/substrate/core/sr-primitives/src/testing.rs +++ b/substrate/core/sr-primitives/src/testing.rs @@ -16,9 +16,9 @@ //! Testing utilities. -use serde::{Serialize, de::DeserializeOwned}; -use std::{fmt::Debug, ops::Deref}; -use codec::Codec; +use serde::{Serialize, Serializer, Deserialize, de::Error as DeError, Deserializer}; +use std::{fmt::Debug, ops::Deref, fmt}; +use codec::{Codec, Encode, Decode}; use traits::{self, Checkable, Applyable, BlakeTwo256}; use generic::DigestItem as GenDigestItem; @@ -101,7 +101,7 @@ impl traits::Header for Header { #[derive(PartialEq, Eq, Clone, Serialize, Deserialize, Debug, Encode, Decode)] pub struct ExtrinsicWrapper(Xt); -impl traits::Extrinsic for ExtrinsicWrapper { +impl traits::Extrinsic for ExtrinsicWrapper where Xt: Serialize { fn is_signed(&self) -> Option { None } @@ -121,13 +121,13 @@ impl Deref for ExtrinsicWrapper { } } -#[derive(PartialEq, Eq, Clone, Serialize, Deserialize, Debug, Encode, Decode)] +#[derive(PartialEq, Eq, Clone, Serialize, Debug, Encode, Decode)] pub struct Block { pub header: Header, pub extrinsics: Vec, } -impl traits::Block for Block { +impl traits::Block for Block { type Extrinsic = Xt; type Header = Header; type Hash =

::Hash; @@ -146,20 +146,40 @@ impl Deserialize<'a> for Block where Block: Decode { + fn deserialize>(de: D) -> Result { + let r = >::deserialize(de)?; + Decode::decode(&mut &r[..]).ok_or(DeError::custom("Invalid value passed into decode")) + } +} + +#[derive(PartialEq, Eq, Clone, Encode, Decode)] pub struct TestXt(pub Option, pub u64, pub Call); -impl Checkable for TestXt { +impl Serialize for TestXt where TestXt: Encode +{ + fn serialize(&self, seq: S) -> Result where S: Serializer { + self.using_encoded(|bytes| seq.serialize_bytes(bytes)) + } +} + +impl Debug for TestXt { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "TestXt({:?}, {:?})", self.0, self.1) + } +} + +impl Checkable for TestXt { type Checked = Self; fn check(self, _: &Context) -> Result { Ok(self) } } -impl traits::Extrinsic for TestXt { +impl traits::Extrinsic for TestXt { fn is_signed(&self) -> Option { None } } impl Applyable for TestXt where - Call: 'static + Sized + Send + Sync + Clone + Eq + Codec + Debug + Serialize + DeserializeOwned, + Call: 'static + Sized + Send + Sync + Clone + Eq + Codec + Debug, { type AccountId = u64; type Index = u64; diff --git a/substrate/core/sr-primitives/src/traits.rs b/substrate/core/sr-primitives/src/traits.rs index 5c568460ee..809c617218 100644 --- a/substrate/core/sr-primitives/src/traits.rs +++ b/substrate/core/sr-primitives/src/traits.rs @@ -246,7 +246,7 @@ tuple_impl!(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, pub trait Hash: 'static + MaybeSerializeDebug + Clone + Eq + PartialEq { // Stupid bug in the Rust compiler believes derived // traits must be fulfilled by all type parameters. /// The hash type produced. - type Output: Member + AsRef<[u8]> + AsMut<[u8]>; + type Output: Member + MaybeSerializeDebug + AsRef<[u8]> + AsMut<[u8]>; /// Produce the hash of some byte-slice. fn hash(s: &[u8]) -> Self::Output; @@ -365,6 +365,16 @@ pub trait MaybeSerializeDebugButNotDeserialize {} #[cfg(not(feature = "std"))] impl MaybeSerializeDebugButNotDeserialize for T {} +#[cfg(feature = "std")] +pub trait MaybeSerialize: Serialize {} +#[cfg(feature = "std")] +impl MaybeSerialize for T {} + +#[cfg(not(feature = "std"))] +pub trait MaybeSerialize {} +#[cfg(not(feature = "std"))] +impl MaybeSerialize for T {} + #[cfg(feature = "std")] pub trait MaybeSerializeDebug: Serialize + DeserializeOwned + Debug {} #[cfg(feature = "std")] @@ -375,6 +385,16 @@ pub trait MaybeSerializeDebug {} #[cfg(not(feature = "std"))] impl MaybeSerializeDebug for T {} +#[cfg(feature = "std")] +pub trait MaybeDebug: Debug {} +#[cfg(feature = "std")] +impl MaybeDebug for T {} + +#[cfg(not(feature = "std"))] +pub trait MaybeDebug {} +#[cfg(not(feature = "std"))] +impl MaybeDebug for T {} + #[cfg(feature = "std")] pub trait MaybeDisplay: Display {} #[cfg(feature = "std")] @@ -395,9 +415,8 @@ pub trait MaybeDecode {} #[cfg(not(feature = "std"))] impl MaybeDecode for T {} - -pub trait Member: Send + Sync + Sized + MaybeSerializeDebug + Eq + PartialEq + Clone + 'static {} -impl Member for T {} +pub trait Member: Send + Sync + Sized + MaybeDebug + Eq + PartialEq + Clone + 'static {} +impl Member for T {} /// Something which fulfills the abstract idea of a Substrate header. It has types for a `Number`, /// a `Hash` and a `Digest`. It provides access to an `extrinsics_root`, `state_root` and @@ -405,8 +424,8 @@ impl + AsMut<[u8]>; + type Number: Member + MaybeSerializeDebug + ::rstd::hash::Hash + Copy + MaybeDisplay + SimpleArithmetic + Codec; + type Hash: Member + MaybeSerializeDebug + ::rstd::hash::Hash + Copy + MaybeDisplay + Default + SimpleBitOps + Codec + AsRef<[u8]> + AsMut<[u8]>; type Hashing: Hash; type Digest: Digest; @@ -445,9 +464,9 @@ pub trait Header: Clone + Send + Sync + Codec + Eq + MaybeSerializeDebug + 'stat /// /// You can get an iterator over each of the `extrinsics` and retrieve the `header`. pub trait Block: Clone + Send + Sync + Codec + Eq + MaybeSerializeDebug + 'static { - type Extrinsic: Member + Codec + Extrinsic; + type Extrinsic: Member + Codec + Extrinsic + MaybeSerialize; type Header: Header; - type Hash: Member + ::rstd::hash::Hash + Copy + MaybeDisplay + Default + SimpleBitOps + Codec + AsRef<[u8]> + AsMut<[u8]>; + type Hash: Member + MaybeSerializeDebug + ::rstd::hash::Hash + Copy + MaybeDisplay + Default + SimpleBitOps + Codec + AsRef<[u8]> + AsMut<[u8]>; fn header(&self) -> &Self::Header; fn extrinsics(&self) -> &[Self::Extrinsic]; @@ -458,6 +477,13 @@ pub trait Block: Clone + Send + Sync + Codec + Eq + MaybeSerializeDebug + 'stati } } +/// Something that acts like an `Extrinsic`. +pub trait Extrinsic { + /// Is this `Extrinsic` signed? + /// If no information are available about signed/unsigned, `None` should be returned. + fn is_signed(&self) -> Option { None } +} + /// Extract the hashing type for a block. pub type HashFor = <::Header as Header>::Hashing; /// Extract the number type for a block. @@ -516,8 +542,8 @@ pub trait Applyable: Sized + Send + Sync { /// Something that acts like a `Digest` - it can have `Log`s `push`ed onto it and these `Log`s are /// each `Codec`. -pub trait Digest: Member + Default { - type Hash: Member; +pub trait Digest: Member + MaybeSerializeDebug + Default { + type Hash: Member + MaybeSerializeDebug; type Item: DigestItem; /// Get reference to all digest items. @@ -539,9 +565,9 @@ pub trait Digest: Member + Default { /// for casting member to 'system' log items, known to substrate. /// /// If the runtime does not supports some 'system' items, use `()` as a stub. -pub trait DigestItem: Codec + Member { - type Hash: Member; - type AuthorityId: Member; +pub trait DigestItem: Codec + Member + MaybeSerializeDebug { + type Hash: Member + MaybeSerializeDebug; + type AuthorityId: Member + MaybeSerializeDebug; /// Returns Some if the entry is the `AuthoritiesChange` entry. fn as_authorities_change(&self) -> Option<&[Self::AuthorityId]>; @@ -571,10 +597,3 @@ pub trait ProvideInherent { block: &Block, data: Self::Inherent, extract_function: &F ) -> Result<(), Self::Error>; } - -/// Something that acts like an `Extrinsic`. -pub trait Extrinsic { - /// Is this `Extrinsic` signed? - /// If no information are available about signed/unsigned, `None` should be returned. - fn is_signed(&self) -> Option { None } -} diff --git a/substrate/core/test-runtime/src/lib.rs b/substrate/core/test-runtime/src/lib.rs index de678e7205..5844ecbbb9 100644 --- a/substrate/core/test-runtime/src/lib.rs +++ b/substrate/core/test-runtime/src/lib.rs @@ -24,10 +24,6 @@ extern crate sr_std as rstd; extern crate parity_codec as codec; extern crate sr_primitives as runtime_primitives; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[macro_use] extern crate srml_support as runtime_support; #[macro_use] diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 72683d7e19b2af43325f7f1ec1357721881a4c0d..fe88a3463d8679758db6c75f0f567cb6d335816b 100644 GIT binary patch delta 6689 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 E3q7BAHvj+t delta 6841 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 diff --git a/substrate/core/transaction-pool/graph/src/base_pool.rs b/substrate/core/transaction-pool/graph/src/base_pool.rs index 21a52a9750..e6ad3cd6dd 100644 --- a/substrate/core/transaction-pool/graph/src/base_pool.rs +++ b/substrate/core/transaction-pool/graph/src/base_pool.rs @@ -23,6 +23,7 @@ use std::{ sync::Arc, }; +use serde::Serialize; use sr_primitives::traits::Member; use sr_primitives::transaction_validity::{ TransactionTag as Tag, @@ -79,7 +80,7 @@ pub struct PruneStatus { /// Immutable transaction #[cfg_attr(test, derive(Clone))] -#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, PartialEq, Eq)] pub struct Transaction { /// Raw extrinsic representing that transaction. pub data: Extrinsic, @@ -120,7 +121,7 @@ impl Default for BasePool { } } -impl BasePool { +impl BasePool { /// Imports transaction to the pool. /// /// The pool consists of two parts: Future and Ready. diff --git a/substrate/core/transaction-pool/graph/src/lib.rs b/substrate/core/transaction-pool/graph/src/lib.rs index e41284efe3..2c456aac52 100644 --- a/substrate/core/transaction-pool/graph/src/lib.rs +++ b/substrate/core/transaction-pool/graph/src/lib.rs @@ -33,6 +33,7 @@ extern crate futures; extern crate parking_lot; extern crate sr_primitives; +extern crate serde; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; #[macro_use] extern crate serde_derive; diff --git a/substrate/core/transaction-pool/graph/src/listener.rs b/substrate/core/transaction-pool/graph/src/listener.rs index 1947bfb93b..d4645eb2c5 100644 --- a/substrate/core/transaction-pool/graph/src/listener.rs +++ b/substrate/core/transaction-pool/graph/src/listener.rs @@ -19,6 +19,7 @@ use std::{ collections::HashMap, hash, }; +use serde::Serialize; use watcher; use sr_primitives::traits; @@ -35,7 +36,7 @@ impl Default for Listener { } } -impl Listener { +impl Listener { fn fire(&mut self, hash: &H, fun: F) where F: FnOnce(&mut watcher::Sender) { let clean = if let Some(h) = self.watchers.get_mut(hash) { fun(h); diff --git a/substrate/core/transaction-pool/graph/src/pool.rs b/substrate/core/transaction-pool/graph/src/pool.rs index fe1f2d2aee..d9b4b33f36 100644 --- a/substrate/core/transaction-pool/graph/src/pool.rs +++ b/substrate/core/transaction-pool/graph/src/pool.rs @@ -26,6 +26,7 @@ use error; use listener::Listener; use rotator::PoolRotator; use watcher::Watcher; +use serde::Serialize; use futures::sync::mpsc; use parking_lot::{Mutex, RwLock}; @@ -54,7 +55,7 @@ pub trait ChainApi: Send + Sync { /// Block type. type Block: traits::Block; /// Hash type - type Hash: hash::Hash + Eq + traits::Member; + type Hash: hash::Hash + Eq + traits::Member + Serialize; /// Error type. type Error: From + error::IntoPoolError; @@ -287,7 +288,7 @@ fn fire_events( listener: &mut Listener, imported: &base::Imported, ) where - H: hash::Hash + Eq + traits::Member, + H: hash::Hash + Eq + traits::Member + Serialize, H2: Clone, { match *imported { diff --git a/substrate/core/transaction-pool/graph/src/ready.rs b/substrate/core/transaction-pool/graph/src/ready.rs index 47ab34c7fb..1a531b3f49 100644 --- a/substrate/core/transaction-pool/graph/src/ready.rs +++ b/substrate/core/transaction-pool/graph/src/ready.rs @@ -21,6 +21,7 @@ use std::{ sync::Arc, }; +use serde::Serialize; use parking_lot::RwLock; use sr_primitives::traits::Member; use sr_primitives::transaction_validity::{ @@ -120,7 +121,7 @@ impl Default for ReadyTransactions { } } -impl ReadyTransactions { +impl ReadyTransactions { /// Borrows a map of tags that are provided by transactions in this queue. pub fn provided_tags(&self) -> &HashMap { &self.provided_tags diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index d1afc82c44..8a982b9ff8 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -226,7 +226,7 @@ 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; +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. diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index 355963104b..231ddef3f7 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -606,7 +606,6 @@ dependencies = [ "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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -624,7 +623,6 @@ 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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -642,7 +640,6 @@ dependencies = [ "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", "pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-sandbox 0.1.0", @@ -662,7 +659,6 @@ dependencies = [ "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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -682,7 +678,6 @@ dependencies = [ "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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -700,7 +695,6 @@ 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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -717,7 +711,6 @@ dependencies = [ "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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -737,7 +730,6 @@ dependencies = [ "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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -775,7 +767,6 @@ dependencies = [ "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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -791,7 +782,6 @@ 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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -809,7 +799,6 @@ 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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -827,7 +816,6 @@ 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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 4fbcc974d009df0e7d334462296e80ed16a01032..8d53eefe478c3428a332b27b469e77d4e4617ef4 100644 GIT binary patch delta 69043 zcmb?^33wF6*7j6&S7(yUB$GWMTTeC;2us*EB^`E977<01O+X-`q9BS}z>A6s7!6P; z3Q#BH8YuQ@mGEOBUwc7vONQvWaLH{93 zaE>Sbpi)s0p*M};3HVRL|85qIG{ap{tmh`VndWvgcWQi^+Z~_ocJpvTgIC<67e^eM z|F$c#%w-*$U$I>uIR0A}Ir{dg6K=U};?#-brnrtV@3=e1jk$g5xRKXSx@F9buJ4%p zrg2k8j~zXAwCiW)n|L$eMo*eJC7AyQiyl3B@}%h_L6O@g-aKXE7}uXH>V}CohXS2t za?rT&_%hcy7CmOdxG^`5oOttuakq`TdFm9`Uo7&r(KnC1<))ES#*G{6y1?S6p(xrL zH*zX6ri>mlb>b~IyJqn4JDAI2ktM^e%Wk>u#z{9n!luq+LtbPrv469d*$TFjtzxU$ z8n%|b#!j)xx4y&2jvO_5-1B@9U&5F1XZWL?_yYbgpUZdfclkE{HebPC=3ntI`F{2# zJHWnT@ALQgKK>bhfY0Lh-Mf`<;d}WZc92DspQ`F>+{EIm&u?-0y1OF1F6+YFYL}Je z(_Iy}`?{2+ncVV}=5rUG@#^XFrSW2XCDWJ1dU;)@%i_LtB&7uaGVpGeW^og_%)=uA z!2TA%6&V@1P%ym=wYsdX{ZJpH8mIcwqa)=LV^~_njO2)l1>wK4^op2>l&WPBeVKmT zV1_jNund-7)hVWsA#ZX_qpF#)&uA4NhRtDS#W44|iXS8Ap!nUM(`-rAWN(;Om67;- zWJONaw?epl$*ziO|A>mn?5`{KTQTKYK0Gst&Z+ z%EHIHB2C>ieB-O$D1J+;`lxfXRyDo*E>?Bu(yv%WMYDHUyQ*uNKftP16iqQ=2-+~i ze9lutsTLic)2g26cb-+;Ht45{$1Z=JRaNxqKbTckJ=4EC=gT)%92qzyZpPfLu6Eo9 z^09V29*^=x75xTfhRsI0Z-lFA)D^?s?9!^YhJDCc*Qz?MqG)Vy4!FC=7P3VZ zFO6-@N-Fk`y(Dw?*)1;9Z3`UFan`e9^c^c% zc~#V%r5@Hx9*$;lRdZ$)d06kNx5}Gx)~D+D6Hjs0x9WiflCypl>5KLfmZulx@t4k3 zq&?XdXkPJTtC)Tm_JKVx=xII{X}0uTUa{cG8`18!n|fKRpQUzwdbTV6ws_9M-&>y>%C4w*|G9KF zxa!z*f`LRoKA(wg{-cVauVoO7KcMp6^sqhzEvn(bimy-CJ9i#I3E#)!K2&MFY3I-GY@= zEqyyK4ue?rXCJ)3jlU-q7h-ddQR&L*$$hu-0%QrJv2CqJ6f0e<)jXp2U*h=#? zR?XK97aVzPEuz%8Kx*hmIb*CW+htX|Zp?D!kPL23gY2?iku7pro49j_98m&EN}|Mt zv5`*>Hwuh7he?*m7jjv1Hc@_(%NpmDD@M`5PBbj-IN_~02k5s)rQCOo%T8;`=4y!n zwsV8+{0s%mQnbzF;kK+_TxEdYxWjLpn(W$+w}}%M4d)A>3NRD8Z^3YUjnSE@oe_yxAD{c03s!IK6^~#Ke$r z$T*seP>*=0nJ=qLSR1}!hWxFB%rpVsb`usgHey% z;6ao5E|Ud4*hp4tKiq>os6`I*6RwI&qu zG~jxVvLKkUH+*UG&7rKN48M$J102N$$@?y2?*)sFxSU!0NX`p~C9>5y2JLH4` zEDetb2Czc@y^w3K=J6HHVm#<;*FG#W*jI_Zu8?Lwwuz<5ullhrqL|w0uG%>{3hhjjp3y7^ zs1%J>Uzd+&w;{25G>ea!hT6k=dAUa;!h%lno6(TFUmJ=Fa`JV|3o?LR^l9(x-FQ?=a-bVjhoFt@M<35i_KKd){w*tC z(Gz*~V{*tC%nHTw_sDtU*^&Uu69;vY)qPm9TzfeiEB~0l?zMj!$FhjUK;wS`wgFtm zfX(z$wvqiy-nt>|7B)*B-VioBDj!3)$5o1+L8#=*=Ko?{?dg-)m5e!Wm~r$7W!fw6X6toh#>3Q>oG^p^%Kl}Kmp2bi=wBxeT0~qYR z_p^TWx^JWV71Z;sv)DZJe9!}I67~G82iaEieC9*!Ieek#rrmuun<%cX-WcfG9+&0z zrGO6qCj_zed91CbTnXiPK-8+I-S=_!H3y?No6p*@82DYLtG(vdib*dl#{`_Z0AjXW zKDB^tF`iarm!lW5UTt5+dpq9SN$Rx=Iu?cdbWYfdOD8W8Mwpa#koF`elOjyLaW(JZOXPjGzH@pc%@^2ZK`T~+!Qp}xYv26>^N@u%`$aZBk3C_Z+{yl8aT{O>wu4mV8$81uAV53iA#7pF~Pgr+=S$iQQ z4t~zu7r*yK(wx1R*cI~dUe*tfW}m_)L)D+M&Jn<@nxueFeNXmQFq1;C$#o}K z3wiHnn1L0t{4;hZ9^v~~UylQoOi=UX<6i)1-agi%K|E`_(?PcQoZXHpj(uK>EZ&D9 z>A^2*lkh$hN$xM%vklf*OU5y>=YCcU*oXGB5>{cqzn^Vpcs_D~MgG$e*cgJ;h5po}A<=L-UpFpyrYLP?KvLh@Rl`cAh z*;OG6kFt)z;lq1h`RJ!CQqDZeE@Iv|e5(>K zdR!_G9b>v&@hwXX#i23b&{CfNmK8VHqX32PIL4Nu@}%!n<#=?K&wR(GBWcxfmGpOy z&hozR*-e1^;d=##hf4C;_x%9l2^ptOu+9sAV$sekbz#zvY$zVSpHzw3M;9r70*iN) z`+s7s>i`5g_smJwxxrq1e^O1P*i)=agZa+5*$7FtPrh)Poh_s3 zFW}LU*>la(q{o?iYb6=iei70~+|QpI`r5!FMH(wV?_cXh1laAqGXr zE~5BRcYDNdn9+g$n~pewIZ5K^@iQ>+O62-8Y@!Nvg;PO0{}1+J5T0xVh_6Bi{_t4^ zZ=7Qj5Y>^B&#`R2;hbD>jx|L!Th6goDMTz)jUraS=~2~s&a-O+QnDAb&j`Lov)5c; zeGGefIKL|3cfgQczESSDgPZO-&mg?uvnpkg9u^@)NAR{mV?=mz(LPLJM^8LCHbIG3x?F zH(_j(>|7#;&*CZh6b`M)KS%k{&OU!2HS*EM8ZTq_X=N3opPD2;AI{VBV27g)H^Qa` znk!2$;a5;3luT+Q`%00B+8>r_BY20T8UrKvg4#7-dd0cKM)H9XJQe2Pvmpl*C;m25LXFp;vR(sh@YikI2p}Mc~ewnbeU6BB?{D6G?I5t zxHwA8;H1nP$r}eSfeHTRNZ!7mW4nPf6uuZR_0Q?IP;HtTMU;d6_7F**X8>raDByyR z=TKs<>^h3)wj<2{0fYfib)Q5BFG(kc(e8_aRa9g~L^ws=7%QNj zFVBwUYn(=snMK-+w5s0}=uDu1*O(AIpN%F)E{0Ne!jps%2 z=?+hU&MX`ASqD%#!PF)u4)a5M_9?e`j<}9z7Kk~jwymd4YLNCnza!erjEw-VR&DUPa~Fh*@3(xM~Dny><5&CwJXj~aC`cQVfy z<@mrD=2{mz=u6l5$u%!Ez%|Sf6szBj(Ziuu67fGm!{yqIS#J1YZmV3bp2e?;4#dmD z1Mza1_yE6~EtgL`z>A{4|FgKg3&BatRp2`MXR$1Qkf+KM5Af>&Fz`VD{22o9ivv)G zJl{inD;^&|#M?waa<&+8dZ&*2&lbzX*?b=IUYL!%`5}38kaui06yS0>;bG)GeYUpk zg~(g+Fuxjk+9Sw&IV5ix@_IhPA4J}Vl(#V??-k_v9)(_CE^mAkdGCkhZAISdM^(AD zbNIXj$01t_JAq7^SLq2Orfe>xM~T$u@*DmcV#QoEv(7f=@wMS>owOx?7+##U2*nZA zzv)T-FLsqY^(61`&()MZ#mB;R-Tf4A8h0g#=JCvX4vo}4%FXJpshF9|DEX?ju$)hz^W%qub_t(3+%?vXG3u0DTX%+~ho6MVKX84#V zE7DqX7#39lOg6Liyz z0JS2Jy%wuG5%P<5yeG4z{}ukCai*F~XZhhPe5h~&Pfe;Y5^g!73U*ecysHXI$}Km) z%G=80Rs0j@eV7mJXPY^etJiJb2-EAU3;5(~JdqzcEZ4opx3Kkc%6dLT`_I{G`N4YL z7vY0MoB!7b);Rwz--*ZjJ9t%ZWMd6SQ&j)oyzl!HD;5aK`5NQ@XAx<%oD}<=_dulB z&?*8M8$RG~iL%g)|Eu>PE&&v3aDjp3qF5X)^I@qi#}&EV{`Dj53Smp+U!U@}lm4#| z2(9PukdaG2<3DADLWaHvXtZ)4Ph?F(Gyd-Vq@ut5!{`5h1!Uoue0ab`qsSbl;dOXG zJUttyHD)FDwlDejjJ+w>e#N`sal&~tIiS7{AK;1d-UB?($tm(&Mh?I}71ViCBA1F} z98`~MoyQ{Qu~$9p*h834@T?y^3`_KJ`NCn?NEP;f4)ZWK`FVex;5p>y!AoueTndl# zYgq&7UwqFWrCM${!53bfEeHI_2M3Z(gIovH`2LTuc}wK!ANd$2<MeCN~d4~#QSxv4SQ!z{_MvG&c-K~D&={ptmzijULC$|{c2`ZvVC0Wl}vi_`wg zrpUGN+RcAkRoeuTh;n#>R$WL$(m@n@2BJ=m(1k$bgBg3mo|>cS z|5UrIYOGBsercYsH3`U_9C=^977zMX|uFH^b7HSEo zsl18yb^}~llfSm<#raPcYVDk&etEi3o6?tfrdD!8!2}hH6Fe=0NgB`!^nzTPu`p8u zGuBZnupYtt>zZj_2P39+iS7)({eDZWl(EO{wym`L{%N{>*IN7N@1)1ZwwfthwbhCm z=sD!Bjr=rL;LM1iz6!>JgSskBHprsOHNTu;X+7EN@?A^2E|}D#L|f{-7uZqVwEm1e zW)JVKH4l_&Vz2M1&0>J)+*|9#4{emQdTU#q0!{2&`)F;c!1BJ@!zf^*kp~&uC^z)i z+Ov)J$^P1gU_BD`WXO#ZwMhHiAgx~@xrdy4rM3(uS`E?GI<@B6;a6z~s72J4XGaZ% zI&wbz@}q0C?f_0429!41i-&1jj3C^9#clWnp;oT**ls4VkeTB1BM zOWTNYOCHdA#<17zZx(9f65tf}TdA#Mwtar3)|In|>`T^YJ3w{`vNy8LS2Ul-#@j`& zX?cuq#KtY`+q5UG*ZK<7Zoi>@ss~0m*^%31o?#YORs-)6`C+wI8W6`DW-te0lX?M6 z|1DZ8z|7pD-4q)9$DX#}Y6i*Pu&ofW6?W6D8dgfD$PRC7cLdzzYPVD2HhQAIZEq`0 zaq?~LSEXGdloj#gHf?YK#Riu!roW?Yf>>*}T^oYOobB4Zs<2wNk+JV;EtyAldl$X0 zlqPe>%lqEdx{h4F5zbX>@~yrzbghiv7m5E7K{<)dbqo;{M%yD)Y#!TSDG*POf!1qB zQ7p;H^?C605s*m%d%_sfiS(1TFT9G)}N{^Qj|I&03CA6>NX-l{&fvc$8Zv1Z4fqAqct8?Y~?x3 zdXGGMPK~$UXT;0Q^RSK{mHp3aeF$vxyV|9I`0HJ8Wu?s8p-o`#*pKc&qOo1IZ|{Cj z>#3te;x1J3s=Q>E_5mK@yCD-FmE(591bNh+yBoGv#5${Ip$80<16D^rzzhRS4wY$;4i=S#E zQM2)xc8US$%s#CEnOUD}x7N0!Iqkgqxt56vKKWd`lmj$wKMuDkkENV#i z?c8sF%Jl+`c@`R~Qoo^hl%u%b)q$jTws1Yc{&_M_<=z^hQQJZ|mIe*kc?vI(@4NL@ zD0beh=Yuj^GQqK(!u5_$QX@GpT*u;+l;JR|L6O(P_0Gn=Hz0+g<(j*&TMoUrOLPMC zRS|k7Rgfd%b;{L*o35HnvObA)XdPcwGTE=E%Rf9i>A7gHKDag?p*|on z*{kQZ_Cox)dif1n^b{qoE4;cX2I5nz*NxB~z30_)qgFf?AWuk-GNSY@A$Ycn`hYNs zufa%lre$M2G6X11hDGbyQ3vZn0{13$fOfMmA)k!a3nM;eusZejTDc};qV<&eB|+Lu zxj9CUX>0%vx}_XDn?vOMN!_{_tHwS6t9a)xiiW;Da+XhT(ZFCdb{n)-CkA@u=q7q< zR1KGekfC#o?g=8l)~{#CyJK{-J_~>rjlt|6#psz)r{@Nyx>LzTogWsfH>r=yML<8s z>fNH|ya|HSw#%BDGUWwR4|mXsmnTxeXO(e!UiUgo8Zx^7Kd&+(UhmvMn}MMVG`Bup zzdhg_X^V2JbiY28nw0%oPJlX_MR9XxUQ z-j=r}>eEs`Q5wYMkD=Uh%};DrjkvYXw^#Bcy$#zd+b8K$@K}+gU&%gQn2hPRSEeWH z9r#`*Cnf2oydznk$v%~TBPWt;X`HUyw4#xZTGAo!?S5BfKWmNu6>i@bB z4p?l+)RUrC6YBLC?ypQeH`qx|$|Ke4qO4J< z?UUc;0kelU1GbjK09zxlXgd-Ws5BdHc_(-a!9SeJkiL9;GX5 ziXU)8vOE;2grlN@-c+B?mu{A2P4)J$4(z7Nya&-7Uo1@Gnf-zd08|4k`T~!_(Uc~C0B#7C6k)#{Xy~@n(KaQ^Wo-tTU5BY zIrg^ilwUR1%WH8ab-h#G-9j(+e9ladH{27Uto_X!(1C+3^aPkU_HQlp6qZK$J?P*@ zG@TG+w5o4?NFu233dZr2y^C4rBmY5D?Gv}&5}MMd@- z)AhGJ4bUsqF>EcL8Hoi~!(Q{CzD&7-<>i=wQyw4|udV+l9QN6wKJXX-Hcxi2cUjY@3O@7B7)jJ8CsWjcP z>s)YYrL^YgBdFA~bMy|zR#KfL*{3I66yZh6!8(?D|VYF^xZnP7U)uc#sks#-1CrK`{aku>*=vuA>|OxP^Znx@qxXT=bqPZ z;B34c^P=9lB?VYh%v_4*TRR9Cl2-w5z=wr@>f@!F9DCP`Iu09G$%+3)=MTv8e`7S4 z%9a1t3$P>O(|_wYs4ZW3S?|T3l_y@-yWy*7MG!LHZK%zrzNK>N3QXuKxpswKlz!l6 z@QUWkBA-47RvR8>7Ghast}T^+t$>il%2-U3?6SfwvU;&ZF? zevl47u7bHm!*^zlem#<}U90ESX~W~R;m*P)U#E>FYZW$Mtkrt}Z*!gAgzs1&KDjaof_kvj)8L_|m8;~2SM;DQ!GAFg)cXsFQxaV+7(bjG~FE|KcP@`Km(iFK;jDXsOOI&Aox)+;2QSg*HBrD+d; zU&Z*aC$c~@osgFg%Jj&3y?``iluhuM^(pc)TgR>(xz^U>o1-y6!RH39G)>6uavVA3 z&zV-h_X>0XWyp(%Xo;7@H|R<7tgV~glZUEZ2s_qxG8NpZeE1+>-{cU5Q|DDe!4|5J z0S?&Qx?ah_*w^*qEb5feP^YMB@EEk?)YtVM#`D!^Ji(D{i1R@d9(r9*f_^{qx;`+W zoI-SnP59ER`Scn^uN8x0lI*D)^>+>MeU~kIHfHFkEi^;zd$#Bwu(V2uS6q956<8De zL-!u+Fc3yXyT0Rc%-i}+tgZa$ZCy6{9-~#D&0tyZRcT?7z(h&eJ-#30{oC}r*mLsy zHvP4(n_eL%J4wfXm#NnsL?BeXlb+6s_#V9CJTan7%0cl2tMSHBO!Mak{&>l1y5W#=Q-p9RjM$sZ-VexSFCxs+1fegwoZ zCEyEPD)0Y5-^rrofSvj{g~SZ4)B+N6^G^LcW5y;DrE>L$dP?)kH|QPmb5HPPL-6Hf z;J_Mgz`$8Gl`4PzQ193I7~UPa(W$A^L_cR})Z%S&J3fn&oKs@Q1YR*&f1oFhPTjpr zza;u3RW<^(E>f7-@9xsE+Vzm#YL9-2THhQ7cBgp0Jaj})ZlR5fX@Qw+R+K$iGYk6cgwhR)JeEgf72;#5}*aEnEYi8u*`{tSst2kBmB_=S1zLXb1(K zH>glW@fm$|1ioGZLNt(T&LBov15<8LGrm7yd3a^}Kj12EAtQs_N)$j=N4Ln7yTS#< zwrDv+R{jA-Dw3Q2&@1ApoVqgGb}Z!(x`@b=3e&IbKP)o_?BE)elpL(My{Pv4FABY|nQIy+|i`}9%)^vBfMW3ks1WOF$5GpTRv_n5toZyFWk&cMJXcYYu z0Z|lO0hzL8IF`L;{GmdPLC|Sfz#S8THGsd@{fi^TOMvR`5d%1$^P|M?w3Tp=CoX4i z*-PTYK{9sjvP3bLgDl<@aUC9|DI%?YkIhDcVmg~rM8|)I=-o)g7`j8wUfg>c ziRHZ#ZDyI-rfGWc&+M0~F1pFaes3HL%l2oPQGPf1a{*xZi&^MuK3Qh@ zlK|_FGO^TB28-WhCY+G@2)39}?XUtGp!jZvDWZrM<%Di#Lo8w~I6R>Gm_-R#4-Oih zPJ$Z&?;r#%5FgXpYmoNIz?t{(;vl#Q$AKCtNp8>QLlryYxRX}nli{!-M1*STBpo6Z zd$L7lZv+`&NV$M8#(AfXuHm^uhhe1zAi)OL(aDO~07YQ}))9_)g3(D8dgQuPks3Jl z4JVXaWj(!2-jpHym%J0?F5H*a(@Qw56{Th#UAjfr2YDSMMJ?z9b*Flz4?uda{2)W5 zLZE${A#%$wF5nG^U^^7Ag%FGq>JW?)8Y0*ZT*yKD>A^R^1q5+03gClrscA;BWQ11$ zk~WKXuyB@J$vBU5oq=fvt~IC?mu8rn5rm`at{M|LFH@wnrIi5(>);Ru202R&j6%Oo z4rre(_h*VMYb(wJ_8Y!Y=W#PU`_MUav>+n4<^hC2OgB83g*hL zrbte!-N-;P0mRA*wC6RmW)`bzszU{>+E zFNaQ^q+yccjxMB`*x0WoX&NS}Ge?t3t)nza(?Tby2u#wxn51+Bl&6L0=}}EMHmw72)bxU5IzxVP|}p2t)x!`XiQSm`A2xm;W;9$cil-D^t~NzL415n z%`FlmL5`(CDK|)vV-V{aGgqMmWzvqAdKK5$1I~nRu)f;bDAtI7LFuwPM`U|~b;m$7 z%h5R^xpysgA#4i$QnPpq9>MYqiJ~v}M$1|G z;u=5LQN>T7hys|Oqn2r@%&AiP^MP+tfuKDHLCe}PaOE3hN5#rf1)@)jOq6hx2hLL| zwuZj)H>Omh)Q_vTtZF<9@Z5xFp4?X;hO%l|)I{`Saq`|Kq7S~_Z6c;Lf=O3117d4t zK&kchTzO?v(Iz(vq5}HbZ|35kANtx)>KUn|p8c3bxjno|a#d59UkUPyrlJU9%2O!v z3%wXUe~siIgrR82)WEi@#`xpgh?_c{S(qS46^bMTmG3MR zg_{J4;(BFuaT$qZwh2%be>OoQ4B%I|( zMFW7gFVpwxU&3Ao3Ex zNZM^hfrHDAi?Z55g?sI<+KJwbMca8D!~vdGYq5k3lo}Ec((EjH{{7u{5ww$8vu5DX zk-V*o$cmEdz$_H(I)vSaY4W))!Y(^b=LacxsM7Gnkr3b2WNTvccfLBgMLBm_)l``F zwFUwAAo&+at$aR^{#+Tzy35*4kYOQ^Snl*4R*=03k}hs?>ilY5Sv}BdfF4nx#RS^D z2J{3~8Xi(@;pPqg4;Jq=CCdY5C&m!y(HYxaf`2Wt9ZP7qI}rG z6nakXu>>tsoU}v>zN=FDOTRzpcm}438FTryLgoSD8K41l7j(Z!W`i<-b1tn9%>cjvL2$biQv2L zNJ3>E%&3uss?R7<(L;q>-tQsi6Xv6O3L6SCxfenbYBBgLd}Z`j!KNO)#nc2$7pokb ze!x6##60ovVM$^WNw z6qPJ?RsBWZ)pnmN#N(W;kzZaZRt3;ZgR&Ak*9c34c*g31f z(1k94V#Vljx%MqrAwGkX3guUeK`hl-hHwW~h=_mT_$b;Qm*%=gPyEn~UT#%GRCwfwF#>xy?0<~`)!EZ>{aBGjTKbEziWPn1L?hFTDE3?OmOAt5TK29|E{Bhbjn9r;~PA|Mc407Mk;Sn<5zwB#n5R9>B)qOR&~RlC-n}yDb9vp)!i?27C2zaHB;a zJK-)-&BlliGUE%^tnyQ5ScPZ21`XN}k4t*<;iAB4#}N6b9>IdFYcczs%0ydEWWQt7$u-hR_E_ z?^GY28?BL5L<`6k^M`vn*pFoJZJ{Nz@yifazF&CS*|=P455tuj1GD%9EPK43#jnnN z2r)mQ;tF_4G_eBN4%U@cg0RAMXou>)a9p;{<}E>}8?tc`kVh`f=DEx#-^u2gjb}qj zIsE#dS_$;x)?A+E14oeO zrCB?miF_8kQd+{gs~1mmr_u`EP`_91?!%L!thyvXVG1qDT;4J!#Q}_>ST5a2wodNL z#pNE&WRE<4ouH0#ncsu=l_&G~l`KZCxr8TCu2ob zrDm>u48d%KPEv6Ipq zL(wF%MDs_H0ZbO{R=Fjg?@2xFcZqy99|EM%RPlS5)>hy!lT~_r=Hl5dT1>GOfi%$lgEfE|HWwm^Bpm$EZS0o zUeLI<*LoA|Wq#aoEcZ0y@jNDyMrp9@*qnQFfT#;WK8;qb2cpA>^7lpxRFy+Y~onk#F7H<<4u9EKwyB*dxe`32nO2u_A|jUz%!rs_Iq&n*+nd^LAl}swIDu9x;#7(*!Li?4<9`Mh7iAI zMhil-m-NVd>9rWKpXrW@B(Vd=x&#~Y76;QL1O3Arw8`XaPJGKyvd+l|0S zmUkHSR84n~lme~v3nPK%oOB#xi$glHgJ@8?Y|)a7w0LA7KZq>43`?xNHWb7X@pZf+Spp89o3(kO=uvOWZ#bAx9VS>`rlk<`o^{oex|!<8>iQ z7l{tDX<3cb;E}{x?nN|iIraQ9uSdRx@&ze~4Exi}6l*rN&ZUEEGVp(i~3kd>|Y(4^#k-f)oAW9m0%g;Dzy zAO}ozYu*pR7eX{EF@Uv0H0U?lN`yy(ysI_uR1ixfA>yitGg|ODff}qF(dZ|bUWW-{ z7PImv;=9k<9XL7;6|g&o>&EeimAl57t9Oi zHvF~p0pX<G(otT(Z`!BUxHbAZLTx4 zn3uWeZ3YpYJ25!?0t+HwfVH%#@EG7TsOboi5l4H^{BblV2{sOkHIV=%K&l-28o=mC zW_zq}#>wLLxJf2XUfrH&;c-`cNQpSPsXcF7g6dV7cx;hCKoJiYRS;*IDmjq^S`x+q zwGn^NWfP_TEKIK?#pxb1QMT^D{VYii>A+916xpjI{~#jXOd<)8h}^VJJS`;wm%Ibj zXn%&80Q%7CcP8~SP7dnCs8M>x4@?mdNDJd?d6LnE*H{7l94A&vl0P z%Au@Z=)zm3!Q+A8^1#l*gPbV}{$qy2aM&qNb-^zb)zN&JGWk;Qfk(Ey6qkz_a>S*) zRgQH2wMIryJp8i#x0YS_#xu6(7nFY_8PN=?K%r8Sf4GRP9l?9kIw30s6!p%5Dyw6K`(;DL8 zSThk1wrU9R%x?Jcr#i$7m z(l-nzeLwEOyEIw@ivp^-2^78;$8){3K&kA8C|S@GzZ+Jw!AaSDn|gBcEow|8nbC_U zN7u1RAa-xXZK@$q*$Bcf0bD+I$iu`)gMmb=Nnu{BOW;^>z`q4CgZr1{fnGe!i$d-Fsi5#qtr40MJg#?su(^v|4$6W5o9Pep&)&` z<%NFyo(`DqZcI_A(tWtt9Mgz2W>BBSkuG%yB+$5fT)dk!Db03P|gM{=7+Kycvdn@h~&u<%s^=?3&mEdMXi^g_+UR zk!UOjggGKBOo^;8h%6Wn;kZ2(j!l>&xgv0djUU&n#mP7O^IMvS^x2H28>}=lPFd}y zryU;^Bm^^~9RV_I0Kbh`d)ENmO$4uVV6734BZ&j~-6U2H3~V6t)js~vtNH<*mSinmm3hNA;rXajO!bNtM!xS4&?zS))-CRB$7LNEt3lT|4P{b*## z|6aw{dqTtq?#I1bOl#n10gfd&K66;e(Sj2B`aOb<3)r9CBW5y8n``b9zmVtLzf4R| zc%AlGVv!Q$!9Y}cX&2wGsV>`#-2J;tk?L7HL~ylge;cGk@QHz zC6EXQc;vPRL^gKc9eY4*#&4_8Y&uH&JYvjPdOyTrEMQfZjw`?Ykf>x{d+coSmpdxp zVQZFidS&wCDy&BHf8mqDFK@Dp2>IW~MHY@Mgg*g~`FYvq2|-$7%oAuG=XM_#=@Gyi zAunu@_Q^M&z*@q3`Nb31@>B5(e9U-c*3_LYn^vf$1e0!X7*rwJ8vE6a&2mnKxS8#> z&sKiDb>|F+{of}AF8wIC^PU!OPjP1KDk1ugMs93 zzqvwm2%ansRxpy=hj!FuPQEnXFQoIk{6 zv-Kj!J8J{RIzdtS5SPyu8!2+bKqDGVzGI+4d+7%3z<$0%>uC+z{&Bsyp9h+^r@bz^ zY5YNMzp+WI;Zfgwjf$dxcwK^02bXRZo-k^0)pmq;V`SrZ#d;9$z`NLjw?xM6P!V^u zlb7W4>ySTc`va+YI&jd}+I8HXvqMyB|J20jog`n@$qu{4?Q-ZYY;LsWmR*Rgs-&-+ zuNz~0-YK4`WIed8KoAH-%&^z)5qEPsBG>F=>~UNoM}Lfv)ec$qv1rtN9ry-2%6^B@ z(ZsJ?&Zik;@t)pt?s=StCVL*M``J5?DZlzyqy&fU+{ak+drM}00#UL~4*EnqV9b6R zgWgE8&#;m9>?h)i5YS9{+g{NHfNS=Oo3Pz9{Zq(_6>`p}xK+=wW6Oqp#pgunMo5Psq3 z;*N{mQUp18KH8Q|CXL&39OY{#@ugpijzJVqa8+VpV8n9#qJ#%O zqw0*7EZ#3>@@+@u+xx|!Waoz=Up1&cPy@k_we(9om3HA*ViLnj{F4Vn`zYt;fx4V* zW*g!1u>!*lS?oQC%luL0g9k)VJbtzWl0ZaN4KgGCmbajG!oHXk+gl7ccQ&zLvLsj|%=loV@=%g7xMvkT)1b z#E$T5n&F5NrAJ!#{|>%E&;xe9A=jM1?!=Gf2PZ^&a1|jaRew8yxfihXJN_uzM+deH z1@g^>KVqlyDz`yb4ag-wiedRDAeJ#)jcA`#B;2J)G`IyF544Egv=l5stL9ITy_K@v zPhwi|Om2_}8-G%*!d*(0ebS6HX`U48>Dbl2laPQ*Wc(>*Ra`iY1D?ZADgB{Lh2k*i zrX{DuZ3G+pv$B7B{EP(|k5sTU7U7z;L3551toRw*l|MWTN+5C@kj4t``=9I8S@?^% zC3p-u1hSEwTw;)RQ=ZVg5+g^7(@>d#V`?FgxDe&E+JmTEz!7bXZ29473|`>ec?cv$ zlWRM3f*ZJs_*Zcs`$T^AE7qL$%DCUK8ELN^`J0e*a_!7-qJVCnfKj|jQ;|ySY@x3W zS{8Z_73-%}p)4{#oEw9pJ|Xjn_}Vd#=5m83vf`{g+$gD^Z)yf@)9v*VZUG5fb48q3Epa#cD z@j?4&udq*UiZ%+90-M_!QuOiI>8v6P7#ih3VotSSZR8-I@e}%Q#Sq=>$uY+3IzFFy zTO|3`VpHlKM1#mKp(CdDphROo=f6qW0_GCQfsH93!4e`+vNReQx%g?3!bV0HR4}oT zLAOfGZ)7B}2F558dxxR2iS_AdSBQyoNV9&RAtfVQ4XGNk1hR2;X{IR#AQ^2#Mu&0s zUpXkl@Y9jrFWWn~bO0{Z8DK12AJx&wrG3=Vna1>5B~!yFnI1(D)jMzmmiYB=Q2AzU~4WBE^kHf1m>_r7ezYvqd zLHAS>BO&zcQ?0x9H}0vrS_E2Ng)xJdPz0YZ1<%!N_=sd90-fj74=LhhCALPXl>Nb9 zxj7wt>2;cZDo-6UolifQ1n4f5O05 zSV){jPi%0wP-vtKK121=5z_`XRW{tzp8p9GIkV76_SPvZUo12_nm@pJ4q#Lb0yT_L z>pes}!YHJMMi=}4$rNjXb)^E&{hArW|Nfj-bu*)&9zMS{Gj90%0#ln~UV)CXxlz<1 z1dSk#f=AhEv&>j05)P9&7^zs_!gz$vF+bYUcoyfmn-zhbYvk(BMaqS3-pXi-`7^AQ z(VKX7Su4e}`&t=2ohh6jMz#~#jQv|14NrYu!GS^{?@@LaA2D!;8YF`Q6MPp_C%_Y8q?7jRp0CTsG~uL^nykm zg7lq?9&X1~#Fpe~os4q6UrKjpbaOj7j1*6D9L7$aYjqyftdRG2HZG|T^kHYEYk%!* z{7y#8k6nzlKzQjT#^-oUzts31C_|Fv8{rhfF=RzoqkG)P%oARR2f+`=yBaSCBaG;F zuH0N~L^yp9kSJYdTZ-nv&Sc67meGcoX^CZY4k@f?R$|blh673<25b92n4pi87_HL2 zpleTl#2=hHNS!q>%bltMca9W?)T6CDwGEx^0bRYao6(+MI3vI5W|ZK!Tk^XbO=_cw zH3d~fi45t7x*MZgZ2LoL@Juj;sMlp^BWHOa1MZ+=7vD!RsfW>&ANfOe?*Y8m%UgOF z8MQ&Rnl`fKTRrL+>xdxqFs3yCnO>t24Ry2G>Ym1FH|VeCw*7K1<4Tse%JE9$f?jEo zCpprpw&VL4BejS*bj_3ct#|w0%Z!4cb+lC;?{92^rdd9~D8hh! zK0s-j-v=1ep=oX%X!yOAq)>G3#;P-drwS$a47`qn+!Fck@or8?8P}9p- z7!&b`A8d3_Qb_4$qEZkkHDW>DGT3MaOr9C6bl!gkD?tFeHNUABGh3~o=oDf4N6SFM zW-Y+@kvX7THhb%p#yzaQ629yzqe+_D8y{S7Q+wlMYgXUn6IU6xHxMUmtdwO_+G9j9 zRGe9=7mhikS%GudLGx1u4ntjuMOQ;%Z2OTrk@edQqk}2 z^82C2YX0Uga`83BMo{&=Ka33YE_l;OBboT8(K^cK5HYyn{OUiAbemmkU==jq)~_=z zXZ)9+$r1=NWJ(>7wNlrJWj8WPYyQ2#N?O z7*rJc6ckv56;P3dsDO#6@t}+v#Ve9T5sbRT6ODJg?I!=`_}*Wbx-Z|4r7kr z=ihvm>Z*Emy?XVos;)`iz~*++pEyQ;IgX0eU2)@EPCD6PQ`EK?9opOH zLNnjOWIwI5!@P8D2Vx26S}}X27qX9Qz4Xx?LXJ_MgMv5VlG)e&^j%;HzYfwP_z}Kh z4bKH(178N|xzj^tki?-OslCuH6L#v7r;18QN#4bUbLG_DWbcAmTzg`~ES^3Qw$g>H z_etrsOj?+pg!kzS(@#Z7k43SbO|4H(TOzPHc6s_tVDIkb=|ydlzit|OTDqnchA?(@ zTKkWad)w;t0Vw;?>hvqg_um%kMHmo!g*)R zYnb!h+2Q&cbPoFQEW7@k^bv3me|k>ZLojE3`gR0W8`7K6)f+aXuSk9IF`KXv8aF0> z;l}jQXnxm52sKRnm*=LR#ONOSMcPhoY8w1YXz|F^&x3MMrjtCe2~FPI^u?z1o+K{! zc=3YtldbxFvJ<`PO;>4Szk}a0AN`00E|{U+b!K1Is#DWnFHT=iH<7Pl>EE`)6(Iw! zOaDMug$%eM{W7jCXW!kJ{v)E>x8g)SqW}1P`cg#C{6qSBy41Yiwsh~-IPF_^Yq~YX z54kPtOqSI(;4ysgnP!t7 zOOKA9Q3ZDrnT8C9HSu5d=R3;W`+^a1$AKaBMx?0VNG zGpobjUB&O2?w1z+m?`=Rpxz-+_=|hRgr+|^!lq;oI)UB>0Cb^4EBGPn=vpyg94Sq< zCp?!ts5uT4zZ*r;pCvp>bOw&XX`v= zCZTIm7r?B;6Gl>W;wZZD3`Z!#HcB_1HH}yzEN=a8JAd0U;hWZ#Iv-wMQ5SX|cYT&R z-#xn4B5D#}yrc8~S}DBQrc33{Cz_T&p1!7%euo{tENqa(ajKe=gk*!+ig_^my!SPah=~ z0lKn==b>%2XIDHAfTHS)wtBOD&!@v<@3_lPDJhuEJv=A|{EG_tJ=vb;(j9ui`Ct6f z6E0i&+7!oBN*yirgKi!~AA6Czq039@L1em(dkI=yIE;AiBgk!q?P50mC3r3N%U=0% z`uOVDSpy&uZ0bt(&dXrl?b+X7Ngtki;4OB|NHJFTm4C&mC=Gt}=2xK+w2;AU0%RM`8^I6VBkYXZCLF0grku9exN*d%*9#2H*H;ucZg`&o^U`z1Uw~E2;2+ zEVR00-TkcJZeaOMs+TT?YOa^qT{!($?M~m;Y8wD&zn-2_BAAMR{aD*QaK~K5j^2|V zo{qj0VD=m7uBB=EiE{1VNH4Ac)T0`G+Jz&?IJZ)_mqJ){x4n@b|3BVS+thDwy1I2z zY0}?LTM~G8{Rglha2@G~p{|58C?AlWHvXgZQT%$!oA+U6a5LvVY*j!1QMzv*9Dr=T zYvL#Gr8?+iY@*;qM>{rsUpoBQW%)js2G_Bz``}d!t0R((9@iu$j@PT?fN)! zQ@r(Y+Gtz6)221%c)%yHDe(2xC(yF)X21OeBLAT)*`80*Q{qtar=VCI{QDG6%Z*J} ze43twEBD!(UqA^-vvyymr}l#Rl%TysNE2EOIBi+Cmrh4S_ggOiGJP_xw|e8t^tI4_ zfBqE|nrm5yuc2dB*5Ahwx}dYqM4{h(lfDmNi@w7;?!eCb7HwY3?)VmJRg~D7Od;HR zfCWgVP?8kyMCKlL{deh$;Y2aNPaAMfFZ~{t7=F9pdnoN4*gfB;e_eGg-I7ON$YUu1 z6Y~xeda`G=}-a6l3kam|>n3|Q2n>UIJtQ1_zq%)E5bi+> zge!JkR`{&Esj$8eI|(ALDXC3Inm~A4!)2+uW;z9_V->t#Ent_ksX8ZAB}+|2d82BC zA^q{CZp#XqfBz!{qHPMcuNt$vsYW2LQF!CSA8LdtRV@KovXd|<)uA2h+g9jSz9!J& z;`Q<2s_VtJcM`g1T2gpzI-(+si`oH=CL{o}=+f|st&hIKbIIAK(RJLsY138t*1NZ+6 zM~JwogC974HkZtM0mvzVR#DRBg2G~tCEkiyd`K=XH(zHNF_o+ z(^ZymK)ck3_yTgGKsSz8PZHEN?V&PDY@Hy`RXI)mB;ov4L&2c@^NOiLFNMs$EFkFX0~|UlI{=NtFyUGDy1m2)1YCK2 zaMOEJg)0Pd8LvM|xF3>c$}HF%TbdTm60U1a(yZzj!KUz(W58%{kM8ij{1~Ba*R6k! zSz+|?Q-v=D;iUZd7@>3O%A)1A>o2h~;q}5($&739bz$nfC!3ZZE3{1|7dNe$E8v9E z&L8i`1`&Jac%hd>1M7&h(I+;2alA05InSIY42tEQI8S&om0ZSjM=+Bou_cahc+=Zw z3J030zinaba2s-J?{jS29T-uIrn_yy$%0T9APa)tBE$3TsQam1FSA|y6-r*u+BJdT z-+7anO+sDKbwm6TemRl}@XMXoBn*`zzg(i-g>2nP$y<|Wu~T*m_3)Cuxl`C!H3V}5 zB@p1a!e9s+byjj*(`k#6vy#bk*i(y>mnGLXowy{q0&YOIr#|^o^5^XKrMM5a`d;Bu zcn0lLlDpeX+Q@gUO1}udqbPT8;xA`kQcT&6D+t0}x3b@eXOBH7{ITVCq@CHH9>P67 zv^(C0^<9q7*&#Lq{CpLouG4wAblAHy#p z!K`P#4H-Y52C{bh-TlSjJM0{uXZfH3;*1TJw zEsmLQ34;b?`nCZt#`&gbcZU?UwsmLi2`gFLqLSR}!mU5qxPZpRx`$ugya#J^M-zH| zU5aaAEqV%UbZkZUk$$^Z7{+y?a)@lJbo==%`#0exmie3TG?dIY-xg@=Io5NWTv+v% zFoLTUEvl&fJQO*9eM>lrGqhMfZ8_sChr(`oTTp(g?$iD*jOL7$m%Zcff*LC;vVQLf z)g6l*xd>FtcKuzz7gk{pnw)opK1n+8@ZLX#O)T@S(2yxISPtHrDeplTKmEQyCwaqe zz4tD(kr(%{FWwafR77}jc+=k#c5_XFchUN%K&G4XPvM+mv)^Zm8bn!(^S>6_iWy8> zqVE3JSkL!`;XuWd_d_(F`F=x+-jaJ%EUc6HCa&OSs=)s?S>!j+E}>#MdKc`SBDW_cWb|frg*|v!s%eZfBh=N zUDemZf#5OtQBcl`foy|GdwY|;vJ!X({0}fLGpwa zU48=JWlria7M`;t@L#;~s>8VU<8k-&xe+srK8_Wl9ru5)Q$vShtG*NZR@SBJiYNPj zBDaNB#$H7=V`E7}ic&h3^q;C@*7w3J{CMU0--Fv071kIv^kRSeKD3iU1Yv@Du)#kF zgOXd>5kClrLWR5R2N)!&``=(!{V1$U{blc^eZ@t|jhCJ;n#rp!eMD4S!OUm({~cBm z9T9IPELsEar9OG1sa;Aux^?mw%t?!+hHp%Zo7;>Dl^A@GTvCka2i3`aiTl1n4|PrS z#pjUl>&YR_i9PYNxW~2^k7^CmVOvH#U~s5A4XdO`;p)S%rc^Bov5r}>3;hUuq=w-v zYS?tx4``ENgiN41{0k%dW0-&DcT!fI!S!v9$a}hpy;zabN>n_kT0A(_w1=HsEsiSZ zswh$0fdoklj47;5P8>#pN6CpKc>J8W5Q67vq(UNolM_Ema(y{!`w8}CC$U+f<^ADe zv|Z1ASmzKP?K?;JYQ%;GDqYiA?Ax}e@wLXU1pThFcwl))QB^bhpV37eR`teiEM2+| zAY8hU#4a+0Te^r7$Nmxd;A11ep?b8d`w{#HvCfEfhvHcab@t>#JK)FjE)Bu(6X-1$ z0#mw*egES^2A$3ZO?}=~tV?~fo0;9jl`YZIo&mw&DNXNo6MqW_#eQ6nGqR>X_Ymb| z7wosU#c!bYt)^okL*R$31LAN@wQVo4z#UxEK7gru6$7j9%Fgd44i42GfmMAj&>e;^ z^%Cb!{`iw{wEZyJYN{?<+qy#TLcsA8t1Jc z#m(;{UI4GyzCPm9bb28Cc|!I`tvDmS5rc;bJ9>B6eJBLo*@=BcI;rxjzHlz5*{;6g zh}5>%*oS>Xn(NmO!CH27KatM!UED7uy?gtK*(AF3On)rntJoL)MRLn214O#`WcmOx z{I!}}28g3Oosa9TAj3L^*ZtP@##!(rHbOrgAPymKZm)qN-9a*8U|9alfxP?#_WD3E z`~{nD2a01ckOKyZGtu68gG9ReW#=G~zU=zfAd$W+$_)`^_Q*gn!;Ty*_9q(zEq7w) z4F-)B)B4njKUk z&6jHMz6^i|Kf^|h7BgjT{6j~JXOSC!v^as#l9fS+SFtg2NH{BHkkuA;nJk7T=(n;M zl%_J=fn1`9q}KsrG<#SPm+qh4ogJ^@O6oK_NfpOrN}RER;kk7mdtU{w0b?GW4+%K@ zxu=uz_;@$`W|Mzh`MbQhfk;5r#D1w?-y8kD&OQj1$acidIW?8-;Z~3Sh>KA)@pm1X zH4~i1dIA?0igJ1zv9BCEqJTleC9aF~voSc3%s<+t4}a-LA22=ivoU=NSlt`hp@nd% z))$K4bVWi4R0h7QAa;(V0MsBzfxQKB5^wT9|F~5SzdgM8SFNqhrYO?L!{52;V~TB3 zKYyETJVxl5+I}vZXkrp^z-6N;o{Q6f)s{FwgwiG8v)|Ti`@YuQ*&Ivk2ck*dik}?# z9ouqi>&~gqE^OLiiEjF!uP$kYkD=GD-IZwf$8VCOmz}!2!5y71*t+bhR#0$tH*XdK z$1d1T!PHH~G<4l|bzRX_UvHW@UKEq9PPA7v&8-uUkKXQ{Af6e%u`v_HCx`skbt#j? zokMWYnk zuv$Ew?XdrsX5TzltSwbA{xY#w(}-V)D^mYAT4B$gCl(IiWP$L1q%{Vr?Z%R4ikGo# z&lD&B_t?v>5vMi}qv@nI;x>WxTQ6>`S+vk`LI0zdFIwpOqZikEqn0gi`u%#y?PhTH z#Rl;zHg-M4;+-2s{AA`P;C}rk@t4Wb|7-W_E)W;|_nm(B0&#P5FPcuhQ2a+5cEV=y zf>PSIo1t8lqL`i|(|JPg|Jt$puM(&H*Bxt8t`?7rEtHTL@3>jq-KtGEwN1a;A$}$P z_tovVQ#?5~ieYy{TBde>!*01p95nEZGct)GsP@YPGl_8sH{eggUyF41%{}7t+1gVw z$S6IRu|4;SJ@!l9!rI;^4(>pe9f`kw`0LBY-Y3?lx*o=Exlim(;nVktcO+|@*6$Km zrs0D8;bAeKnlpjrA3>M4Y{(>%#b$W;2Q`yui!>g;n5}t4?2_8Lfw4!#eg|DVBa;w{ zMHDC`d<|@mRaMMRjGd54bl?$$v)NP6p{ku5SjR_2b=s-3N>$Zv%p_7V&~gk=*3SXo zx(G7^@U7zT?EFW?K8@Eb$RyeqlRpNySbQJSEtBX`Aw52tD;8!F(X=NL7fs3}Iv3%O z&zHKn;>c1L793Wpzv0|4-7OYLBrZV$#~>vhj1KV1uS6byr@RLdkB@x{V0p)1D641p zx$J_+#O{sd>2H_8H5^^4aK-$_ z1jhsiz$Rr8~ zpTvzZ$0mN3NPLS3VX-SRsG%q$kw^iW(pwftBr?Tx4%ej^&zzY_^ap&{Ap7BQvB&JC zy)ubzNV*W=6od}}bR@;`J1JHyy*p-&(#Ip6;4Z{+rlmvAV@Tug6ko}^$^^3b0=RHXC&& z{6Cx&W=|1w19t;FPMnl4_01&W3@Yk{{eG-wURgJQw%{hqN(1PRJU;HvDwLIxAMaJv zOyhTDpwITpB>JGeTZ`c(2zw*G2;mTf+fdC32-_n*AK@CrWrW8f9DuM6Atz4Zn0CkVslv}QRs5wub>@g~h!*<#Cy9VkoquT*v=y35fwJ}P@`SdIhVi^4xO zzIfp&v4(ls=Za-{N4l`9UIhC~Q~-Skpg9hQun1ad#=iz=bqusPjWc4k^4xXpSWuyzx?($(%5q6d-Cr7& z?H3M(15ZWa_)40Ccq-)PjjLj9QJJwrGl^jcKOB-t%s}`M!l4MyL`V{CD8g9?UmKiB z9D(p=grg8{M%V>m143$iDncsPA0hGF9|mO-0}O@kPLMQYsf$b5Nd-m}Bv8fG4`3r@a0Jn=_5g zBOtN0ZA2u9IjUD8&OI&H4KJw}T&bV@Z{X{Y$47bBiJ8QpunUQVj&v?3u369+MRuZc z(ks71NctQ-l^Uez74?+CRVNt`kBOF16@xW9|!t|7rDW&Z~K2Z$sWZbI|*M5p+BPqavpDK=> z$6rI7v(ObsmfQ`M8vf+pG@Qssb}eio0JDSGHUOEelW;E!{6&0pGkXkQayN z1L=zOMd1$mDsb6*)M8vxAh4*<7-P5h>W zcJ4sooTNP5gL=lJ{yPv7<2VapK8%BpQi2Ru&lH5*Yq1t_VnKIdKFEIN@p};`&kN@? zdjY2*-Vc8?*PKI?r@w4u5t`Ifs;hm=LkB!I}5X)Fp%vg+c5}UlhZ}EOO{&b|1 z&dAfR$NMn+bwD}|gs0ztcNKrHp+O3H`V)AkhHpdqV1#{n#tVqhR2+khctx+W-|i6y zSKC%eSprm|!HSgqIPFq8J?jC>X?N?@Ef>?SvN*wC2Ke^$g6Gk){Jn^C8t04YdcYS+ zYgpo|vI3cy+{a{v&+k#7iuHa&?9wR5vU$Bbku4TM%hiS%F?d1`J-YzUS>T*lKIJWq z#oJH$DqP`wNJzl?xJa@57098n7ZSz;kSe?z-RmEV-&2h90yiS>0Q~Xz zHoVLD+gcZO{CR}LMST2Ghiefh6?#5Gs-L?=@tR0O0)xg$GDc4|5<-_wZs5l2N}P-^ zMo%|nbCRHV(Yn73pd5sUBLK?DkwA-nr7aae4S;egCeTGM{p^y^jS55^rT@1Bo>$BpUU5cg{ddB9Z4vzCLrSE^Ez4m@n@a7UikE2!A3(@m zqW$sCF~KYPVp1m5z^Tp$@y<~j5+fzzc^2us4qlGZ-$6PT6>+V?`2-of_q?L5NF$+3 z&j!5nMZ!0-Wh zuzacsHdLh|P5kUK@C^VR0Fa{*DhP)n97$#H?8G~t+`D7tDDMTti66$FC5M*aPr-X1 zWZs23$m3lU;f;xBkwEs>ped27d>z8$5#NJwbO|ug0TtMYUx<(xH0O7mL5~0frj8zi zkS5DV$U7U~D6DN^e6lb9Ay$QSycFF0n4RY zdA;)^*sy&nn>hR5bYelQV$Qr~PmSyzZmjk|oP-C@=jq(2{TB7tBL5YH{Slsr@NnWI zT)ercfHb#B_#;Z=>0IheE~aypvmBnMm&4xHrUjUSrA1@mBJ;$w=cv%j6Im!~R;&EcD3+S$$gSJZN==YFoi85|<}M*v7Lfz_tf0 znclqjpT*kgiM$ci7@qTDWuuftVoI@{N@e42olBy!5g+BiGf|kRna6*IIG=&IFX76v zhE4b-XhWnc!dir19+gS-MR+elQnXJ&I1OQcghwF!81)j%eDKJ|NCI7fgrP_{9U&E@ zC+_OG z0kM3F&qAD6%z5Qzz;jp6+*m%rHx%Px`yq2iV%((@clA`#@}7XEID~4#6EAls(z$hb zH#)#+?jgK)jldHzEwgkcW&jG({`_i$ql$p>isK!U0K=D47rYau1sWytu4Db2_{86MRH+(lMANcII@k`{qwY3zxJV@TvH- z4o!1PXd6Y6b2xkKQ~b)?t~u;qpNdC!cpCY9zSJoHw9kTR|$|ag12K0 za&+*e(QRI-(l3gY@TKxS;R1fZtVV4#izyKdA(E*HCWbOW8!p- z{wQQ}mh~j!ePi(t5ubth*kdF9ya*v__KzSWqqsLJ9f^>h_s=Lz=U2cSCpyZ@+*y)T z6n`1z1nw6xA8a`M0OiYr5390XImK@9aMT%lQWlEgBb_{jFHj_fzB%kKhA~FWn!g z9Q(z$Vvj~)e#GW0fptP2*TgQ2HDAPHVj%Jf0hP*bigj%x%5oT9RzX>Cp%MiZ55aDU z!SXT&U`v3_=ViB60IdTkms-?Rgy_M1wNnzWb$YS)lt#~S^D}JwF0s>~?Xh~JEcjUg z%uzvU7tarE5O&XZVoj%Ok;&OHW!{W<9};>w_VssS`%w8&{OGjPM_y#?-GuO9z|KQB z4Pgf1bcENsbcPw{PY}|YX+TJN;t>c3A*?}2ew6J_#FyG3P9#u|cpbvg2*)G5)6OL3 zA?)Tr=#g9NS|pHWx*j31O=-gEAL#myrZTP_;R7KIb+Mh$ZFYoa%6-gP>7?o5osJ{{8Say z@%Ph9qvt+uO5X%{&U@nUn~}~fqo_TM-#sa6@GgXNQMe0$h9KnYavb905vK<|ZtgIz z7&qyJM_nkt2Jd{@c>b*@L%uX#-!q6$Bw#$78WG_=jgMe+tf9D`5$^!U*v$)~ZynMo zvk;ZmBculDc_i4s!*8A#!5@HfjkKOG!3$qfl~B45l@MkQN5L5guSD1fAwBU1xR?JF zz>_EP7=*N}+aRQUQ69%@q7$YUd?}>AM7ho}<-wLzTN|T=@*`9;%3x){a>+NREN^~U ze9R)Oe@<8nkjW{XdblbE%oQFU{(wfvlKluFY0=!jcq`)M1>t5I4-Z2+VVYZ4xy6w= zHb+Autxs-`HD?sl5hU8ezTneC@uK20@sSde_!936P)^`6(8DW$<}24as{-hFfW~D= z*nzGCDnL%H1leVvR{`|sGEkc>NlRTC7gYdV3Q*!be3Ulg-02o~Xf;$QyRp~|FB?}i zx*(6s?$s!ZG14TJ8oIjJ(0?lY0t$1QWe}2nz|DncfDv*s@^o%*ASrP(V7VZA z0T_)h@z#%(CWBzlWBY-u<_m5Q_EBCM zjQee+alJLmQwpk~8(P5(EZ^vP?7RVo&l)h`RNWbHs>y0cNn@*ZCva`qu@%cuWG5)} zve=e`rB1AUN2xvA+ffp$4b67~OLcu)mIK){dlw-(W~7>|o_9T~p!#N@S*nsZ`mk#{ zNCR`W=4k~xZ{ifw3t z?(2QSI;wrWke3UdZ#uRPgxLKivukRk-t4H1)U8_AOiR{Lu#opmr=a#96J=hRk*ccm zhGlD-;mAOkrdaZT;cUl|QjcoaG2McP!6>d}nPxCBO3wy52BzQ!2sv;AS+)kTH?z`V znY?a!R=(f|zUdWYM`QI_$?2$imZO?Lo9()WuCcvYX=)ZxwP4}a2oEJ}PZ_#7C(X>} zEi_{(o~xJ`n5zz>)Qs-=Zb1)J+f`hkUS>a5OGjq>!13~4-n0XnWldprPC7bko4Tjz zs5MYrSq(-mWBc;bAogKS8k4nr*Y*mg>DsD{>nhw)Y)5BlR#sIV1GiSVz8|>gbYXOu zT&=mTrDz}~6C;xIz8tSAunSIJRy@cI9IC-GhEGU5&7#N(% z`gW82j-G4C1y$G7yybg(z-p10)f}$?VhTXCmKiAW0R-!1fF>`nt-#Mail=HmYujC_ z&HA3@sgzL&49k#}F>HHxX@1sqHJWN!!Mr*k*n?Q#9@5Ba*8uezPC?f4x*G)6*hAQx z)1_LrwujWY+O{2CF=RvaGzGmi#?`Um{jf-%?jg0UHdQRDK(Ra>CJdrCT1oQ*N+S|Lz;$Jg}<1MNkN>fHkl2o^Wszxrj1ZG;O<+qN7q3G_>o zRo_0CJ=Iehl6B=m5V(rr8met5`oy8^>7G*O8Wd1mAkS50N6yHQYTor_D{%G6W7yZdrQUsmW%Y~a;ZBEB7x}0; zpZ87h62~)j5VL1Z`Bk!cI{UL3y(PU`Q&5lYxvGgpX`9BO^O)RM8pmGhEoHKfY&#$X zOos0(dCfkIec4;OEsJ$)+P+%I`?}*Qx;2%(IaOMc^=w&@11-oqzCn!TaCTs=G_4xQ zay4I8aiNQy7GPSQ%x!8ilP}uurKgywAF@c6?ES>e6wIE zdBvW-hPrm-NZHbGLyVSJRZR_C&8ZzSYSE$31sjLIe+w_5#?UmU+SK*HABtIsv&y?-O+=evHSXCX~>vv#W!SG z)EFwFv9v{+wwc}#Z zt6=}&3xVdzCyXQ#?$RYB{{?v$H}`nDVW}Vstsu{1j}DR+GI@}cu67m03kr~1kRG@8lPt?11u9oxt>sua`;#$+SVHN%U9PG=wyts5$?9Wp#Ou>FZ7 zoY_(hQu5ouQqO8j0r$}ZP@v-HZN&|aVvU2P0c_e3pi1=&RmO!yfe-q&Ecrxs<`8Lc z*0LeX10Rw|!_=A10;2hGwFPa!4xK5p09ZYV9#1Of-3Gd4Pyul#|Gk! zykTHzXx2%i=x&w+4p`o>4FAy$E%W?k%j%c$F_R?pR1cyckU??k$#tQI;V!V*=;5F_ z*8zFRV11Tj7=B(`#MTd$W}uspa6Ux0?YJNScQO0NP-#>atH(1Salq^3K(~S=)cfJ= zqhV4TcJwf*H^|XZbr&@jeaEPjzZzWq*O?93(Lw_6(vKa=QT}}L5h~6%id|l z50fF1eXLWI(6NdOw!xN+lBQOpV+ugsyo(F0z#3P_H8X~f*XzAc; znI^vgb-=Ve(1^X}aAuE|6t?y_sa;md2YD!@nuYag151rj>v`AKaP3v#x+b#ifF)(= z@LT~)AfGo$*kZ=)U|rIos(P|lWT}u<6ex|B5*VIss;27yob^$p*{#k>p1|H*0sZql zMY3`j2`!$$4zQGQMc3KLedBcGen7c~r+c!ZSeop~c`$%;k}frnV;#?eS^X+Z}318SW~av!VJ{{_nwBrWSeF;)ti ztGY7SlRFHFu^j^oR+SpfgmfKz8vaz&&C-lt3BvrzsW zOI8bk>_Y-6!TDhmxd7^mD(4k6Y85=!x*)ldJzJ3av(pRG#H?=sBeG_IBn`-7_d@n` zL0Xh^UC@@JKssoit|{KHl4mp*8p?W@QlA{|L@QVtWUmpprtF#*CD#zh^eETFq}nog zl4C+vTJpuov)DD$q+V>yG)&8xrZh39sjh-0Ly8r|W8S?ad44lUd-lC49i3AGC9pgL zE7Y=lNTy4pZj4|TS<<+yr3MzJT=PMwu3-k7oBA9mjYwwX04&q~7$CG@DHe$RvgAFi?}5^*__b1LR!(zF8+W^DK>Lm%R8+;&tgDi-6`Rw21r`i6AlHV6siz!f`O~O!fy*H6KuxH6&n&1wBtJ=PM4JG&Qvh>tYH?^w*pv^c3|AVj6*;$Fycs)a(&12p^4^yn;gTgo(vo2f^X<0Rw^J=E=Hg{GR=0GKL5$vI~alSYXp0c;g?~o0BCy3#kWgQcz7#!LqZhn<#li z_ho*=smqq2EeKXeQIW4GW*&Cr&1~@$$;yHU1qCSQ(3q9H<$BvFS?%i9FFg%~d>c$z zf!>d$27@+#3rij<9hil^4!Tqw2wHH0z}rsATK8fh$Az6{!i0l{Re<@lBU)%Z*}c=q zf<9C_G;2b5k#Vi-R>8pR-OBb(mFl6{;|@d6nOab683N#sw77dWmm9`v4XH^|1#O5C^-JFB2iuDDR2~;F&Zeb@M1K7clS;w<=C=RY|DL$@URR6@T zo+d4?fqJStP-0A9F(J0~JCm0tNh9sT=1-TFmy&xR~9$TNKXb9oOKQjqYf^32Q^QV0pNTe{b^Fr6v_( zZSC2b8IqneEZv7Kh6yuZZK~FN_#w@Zzr8g>ng_00kOQckhGPI7rm~AYJ5ySmh1CkL z2@q)nm=(8hf0V4~x&}F-slXa|m;3-FFUi1&EkKJ?Wq4dXBmd_JSaVz->;-$F6YT88P*xJVrXU%!k}*NsbVtj=XA8d z%j>eCE2{T&n4Akd$T}!tz@`P~20RI?S>J;tzefYSYP9?ye*=t3b>I`o7o2C4JCp4G z6Cev;3#1Ng!_TBuuson6TAHD&;1q>I;W?I>BVC(Q3MOQomDj)zRnzdEPfliI=EHJ- ze~y&Nfw938hgIO^<$U1FFC=GDy+fFBjMOa~z#8&oKY$^l>bh&Z$n0aJ19PsWs-7;J zU~6zBDc(z9;>ok6p*@%REA3?-`fEB0tZZ-^+&oI6{pIALQMEmfm9jYq2nQ+yS$dG` zdFPenNOsK{NY^ubsckNB4Gowf*N5c>X7JbK;iOItW0xN*RfF4t3BnTrJ4MX{gRdqJ zYtC)oiC7iHXQ2T7S92{`ikk5nYkM4Z8lDh8A309YYi)P(VAlRPjFhy(Odd`XIWV9b zE99EA@nbB|+B4(OTh)eGfMW%Hl}*?Hdr&Y$5ejzbs6ktY6;29294BwEQF9^RLCH|Q zVN!!JS*9QCWozbw#ln9H{T^1ni=IR4ev>^qSE|beFgRV97jUXU_;}XeFbDEnFpK>0 z(y&~?fSqb$1-J$Hemw21Ux7c@2ZSdjzt#?oUXYw~C|JP|*6OuF! zBSC{611F#JFSc&JG_?1^B`9n!TDY9Z8k(95Ov$i}jeMZ_?-NWRn}>i>U@Y1&8#L%q zAFxN~OP6J!Q@~1t7ZH}Xrdc1dr8e|H6`D7ko`y#>iuw77J!DIN&Hn`B3O>C#1~&4arh9{%ME-EWgs92*hHcS$zW zmugylA77ADVHcZ_L}X}^=g9sc+0k9#yC-9FVS&HQU(&Gr$7H)@*l>WKY`O1yYg0Aw z<}3uh{CN#XUv9e%pq_Q9w@UOOG5AOCsKKZecvZ1W03*+HwV$W9Ckep=h_9{A0sW98 zuuL_mc#51qD;4ps{xCA?PsJw1lKLes5fW5C=ud_NRSc6JsAs2Ul6fRYE7(=R-N06{ z?EnUDtLLPqM!B@~bC82@Y&n_==RZ7v>iX1a&8F26@L<3ns2B$6@db#x4Jo#691Ote z(KClTh`LU>s)<4qM_5X`Zn{W^7Ar0$7?iq>_R4+ercfqxDj zjeJlbCn6M6c6@{Mat)ZA1;--v#sGdwU%fGPLC863*pDlvldA*b?eICma>Se(g{>(z z<4Ea<9Co6BCvbd6hX9uS-=&U@)CX^c)H4I4!*VQChy6x)pEY*j3TbSnAj368`xG8j zVBD+D_NbDTD1RS`yNIhZ%d7eRG+zx@J(s53;(;4hrJ56re8K)6iwaFxNl3Yu7()1=xONNwztzz2b*uu<&pOzldtd6T5BZ02dwWjX8> zc-VM==Zkz7hVduxfB4RZk?tyXtq)K!95AkJSlDWY0|~m)ovBITs%G`4OYL(YT(B{4 zR|Q*WP!R4)9T8Qq^K{zyh2?^o#TKgpby2tOX0M+vjYT0FTcH{>?m#6i=^ozdoHMX7 zOKo9y0!ToQl)}BKX;F>Wo+0IGpzFd$M2$cZu&dsex+57A`!}5ql8 z@zvN(41JrPLK_9J>EQ#1x5EE3n|r2o5FBYRbn@6!g`R0*DL)7top2`5NQJ6_IcWJ{ z5voQqNO>s5vIQyM5so1kf;MS^@EUvU_D1QfoGHV$12tN3En~Y+dn7d_vL-@RS%&(N z&ts{=uLkd<^=K+my26HXu&6wU6N|Qy!9=ykAcn))49fyvSZ5}vUWH)_V+@@PbE%UV zxF(@%VXecrtw1EPCF^h#E;cE#S%p=hfxKZ!u&dWe$E6B7`)-{yCyUhyEK>7n&bDB&`S2^?jDoCS7hHZOwW@gnXXmh8kEQ13 z!Cb&9T=&`3!4b7>ISc#@8f&$1pRzJNHHktamcjx*$ZUS&U= zB^?aY!-6glfYfE|u4n}|^K9v$3@Ld*0o&YWUV|#@u&d6Nj2viKhA$if+y*Z!*e|8x zS|!M<6YGNisy&+=Sx^pOropSNy&P&SHRM$mSO`Wq&tM}IixmzSa9^x4mtAlU$OXGK zkgH|^I}$hy;8=gfqTxR2V(F^&QpX(RnMs}wsD*I6>E^5Z!_5O+20Ny(nBkg$*s*+F zW^2|<2W1Ny9PwBpQ1ro|Tw`}^cEAQ<2tk#U4Op+9_IgoNhji2tWQCt+pKk!`hUmfR1Rxzk2HqBh9lTLeGo-X*+lJI~RBsp9IUA+H F{|^y>$728h delta 69463 zcmb?^33wDm)BkqQ^z0^kWOIj{vkQcTaNjo!_odv3f&u~x0YMP(LK9vuRD@uFMnMdq zf+t7B0Ywag3JM4wh;j&sf&v-@5%K!}x@Tvz3E};||MPsWFPWL{>h9|5>gwvM>fVj> zvR_+}y{?GFc*fl`edP4Jr`$8Lag$aKRy>!a7B8j^iU-jYlEg`LRDAK<vf^)<@ddBqeQ>IOrK4IKlj-QEl+&$yQ%$PoIS)+yC#fr{7ZbdO_&@BR7m3|OddaO+PKNn zE8y;O%%(B=nDOJrOdM(F-sO0Rx~GkvJa)<*BkvkFZmi>BKKs_FqyonyH0o~RFo?VJ zEuF8s^X5r+OnH*bm`{eTBO6F5d6R4;ZxNGhBAdzE0ZZV{TtXm(b<( z1^OI)k}jf;)2HZ8`VoDXZlSNzSLhLXh@K$F$w~4Z`Izpa2kBRI8CgmS9(;$sO~0f+ zknc(K&I_fzwL3_{l7F^2{M{UGufup`UYWxP`c+49w0|B+FMh`VSIS~W)B@T`cNiV} zcpW;y3!U!QWB7ufXpLfhnz#5>*CnF!h9gN*>87abNb#cBxg@JN7#dCP&umh>qtru0R-@_=Le~dT;ic_0FY|}INWac zPa4tq*1jZ@=%qRCdW7i3x42VFr+A)IN;8vIxr^Tj-prW8pW-Mk3!E-?*E~_YrPg=F z=W2fHy2w;oKpylIKhV52$tj-Fu4(a4%^Ma_qftIk47h*_-u(H2D8mtm#y>ayd2}V< zrJWS?qqC!>(nu$UD?i8#&`EUFY4sQ7Tsp(Mp9X!p&nW1g7W5$r|9Yj#jQn6s3&8sf z=XGA9(_E!dK-FESvOsa@QKD)=H&IW1&=>l&8my)*U5`OSF?x(_D8|6Iq1z3KW@3yi z*$jGvt_7Ly%2h&5AjJ=4^r%ouQ!0Sas$cinKoY-}ieE>kLTOQYOz6$0`-_LQtmnyj zFc{lepR?Ml>aoQ|EfchuZeC4~DSoA8<4z8pVOYbhG9VFdkfFVBQw%MKT65^p2F(vd z>uw{bIM`}bY4bXNsl|EiJ|K-t&$oMol%8(*K8c#(aO)?V$n7vr05jyuKX4>N519YO)xTOcMK)` zBa3>6=$`aqQSl?A>yh%}4WpZqF2z5LZl87R z&utDtV1HMK+t^-M<}h|U{B7~R?k_Q2OFQ2>nUe0M>&N~{NcZB`Z<|JpQvLRyqDaSL z_tZwHs@>E92}|B819HbyT>-PulPYLfUbX7iTYS4lGA3ZW7xUGq`^@ z%-nQ8aqErz*B3v(cp|yJ)Xg^#^mOZzp@a-7O?6?;l?L=Udsn5n>pTX5c@6*W!j||M-LWY(ZVXj<%qXD#n)Aik~)f z$jIV%Oar6&x0xM1(&7FvimDJ&#Z&pH(x*0ERHMpIh}P2r(Zzvxb9^dZ$W-1*+}_&Ml^m8-O%A{Qv!Th@?t zDSf#tJ|2Vm?&rM~(!bR8)dD}ho;}q{0|R}2t^th^SQuhf*U^=U{&A)L@^}}xs@CP( zdiD=!hT?Yw)ou`MDyFdEsPFjogwe*~z^9|3qx^)?*5Qyatecmj5)0;;g%Sqxt)YW2 zG)h0aJezG{}sKBM%U=#C$BC zbi}0PAEl8@y5w*3R2qrW>KD#_U(C)pIXjCAF~hNd8s&J=<3p(xA3P%n^fvLV6|7Uv{WVE4y~$yI*^vCB znssZExr)tKF7OrKmQ9AnUk-5*wYZ3i%KJ7T+1i|cAv8vsL+g-R2pP{e=8y);c(0d( z!)kMPE=eTg%|I^siXc_xvGqunnVLsNk*GI+`t;K7{co?^Z$4BHx=8#IR3!NHsutE* zE!@+9bRnrBe$Ybv5KsW$D8H6NSNLbm$V;T$ytg^J8NW%^)(DIMmTQK`vbp^27NnWB zPu9jSwjg83F+Qv%>8}+EDv#uEv?PZ#i{gBKEAp zxkafj1b>vVmiouy1uLms38IYUL?jqiHQ^WYk2wUzGBUti)Ox_P88$%2l=2lNIT z>>Wy$@vYaBEhLNI-;dPealJ@QWX>Bx2JpvvkzFVNz&i-?-|ItC3v~2as&qoIO7)CF zo<*cWX>+3sLS-W%rH?=gN~Or3g*08h6Qh=$=8*-gN-QlgqJSGE>IujIqn&iZhxH{X zWG0{5m!#t{uP>=bFUkG|fGMy}wYz4bYuSXayM^e$eg7>aJ{sz%j*0K^XYikIA&vOn zVFZ1xuGFyMBq%5{oaDsK6!@`lXQ+QBzj+v`gVv7>mq=V04kUj1uSoPHdYtI{EUWJ! zV(=3^Nh5NCe>x1UU5!U4l9+)qYKUGgn_d=L_f$cXpBsQPYx z>tIp~AfnEIrbppnfoQthYT<6aYA~6WeK+{u*~6=NRH5dDS`Q^sk0N*vti;<6Aq{!v zNb+Tivm1o;QXzHmaNyy}@9b+S-=L|@nI|T`NKVK%RJ^(Sh>r`rs1wT|fAG<*TuF3E z5g$2i?>@VSBagqP8R12wmTo?aWe?!4WBRr z-Oc9Dqb2CZ%=xhvu0(k&*o83)j5p9b^z#R0snUIp?sqirE+m5m4R+5a z^FV{){~?nE4R$_6-Ukhye3-1n7igfH*FQogup4$h7wY6b470xmgz^6gX-wafq`4w@ z7ILEjc`Tpi;CbW(jTTD(F$aXLwLj+lKcP-@)B@rqvB=V~%W^4@UAkj681uoWNo}%( zzwk8Krd^a{!Y3A!9?j=25{%drdrH!h_C<|iJ#9gU;Vnw6lhio7$6lkbaHb;x3+Jg~ zESw8b6su%lAsImO`CSXiy<{9ew~$QDs=Ayw?B&FIG50SaN!9d=UtUV`%z{N^u)=FD z6Jo;bzl`)FVDFOWND?0AbEE}&@$++JhxUSKz8l}PJfath)e9xu3&n7YUMS&SC}R0f zM*@1$?0NKJi|mCt`FXN~0RN^d$Rl`cUO{e;77L(-F|WIl^tDw_1*(Pvs;BwLN~~;T zf%)_*a(gx@Hm~d=|B(2izXbt1fl%1Cb;aXi5qIy#qR@q(J4kLd7w#szlxm^w+$W(h z(OU6O_YpT)$Peu!ld6U7_btY=3oqPHx&o}vXQT};J5F3zzxPJc;?Ka(3;CJPNFO{} zeh$qHRew&}^1dfXl=Xfm9(}(c*WvN(7vvt#Lf8g!Xo`@Ai};Gqux?%dC5b`qEnkue z)uL2^{_6l+dw_Jd9&LENuZWKKqOU5j#QW^XHfC|-I7DaPgXH#VE3cs7D%7;#YtlKg z^kiAu^nHWDi%cKL_wProdk>NQ|3j@~c)KHHQ?)=9{c6Q;J4)iv{=G*@&&YNj zlhFV+enja#-w75o@jjU#ZQW0@0zBIC7H3FDB+WcShT-w)8JSb@XvbHa#Z+j=e>h8; zRs!h2SDhmrtL?^b=j4P-|CzL_Hs6|L=7OKePZVg)I**M+fshIe+c%-r7hnrX@};IM zUjADu%BT_$7Lrg|%UI+Le^J%)$&-DS>P`HUa)_=J*Sk*`e-= zB?M9mT9%MfOMfG^AXCbIBNL=`D@qhJn_MC<+3>J93HW*z{F%!V-v0*~4~q@I?+;Rw z7X8hi|AXYAnos^9O=`$ZQKa#1c)A#KT7y|&bD$uqV}rRN(=0L6ozKGBu#-1D;0*BQU0AmFmG{aVMk>~i zoP58=r(VbEJDmmzM0whq%et@~ktJ%nTreO8n5V6|pc~sK)UR86u<@h?|D*@I!S_7r z=4D1Y>=m?|HOK5C5cNjjmCloTvlz4)cv(&0TPCt}SC+2iD#HR^9y^&O`;4o) zQcG<9U+&Es#b#KLK945a63IXHW|K%0enTHNf(gtiuRD`C{T1$EuPvaoTH@@7;jq&KxO1`2mYhiUsHuO(l*4Q7fEA<@*Nr36jZeHD!#XDZd zYI|SV1|p|Lbf$iDi^xsf#W{`H_E-@l4~ zejVGF_5^A}2|ZMzzT2RpJ#UJq2KJ!rClbY9?#E_lqFA^GDG@z5xf$4`@EW(WdKj3B zUexaBlDk7-?!aC`Y}a6TGERa+&|DVKNpu@KtS>a~NeJNu>x!xdYi~f1>CvG@<@r2vTLG|^{uV71dBd=Ic%1EU&{ z9;h@LRSK7d51KS8_6pC4^ce{Ad&mbN9SXwu9{z^)SlD0r(LpS$poWnkJXtji+RICz zjn~klgVZR<4@UR$CZZ?!o*0Z0xuQX8HHfOhtqXTa(0dcIvbq9q@>`(G4;)m?{UxD;+Lg-OHykR}!x=lqJ@SGlt~{()BoFPC69>Zq2#v<{IKE&g8xFtkxuI-Wa*aOT zDA35Gs}nK$Xd1&UU`E`)`sj(E7CMz2(OcPBxJNKL!6g3C4XjOWydI4q1GQ>~;QV^5 zAX>5*REM5q4Jy^+dEH?w)g9`wuInkh-!Rs?04Qic94LrEOX}ryNraLFLZLyE$OnaY z3WJs;N3fbf6Jt=_pe0*_re56*F=nRoM%JF>+Gq*B((NA0Axg2zx%DJr^G@P-+{Ci4 zPtr5>tnOZ?2kXxoY)vskEQ8@D@qrm4Y=Y82EtY4yZ~cS?EeTd@E3t;q8FV#}#E;*^ z;@f5GnPPr2;c~)!O$%nd-dTAxXt6=I?p+PG#{A3%c`_||=m=t(ig}a38x3cPbrLWg zX&^zG-7p;!x_O;$Jpt7!(}mj=%esoHllY|JOiw|25I)8HU?>~57*T5ie_=Qa!l?Ms zaEOZp9yNkB?<`znqK-s3Sb_l^4~M8QLDyw+GQNW;7&+7~I7&~1Z7UGOV5P{x^61ID za0Cm$xUzBtJ5S>H!kgJA(TRGBkOIlbop1|FZ;<4r0`-_crk(^!xzW)qiINcfsp2h7 zyh%agf038o!e-Nxn|X_otN~VyaU3BNx8BZF7*RTo2ZKg#=E+k z*9Y$xk(x*hpP0`ct+Jf|lg}F4%em0O_^632C8m;oqcc9W3ybH^PGsH)(3&Kk9|Les zJZguY7(l23rj64J10-gkv@%s9I@c$$+S*@G2z1K(^kns7!Bm185Wk?!VG>B>b0&e5 z@#d?OSRrvCIjlC+t`9ls7xa)aHd?T-Sg{12atudc6o`m-KnMnwe4VBRl7vVXFMhH50}T;~K+`aLtrfvq0bNi~ z#26}_P$Se8gMT%d?TUq9w9vOwF*VmuVY6C6{6s-SKp{Rz#7d9==`582>jQGu4pc}G zOJQ_KJ|~#t?qsQ?PGUF(Z3#^aE0ON55aLL}B9y{kn#%M?1H+LvZ2Hs}gesl)*MHVJ&n zG&ZF{M4xp8dyIh6lOSw*itcGaN7;lRI^raRO!eHwritlTco%C5S@q^!6vcFvKrJM%{R|v+41O-HE3c$!T(X7X#VR=*1~0TJgdxESo*WJxDLLZ`B z9|^ZoQ93=!-@1o2qJM4Xr|)64(3_(})EYedUTD%9?|Lu9d^x}EUUo3St_e~t9d08S zZLcWOVO88eCSKI^xOt`q?M?Xm4=eS3%iqTKDiJpFa_lQKUbI;UwlN_D55v`h&jla%b%%B7r?sSNf*X{sjmgq&U7HU20;i%l>=-8meGm-3En@C zwn`3LjqMj5)P(W&`8?VjE-*(Zs!2Evgp?!xEa7)>TADa2MX*S9Kmta%F2FVf&hN;E zACS1AGA!SKkxLxJSvB?WvgVX|B@|=>F&OX~TaUI)ygJ$nc=0#uQB0ERu;JzPXv-Fs zIUg&J?4dQUZAyu?4-2>=!nABkdElV%zrk13rwL>ppH`pNhW%R*B%GWwk07DUAxVl& zyY)i+^Z1_nv}YaL|6n&LJ08UDQ*@n%n=;!qpf2K#q|p<6KtqZsFTTGit;vfU(*2F> z%8YW`;bFgk){>cYE%dZTaA6}_3%Zr0TqJdgKaH2QqN$OcL2HTp`DQc~jk+4Y#3Yy12d&chO578pqpUn9#tb#;{4dmDbts27XhPRoEhY2cn$X6r z!oC~(1@hMFQ)sNNK{|d*Q#d;3@nbD%npL6BzilKN`k*QO4oNRJqm2`Eiw{8siyW8< zZeG@eCPZr%ma2tiGOyX3Hp#MFJD8>ROJ!_|$z!$n+C0j5!?rZGT8^8|w>PJ`Nfpcp zqN59t>Vl(SvuFj>+O`0Nb?#|L^YjYF5**bk#84s55)8EgCNKbh+k!TY9JutB2q3D= zIlZneW3auJ$x%^-SA`T;m?`lf(c+EES zi>$D}&wi;~Z?WM{XNDu)X+G}_X5kDR&IR3?01bDA#4(Grd@y@Z71JieeU)!SO5 zW68e&kg>8ISih~F%F1#=A5Vx8^oOKnfS+wkvqGbcN2_+U--v6ELn9)M<8i&7NozZ$_iMG5ba2_;ul2MLgJqHY)>1(Sy#>I z0NirbSM)b4M(S)vNRV1`2V>_5u@*0DPc!>jZdgpPv$hvE{1SH6hF`+KVMekAdAW*! z5b~hPk8M|)ngyRI$B1p6A{YTInv?cmRdn*F_9(gLBOfULAy|=ppD5|r5NUoV&;1Cd zySWq*z`7$ey2VCJP%OpE`5!5?6JMG}_wwdx^fo>@gQjBXo!Z2ez@N*Y^~9q4Ne0zj zpFD?kTA01c_Noa^k3j;|_=Nj1X9r|*;H|i;4n0R&nV0I&-c(2h%*Ox(ykGcS#TxjpMN(^`@= z78)%b*vlJ^T*tEu4X$^hY5akX^i}{I69DTX0A98L3XoUQiN24=7=t#8DO)H4;H)|} z0pulv&O=`F&dB>XBJX|V-P0LH^7Z_($onj!>fOj|+lAhMyy7m%I~I}m4e}0jp^qZ( z=B~&qkH|ZXyppaMfc5-Okyp5=qCc0B*P)v%_dz#0FVXU$uET%|cf*_F2?s+=56I{) zd|`Kb+kb~>+XKzKV=nGN*F}+cc#i?}aWdB2KLEuMUibGv`VhH+&mKfu{r76F45DM< zZ5}z8=EV;I(L8?f*D3$T_=oW42GiR}Kdug;lgJi6bqH;W$BRQ~3(|of9zxfFL!TN- zyQg*3T{+Yrh!T&40DQ(`dlMz1#mf25L+K#5@VR$~vV)LWv+oVGFC}jN%#E}Gahp4D zq%jJ4*E~3aUaxlaz_ODGGl#H@fH0~~yg@zFPdq`l@dzq0n#s7`&EmDi)vxBb(KMfu zt$g1Y+S40~j6{4nA|uV(V`&Z{Tg~goVG(Z<%7gY5j+)f4`;3Os23V?ytZe8g+}=qr z6Uyf}{(9dmxsApV;rzRu&L^3?%XnIcc=^Qf^e!ZRJDyI%W8egO9FJ!CbaYl3!KfA~ zm`jF+*@QVjvFS37AtV!#9Xb5Xd|HyUqZB65V`)8&l{uQpS}#=@4bkqHTQmowPS1HD9`u{@@2|JT;r{#^a{{(9)jB zb{H2GN%jBD`#MC(icn5rbMdc$yUMUq%pnhfNO6%>gfe=w3SnHJ zpF5;44ffA65gq9M(0t@c>SEYf%`2kKC;eX`5LwT)kl_s%&|fkmAtT>IG-~%WO(Jz8 zGp_Z%Q_|m@Rs8=~fNxnyZw|RnMU)JtA#?~Ko*M4~$9FLYFQR7%`G|Mov>hG~SdX`@ z$J8Y>iF=pOY%8a+r?1$-32zMXf5ee1io9Vx&RCC}XJq0y`7l>LgZTvicG6O8NuK7- zmqHU=Xx_S%I$gpCJ8w0uC48_8R?)h^Wy>l$oK%yZ{~~=-)N<)1y7=mB{_ScyD3q*g zBIE}(-n0fgkuLnm9 z4m#G{`7-^T6bM^0!?&msM+ZXnSq^a7glac|_9RsGsa4BX{k}%2CRLggeyOlqUVO+V zVV??N0mnMO^ELWwwR}+YE)9ZGOJ1jT&`D)JL4FN>-5%-&(26(cd8c)*!@=k7r9m-x z@2-XX>SCT>OHUE9lYhOQa*Wl~4PdW@{2A-9O+L&YH_+SdkfWAQ4gb-1Q=@zih|Q31u1 zET#-;kYw` zSb)Uf!%(P7+bcYok|~rhx8o=f@)1NDVv;2Jog}`^ZrecZC@ZFFL?D_k-;CppPxFQE zgLI4d_V?*v(#}lTPM2PrPT+_ichF7>*=5$<3AOFN@g9b!S#?B2XYc)({wFlxV*06{ zKsQRZ^sR%1@W2Rxc38fEA}{Qg8rQzv^!jR>vqT=haSx99P3N8V(#hAX>Vv&PI`VUS zX<0pMmfKQ5MyFVtEhb4E6%qu(Bt4dY{V6T2w(fB425Mz`10i(6fejX(-+EXX!=@<4RlJ(0^<}t zQ9W5KCNOXMiRKgXwE4jqoO$>!wCDGpqx-KVOM3qT)7$$$)5g_w9kSR&emcpuCWpNQ z+96!FP>B#a=KONH=D#8X)*TLUvFlgN@&AVOoQw3q#46;Bm4xE!zodiBDZkOB6l$;g zGX0K{_xUzW32^_P(80I!8~&st?4&RMq|aOLx#se}==FpYndknd4MJt=ZtSi+OaSl+ zQF_q-Z08A7dEbJsYZ66iF5p|L%Hx1H(Z-{M?BG3JN=vfCEOaTG>}nQuS2B6;nu^<; z>sI=NQoHdCpYj3}0D}Y~$2Sz*0yaZ*N zX2Zp&DeZs>@1L$TC3*bLe`tZJWGFb{8>(n%rh;A6V!lmRUL$qQ$pK}NU9VZYrZOps zd|*D^TIos12mDYQWj6WHyt%FNFGXc*+re>gR|n;7lxxsY=^jhAn=|?=;}Wq~JTy*O zPqvv)-KKP;WU0Alys{HS=OB8jxo)E3SI7i&+hir1&>cjaqBQ@SqV#5{yvGdXfEpU# z6ib2&r46&V(S1O>3%~h3B|jvXHx&{KVvBqM%+dRlCV+{(U%4YPTn|Ui?D#_=h57wT zO^A|r?pF}WCl-wz;)(hOKcI+Rdf@}gZ*rZ9mWsuL4=RH~C<+q^ z;423mMinSqAlg1GP=?@Lz=1+*kJ=kZ%UwrSAN_Uk!#mnZS^y~c8eB~27N{f`?NQ_ya)FDrq zEf**V_}^{LeOeiVC!f7asm&7?DxCl_bfHp&n7vaAl~?gqya)vzH{V&Lq)_rW|AH&` zqqhD_l#!@r-4f+I0no~4m0V=*epZ=^$~r7nI-7 z_$l+qa%B?gGkdQd(Sc8#6=CYRo z^thSyih>>dQ@rD=K<0J+{Hw}0fW7ZEr2#TueoZNJ(>}rc+bntV<2pS!JTUkp{Y%b2ji4kbARnhsZ zIZ8{n@aO5$oyYj|gVb~ki1g$CG6yI;#WNpQdQ~{^25(hnVBlZ?%v5y5L!8;F)TQ3F z@1W^;G;Lc9aef1Q=;U3t!D@JTyOKh%_55vzVtB(?R)C72Fee}T0i@I3k3n=#|lI4qK}o<=A>;(4eAa1`6?=P!G7oDrQ4NU{?;B4 zT;rqmDycD+%Lf?eg|AhYL5h7k3Us1L3|q~C;hPAU50wM*3FIUBwulQEU z;&1H(e}t;(_nnf#o%@wk-@5`*x&N6zvXMi9SNBZOK+}Hqy$-K$3VnH7A+Ts z8Hc;`X=i}(6(>>6XQG-K;RZW?jrzaeuLwc-=YC~SMLtYKKxo8gN_NL+NDfDjfF=%M z$(j)-gG0YKeia#X65-jccLkKFxG8e))4H)Aw&>NOY!dCCI`rl*aUH_%?okjk^l4L}1kKN=#js--*%2 zpcf$!wX-$&;!&;|l~K|8ihW8V7lqMEji z|4OM_m7A^t`sOR8i|;kjv-I#l04R%Ro>ihO8Yl9Cua%m7?m;EHYsG;7j~sDL0DkG9 z(zcp5LqjT?TjJX(aEc4#wDxzbwB`Kp?@CMl_&3TddiDeEJOtIHgm*loWROq!&4-kk zY2RS=g>xeiD=zIQQV^O$j563g{r*Gz=R-;}a){SFtlWhMKa3^mFh6@(Nyk^z5v3KB zc|PnggzcCk&?ye{?~f=q3#O7>{Y_p5eC}{gu%_S zLz$c$Q|^uV_7C*RV*^zTtEh*sIi{@hRfgbpL$N}R9#?X!a`*1zb~6cFPMW$Wl-j;I zAEFr{L%>~_+&7=V%2m!EJ)zWztDGe;;iFGL%+>o=GSIH@H2_6pQ1aaT=#_N3Hts>q-2-z$x(f`>&)KuCuwqU4yUIyFqXtE5`?4@yo| z(qWV%1zHw=`v>JJ`i5H#R?})_p(hzDE!tv$>cmUs@vY#)7%5)mBX&Qn z#DfLoEL?CJ%GeS9(2q(jOrSMCLYY6r5C5qA*&t$s{}->Eol%}YDk;_ch87wm|ivktQhXR7dZP-jc{H!utufF*;SS=B&g@gS3 zud~W%UzNE%@f-%jX)Zped`7AfLy}RF_}X8je3Yap|3$f%zV{KISS|(9s&c8u*yH6A zVORf_EA{B1k9hs_N^QujLFXmNqvz%9Ej_P{g<6yHEA)YA-s)GSeFW%p;!}$pBB8G- z7nJL39U(GiQ4?niaOS!NB%V$>BTQl;p2GKI0I3-lu<$Ze2MS6pcGYfO04}a z@!Kydojl(X-Qz_ZnADp}FDmt+dzvRMDm6&D$U^utf^$XKB9Wo|=LGo^{2%k=OUiWL z?49_kA}$~uW5t3iLWYcG0w59KUtdzj#8h5yD!L|w+_c}7h7|}}+)yF>-_+KNn&SAB za>%ULFGF~j@Q*JmZ9zWm55WRv!#@<9s18%}!z;=g^cdmge`04i_fO?aVgysfS%Ei@ zHGJ-0;Nw^M`oAzc4+$@~P+>}7;L!M~zmzlJEhy*#^Wxvis36)LqN~fa5~AY-5?|j{ z&EZ)Abz!B1<4EuTLXbezQ^IEl)j^d~%ws|IfGSEkjapVUC+n!3A}D2cJ2hi*O|^zu znxhUAI=QE=`g{x^y+#1ej8Kgzuk+>YpsG&ERT;lfS6xa<%=vlhH!7a_jnrSMDC0J2 zhs&4~o2q^)nwZyKt#7{4T!sI$gumTNeF2Y=t<~*SOJGB&mLd<2Os=$57oqBB+Nxd@ zGgo&|w|c75>#ja(9ZaC5ebg5ev4b)Cscpsdc(9)uiWn4O!hKq}(!_EyR2>~1iVzgz zFuK3mmt5f6?!&>X68=ShwGCin2B;Z;-QSoc@EZrJ4fvD+YPzWUsR3#$?dg*kt`uJX zQ8k@m{RgG9W+5n%4O9atTW4UUvb{yI7YC|?A+4?qR9mC1W`oo`v^8pwY-{Nt_(Mbc zjeUdE>jZr4&srjHHdsv}Yk8l+YI<^Lu~!gq;;-12IqYqj+^nE*8vl5(dWW|XH19e@ z&5c29z9MFZy;A{=viQ;=YPz;vP8I&o{o&pq#IiEMCJ3BBs6@VgsCskUcEs|*V-3?i zrYANu{vD=%gZiloGfDYy^*IkY%IA$&>*BF_yqb~n8Khqnpt`~hS%eRH-;E44!23;9+cpvwy&8ILVdOJ*igJ+9vfL(o82C?qtO@6sZ%}%YGc&7_fA>oPj{-qmse-1+8#1<+*GxBs4{@OKUHlAQS$3l zOoxy7ylHA5$c1mFskmtnggZH1y%otlW=Iq#&ydwUF+;ZT;S9AKaP!Pm>(XT#cxF>q zddem&7viXbh#fLqc&p|vi5kaN+CbQ$!^YrnHxngZ3Dt4%1v?vcBwnMA!)t9I)Da!7 z!-YfVqHsZ4>|L zZp^F`r!g*Z{OmngUqYe2#cf$U76Et>#XUffj)nJtj^%vyJ?dFO-9`7R-4a5&1I1Px z(*x1v@b>YNS!$AxcC!9MqTKZiRh#l|_o+A1Uw`B!_o<2EY2K$!@J3eg60d(h1_UZU zM2OB1oQ^sE;QeZgG|WBSKHGznGr5W`w)ChQOYW!ltGQwwy>h=4JCF%&x(RsuqPr^a z*p1<0D=~e<=FQq3O4Uv`LL0bHcNAV0?@U;HpQ?(kiC###v~QN$GGXP9AXqYzt8_ep zH+(>4wg>}gG9UGT+B79%Evod&UwuHWCoLBs97KU2|343?ogmLTK8PK>Q(mC4hJAg0MIsI$ZSVC4TZjwSVHt%@C9rIDeLLTDdG zikwH)nwUX-9~HC09RH~L2}!rEtniC-5#S?n9B8K|4&lLuQ_lO%QSZPN0PoIGdFpvI zpQ{v-Aojk3KLi--TrkW3E1&$hdLN8tKR&K*)R(*?xUd`=m{BNScM3wH>fPcgoFh-D zHMBX%!u1zNo>2AV)}hMKt8yhMdv{s!-^df5RPT0+8~o6cflZ#d_(_!rliiZJY6o(` z{Aw;lcKk(&)*R~p4KD)Jf9b7xkP!64^}O+Xb$kt2b8~2+5|kK0YeF=+3c~sQe8YTo zg1;g=l$uwhHi_*h3b_KX%3{J`o7Is|E>d@sSl)JlI!+>0h^l}Te|3TS<8=qOSdx}v z0*I2kaZ*IGo1x&wCF8Q_Ei5?3nh=~(WWVeTW#Ohvw{c8<@Z(RbecF}*!lI+NmgAzp z-Wn?DUc~XLheeWgzsPBvEE96+ta##Xj@ygX_Axs}6S#`bD3@)SrNt_|FmuezMe4U2 zX=(nmRDCBJYr)$ufhi{Nqc5o$F;)a1797~+gd!TfTCHW9$3!9|!nzG=Ex3K0xQ{^^ zSrqZ`8$XI8)UmQ8gaS8Kt0|0tKu*4FHR|8V%T}xJfx!#csKGoZs06(hHZ?IFD_3+y zRD|=;vNhew3ssAiF3Filb@&sGZ+i@fGWKxc-hti68XlL z)&1mG^RZXdbeDI2Nkl(HXR|Y_b~U6xhAa z4{|(Is=g!U`pi`WEz#Q^F#y@#W z9ZqMj;0-r{(M$L+6U&>%7n*8q2qCGS>^0Sq5fCFcVL8_Ls!dXN`(%^)A#L!r2uObw ze}o)S;p8*$j){@hg3eKmFel7`2}`iTd+(?%1#*|)QR`Pkiq_wvrjk#1&n>tG)hYtn zeCHN5&->^qIgSn~Ecu!(YHltFiB%<}6xk%2dsmc#fKCnn#FG^G9`x}mThv;<*RB9Y zn6o!YJI8>tYE9nnUA05;u~b}3^seecXZgG8ptvw#5oW)J0z3Jr&y)o2->UkcK4fiG zGksqQB}8mN*T~8Od(8jK8o|tydNP=vItVG-vOrjUY!` zyr(wE3ad3RM(tJu*p%haovJwGDWuCQ{Gs>MdeDp3y{9JP@!@;wx4w&lxy05Z+@pX% z0w~!?G$iXy-!^p>A*p=B`)cE=Mb5tuRnN)Ox2rR9aa({@R-BKqCL^}cEtNH@@sV&s zi2ZZ8w=n7-P{U^CQG3)3E-kPbJD_*%<^6W3{mBMivP0cMHkdbmplS;FjE~)^-h%aF z`%d*|aLUp?yosLSsI2ubS$6L*xs~x|P3tFSZ#n{|U0u?DHw4#x?8?75(G0KZEjK zvQK>yMe6NW`%ye+eXjma$Xk5+mzar%_@*z_2gpU<;sACftNGLeast18031`!zd4{D z5;M*GO08RAc(m~OTBM9NPUV5n`Yq|HHmwULfQSA zA3dt3SMBtyqe2Yu7mi|s^j{$weXC~sWLT(JoUHiJvEQnzQ#L_aFfiK;by^@h^vb3M zYV(@M)K{ahn7_g1V!4GqT>4_fW0Pux4nBrvfkkQort5wlIHRV8u8P9`1Bd-_ zJd5i;tAT=g(&(#+`#vzmbLc`X5N&wG9TIZUwa`H=;&!>9b+8T#0=660B*)o);bO%( z2Zx1>HTCm@QAouph{#mbB9*^zDiogr2d-f_4SiIHPX?|s5k%~jhxygc;`U@51YaG* zjnRF*9*K`nEN?zU{no;behF?|I#CPf31pTRrE@0XxWADzIq2*MI9viTJs89q=G22Y z%@~ZRH$l`JFdPLvy$QNkoKp{=(weyRL`MLw9?)@5wH}bSHl*sc5X_8oYPAA2b#EXj zHjE+Q6gQwL4pPXb#SIU*FGQRghyJJsTY#8&dSPM`(o;y$7YUZ=py-3wG7Ht5gRzV_ z*hvhLfMY=R1=L93dp=f^TVnA@0g4y`Of%7jsI)Wg1QCr$rm^k>!G;i$+TswW?%}VV zRVNCPJ2q7;gM$agc*6->HH2 zyCFPsfDNww_H_3O1Nu6auV;(iKb0P4WDPWR^b5j-Lp*k21ZN=q?rjELg} zr`6;{agH5H5fh9>OfYdmROlU2ZGiz(PB2z=f+3*zDuSo`qiN{Wve4Wuc_w8VaN@mx zRMYELo<;WN+7c>a{tJZ*@|6Ogq93L0PP$~ILNfV`>bhQ>(2tmjrxhc-vZJgY*N2L2 zs3pV2Se;hj^0g&P)tOKDXFsWVeAG{BdZ02xRbW=ZQ$mJB>SH!$jPtW}RguDDe^V0{|E$KM0_epJJxv9VKu%!kP2t!5 ztoCY%#W*CoaWF@+A!J}6Po!%30dZ??8J>0U+=6Eg|KMlXxi|C7Utp|D;rYL)z3}zs zFX~;XP_=|~6C>C;E@F+?`6!3Cs99}skq{Qg048Q_J%Gg#Yhh0>QthR%b~kSZf3_T& zQyTxM9LlW5|0q{;>IqJj)4jHw=^-qwW084aAb%---va9tW=$Hu?!1}|Tk*K_azC}` zyxKz1^t!z0f+U321f{QDSa9GL9xE)+dh7$xGh+0(!LJ7r_1f|ZU*7SYTAO$LRb}Hd z(FM>yQ_2$Iv_^1;7Kp#9oRs@=N380Jp&B0u#DL*(Rr#!7BJMSaorSA=;s?Jz%U^^Q zD@&Kx@zl}dgnE_3U;9-Z0)>uVP`lAW!h2r8{-N^V^2aX7{lkU}YM$$RG45WtZN9&t zt`~aa{BvrMzkLz=m9P1}i%>o*vlzz?EQ9;Dt5LkcZ`ge~`QfwBnD?#2S__wa1Ut@Dn0T8-R1xQ}Cm#zRZivHXNlM%MEuy_k2ijE)akU^^5 zas8%zi2$};5hbD!u8R?cbS!@oZeO*#7Wlx_fKbQVTvA*4LgoRmymTHFUQ+8oPDW0s zb;Jm5eM3Mxf8vsw;St2JOcn?-DZiv<`9dZWyRMAirS`w{3j9seepgGX=IfWSI7XY@ zFJng%AKppID-}@nI>N~#nEmtrP=ynB)gNkooE6;vhg$ENu%2~Lh(t%ELACJ}wTUle ze6dlQdIhHaat@SsUX}Hy#D@Q=_9P_MJocA*l%_{ey5dz@wm`pc{#CnIy*vG?%Wf5; zF!JtnUXQS#@638|m@sV}!~GFid<0=;!B%m$O=#&d4Nsg>@FTDq*RhE|BSJa%8Vff7 zP^kVkAg*i1rHcZnzxacjtYy}{#wq~`kAD~v2bBG%BxFwkDK7XGmE3Er-%wBmv<&G# zN>FM4>ly~#CMp$s47>SO`Ti>su$8E@T^R7=s;$HR{-*?NBml)_!dBx)1z-WxfN+(# z=jb^JnIj;@{gM{s6#*F&0jTHu|04l)0az;xxIhpyl18}9`Y#EHh}ax?Z?RS53LCJ% z?hcG^e@jRhYH>g_TxF?%6uOuV=*st>mVjsnmoIhlQ;A^%lP9rloRGZQSbqijxWR z-VaVDOh2(M)*VaLFc*6wYmLN7G-jbxF0cbm!X_?E?Ien&*rxWZDE4Hw%m8B0z@*(4 zl2hnfE?XNCSi{DgyAv6g5Aa3o#!w<9nGA}E$rHx&EzK_*+ ziKz+nF7fAmETbiMiqHeaAfO6y3jj6R33`ezk!Kvnxxk1|(U9U# z2W~mS&-;kCebimdv z%5uf?P%29g2=6SG7U`-D`+LJLxG&Ih{I*SlM*<=6x1{5@0??s#8LS2#A7`+J@b6s7 zzzYN@e@UxNvRh#05K{^ELZ{#-3H1rW1MhzHC#@J^$ga<3wlAyFNg88elx#p&aP0H?Dw_8oPM2qTC;`O z70hT9;&)-BMbu@npjeyDCWx(&3{wkHUR9&9%c@lsd54aywQz>q+fiO>C4$5uiN5YAv6Y)V zI~F`qn2_X8u&~N?$MfFzVUC1DR}i(4#Q(mJ)skc2 z%@z|b_yD^gxHi?GtI<)0N{Rk^_bE|QlC)?0w4WQp4K{4N>9EKRAnrcd04 zB3Npi%R) z)d1Cxl_5W2dSGv3u3f@#6lsb1%d>1det^p?T>&{LhV`A5z_f(_uo6qA#xqu7L4=1v z+}Sv66+0dufm&!GI%4*Hfvr%ZpA}vmhk?i9{eX7A%$nFvGQ~J1BmIr7thUGR^6r2y zPb`+N@>wsl`gYiU1e9p==*zfCI~37xX9fOYS+JBy1E6B;W73*x`4k_0g|+gB;?hIl zkUr;+i)mz@eTBIMpa1qMTaf(s>p(O`Fo<->DaIyg_2Hul4j=tXG#L>6&TDK8UG#>j zzs`yj`>ycepR!E;#X45YKEhz*g^p$Lr~YAy;QiL?*(1dN6S`R6QRoyuvT&R6`zdqp z29`~6hK^r)6Z3p7Pus|vfzJImO7*F6j+Vh+-pF7UG0lzaKQz=NezS#jQRs4FKKu?_ zOMUzdq=>lFI80EG${fFyd7Pr|nIB;OM)C3w*jrdjR(~j)C~2&v@=G5w5s`*=YNv$e zj!Re?r6m_Lr#CLQHivw~N|bA~QTG!|RFJ)F1`q7PW#{Yow|m({kJ~%NbEkcmIC76z z88hu3fN0N9x_&3Wv|nB`SobrQQLs-~@FfD`K1#z8aCt7{SvQ~><+zs}pTAf7)ME|W z-CIOG3uq;%`ISF=MrOjEo$Ki#FJv)tP%(i^#=7+VS)TC)%XFeX-R(E=;~5YyMFPK%7EEpmo>Y8nSwKCx?A|21nCEE4AcqOnZL zP;Pl~tIP8fN`)sdcYecKN0dQ0^fzo?k~J_oTkZXUcuv{F!=nzd*>u_Wyx&ol##bML z*jU1k9%4!0%ij*+W_g%vZauo(+K#~JT*xjKj>|dLFQ-n5ROS4Wq z%gr~BVnJyntb<}J4Fhcq>|5f>Ug{a_HdbsZ1Iri*uyaX1`JG5^+Gegg##$0PoV@a+ z;V~!JNV}86PqR$(=@aZ9N`B%CzQ@l49O1b?u1NPMURQzp zG4|kYPav}PEWY4Jwwk_phPU|%%vHVQDEXGrwWI{gg*tf*Ifl?|+Gj6Ha$rf^K+-KYxkM zs0ODb-s*QrQmJGBr~Tv%Z*ZCA*hh&Xu*z&0a-L%3As*Ubfwi~(Qt<*+Kig52sv?@; z>&w{kf6W*C!5YPh%@}@UBT*~~-Mlr#mhAICFmkY7Tw%L}WIud`J)rHhA__+Si627* z$gw}!6lkRV|6<$SVEP_V^s!29=JWq%HGNfvQs_BCwmGA~0-lZF+b{XUf3pVm$q~Cp zVK_y^F#Ym3Mq-YT2qM7DVhSicIWEgz42S{$uoQpg4noJ-&k!L#?;nCRq9E>WRXgiD zXaZg=msZycQ^CjIGp#ZcKCfYp*4MOne`Ro84e5G(vZk#Tp}fgX%@F$^V-xrJwPe2b zH5N_%E?(%=#Hpbdo!aAwacSt%njywztVUN64uHag|1z^3)jZ7Zi&2 zi*Yks`?bv~J})Goj%YJAQ9DfO!6JS+S$kYN`+=Y^f1;7r5OdW`(c0rq*WXgKcJjVv zOFY8$+5bFCV=82>)4aKcmWcC(SB*@gEZDm$i?fRYNT}7;@O_%9iC;UhF|`D%*&t2B z4O(Y;YK9h|Cr{>lqt z1rI1$+C1T8dOAxBJDF?}?$6SMrSh*VZN4vzvslVr;?L+>5%lJ|0q_J4qy)5SU?A}e z5|Sb=Y{Z=Ar2vXUe-G5unq`&9pu{g27Ec5x?qi785plX8f~fEdKE0;)6-K*nEliWo z%)_;`euN%8#p`El`H`$ynvK~MqSe>g+CY#(hz1csFsP0;mR{b@H`kGbI#)*%p^{MJ z8xZ^=V2;*@6oluQ>_k|xR&B+4?6o4@D)w@b-Y$7W4a$Ht+S#X+>}R3vg}S^i6dm_P z!O76u!?2Z0^Ux;yXCU|4FT3Rr`XNkf%_8du9F5a<)-k)H>anRd74)6!%oi3hkea_- zS4+?jA~07PF%@GC1UGEqVugU^{9*BgwfRV0twzBnA=5?FvF&QBw)#kF6v^5CtV3k5uc>JpH%dQ@Al5tJ6FMl_rnHvM9%Nw=e(V(VpLIKI1{ zHWaH`_!l55zw$ZtwA?C2hpqLr+pc{cpj~~;RhTA5*4G+mL{w|j5Wiv&vQhKb>uWWH zU1?{1?Fj-2I;f$x0w@1|YY6@i%i6aaNm+ZTk(P&f7;LQd6bwG8v1D*;R=Zo0pf>k3 z(Zuc`sfqST(oaNaxI$;MchxX8oaXDBXtl1f(1d4{P;<;)O|?=&%TDuunrSKIh?(46 z8!rS=VT-DQD24yhLaQ0VK`d6sU=$aj;+>8|`=L9)(K-Q z%hlz(TWHZ}_Nz`(#!E{_^-Aju!z%o$p*2Z=9;+- zj7)4P5jqb;(O3N2E?OSle1&_uYIQAxF|!n%@ENv7~K~9o37f(3fo*5GNh9E zF$goeX%}4>1aJKUQ?AzYs9KugXixud^aosSKGnQTpeZ5OJTHb9$z$Ke55*JO!}swc^H z13xEa%Y>E#wffpz^aHlMxve7)C=b-q{o$opl18YtsaiUsRV}8M5$IuE z!o((R38}hzCk)Z*rptf}`U~PxbmhU+Kg&Uigj!|gl{Mi3B~J&IL5Le zrb}&JAsD4mL$!RE$UhmXO~#|m4ch479`gTc`|RCf*9( z#_RWa-BUZg!B9~?$Y$tgDbjxGb(3rD6m zrOyADxksgchw&UZKOJ7>G7m46o-jX6cOJFhJRb@uzQX+Y(dk2ysdIL-{tMFi+;ics zai$?b0<8`KJ}K`kNRLXtjtso0v}HkB>G5|uhmgf-9_*v1*^?*-LQfr=KDNgvbOxr5 z=PWxmO~)oKJ2t%-1oO?Y>ACpg@tot*D^i>8V>^#Sy<6LB7pCiyuy#f)N`I96lJ$4e zYrf<7#N{OGZvEx2opiFtt5H2-w1snb0ebds_HrRTw+F3bw4j(X$%P8Fn;q|_=k*Ae zd3g@X=xkpveNysjcDN$Me zc<=N39V1AD$m$&aZDP7kET}Ypr*8b-lo_1<_Jj%A8ntncsaLegwmP-Dt zedKzW2BoC4cEvm3h7*T|BPI?~Nv*{d2 zD^SD(n{fFSZb#mnc9Pe&f3O+c7r9@b3wd9rR9tc%=(UV2u2~G(p4qt2>Dr6ac!7Iqg3W$2-KTxwW$E*)@p9OE*QURr zm&D%vMfz{4{?dyJt(-nx`dQ9%wg#cOU) zf0AS~uf^qZHFp9MC9b;*f^<{+vv;MNr10yn;YYa9sQ*u4cp)?$1LI$e?Hch(3_`YF zaWrya$VVp)_P&%|u_Hagr@?~bD|{oGe~lasjYctz8xkUbP9Z-3&d-k(AMkOsaJ)Nm zI8KCFRMqrgx<6YuHz}l%P=|!W9!&Sf-u&VR(|_vHqvJ)TkjYGX1Xk>Bw&W3*dK%mE zNcwE}&wKwK+S7+@zu&_;{Z;#szfW&UmKA&VQJkj~SdYijO?_i)ulVAPmH>nM@o(9e zt-^pl*WE`7GNpX?i^s`b?Ec5n>-FE7Z33dn@gf<=pfZI1si1-%8s9vE?X4266ZTuiRYJ z3W`XEy^TKaW(T~TzJ~7`7jr&(J3YD|Ht4!yM#^75BcWx!lb%#kW1^1~&3ZpQlvGn3 z=Lsd_wfl;L*i-MNb8N@^=`8!?owV9m8d*?R_%cP8DRm|~-lh2?ynxWql`S7DlF#ne z53oOU-n-~zn%(4-4Ld^iQ)3K1%nFq;h%PlS%KxZ3Rk6 z%jszB{^)wAHZH3G1R?uwx<@^H*~OEu*uayVJu-HCJ}0 z_l+7H&%K9ov9kb9yG6=I+tay?<;2NyOBCg-@lc5hhv7S(?e({s^5O%^R=@I-SYYeEK-S-JBq!Ogj<()5fu)0q%2X{u=Kn!{iyZ`eN z^p;Q4cXT=HKlmu|XXzOw^6F^7UeJTtSD(S#@IIUId3p>#FR|~Z={}{I{BMP^-@Uv7 zWPf(a7ojKdhA+~Sf8gys?REc2*H$I9_7UHtZ3!&L5rpleSBU~C9{3d4VCIX$pNKA1 zNjQRE)^T+=f!=A~(M{;f9+3pv7JWk!=xj(h;!V{;Ju|uqbPEmpcC@$;JEfa22&>`p zZUWs4f^tM$Us7VJ$d8AD0gyJHIvppTdYn#AbAEGr=2<$4P`VZHFV%wCt@svS71Xp| z-3460$PVu=Oi$j)wsyxlJ@YE|ba!FKJ|!p|`Fc8%=vbKyP#3eW`t2#zF%jAgX&=gBxnZ>%#&786|n506A{t%gnm{y0nGZDtnhz$Lv~HA za4yXCZ)*j5?YB%Z&9nXRy%ib_Xs7ios1r1lyrNE^H>Qv4CD0cf&)5eQzshdhN4T?; zxS^L&m%NKz)=T&)tpCxy1rwguLT{mIU>b6Z--Q6>c~qClW)~T}SdLEn-r8IESMt>pA#`i-*cefwbPsk>@WPI?BO>;Vu2}5R0m7*AP7^3~nyyX+(B$+rpHMaI zB=j9!yRBZ(`*!Yq5i7R2@a@S)p)Lb21ida*s*FCL!>$+!#B&A;{W8UqVa4u3Dp0At zo7eu=fx?-onir`nbX{M^q|i{eU)U%#rD{44GR@fVuHpV6`)r7y*L+50@ycAOY&|=2 zD29ADTRK$uN&I%U(!j!I;Fe^^SeJ5RGtlu3f-M*#s4hZi^zqV}B9?}|u}OFru@TqL zv({mPi$gzu8zxkzYRNzQXn@3jcq%| z_Lx-i8TQ#|p$Qy*#2CS@Ff=r7?9ws9$K_Scc7+iQcsn5-X%pc~(_2%`9fJ#^!E$(I zESS;m_Nsk_nq&!kl-Dp$7&!zx{GAbW+`k$EVT4j_$0)3Tws8W+S1vQ;v*hk}p z;i+!bthrI>TfQ#P%fjVYjhbwHX>6}Na z6k7>wy(hG`g`fQ;6NCIE;Rk_vWGk*qY#7&&3vhZ_h{WU_jRB}ao%Zb9l$+273N8$tT2PIn@YZ|&Y|Kg?{37m1keYn*PndVzl;o$bf zoi0n;-#iIIKOGfeqfZuwOCAO*%A0?(@I)%v%0`?fSjiLEqSJ(f+b8@XeO__|oyG17 ztA{473(i$E(?wd4!(qz#RY|c8pDo*!WV2sLk87|06C7;&#{in&j3Vif0-mP`MmHXb za>A>+pb}#~K72gAIn|3G`ITQ`W>~EKqNmbtSLG=aXL`amb;p(y^+SrjQyyLVg?D(v zI!c#*wcqkwdU;iUD)}9~X*XU-|EH=_<8faDNG5DNZpn;CqMWdOkWgs+@>kNYcI{oc z@rm|dpC(MOQa4`9E}GmGw{+n)hz=vQ8xh3bQ{Fea9*0N)R72nq)!bb)bhkbq!%S zT&jf+V8>serQ5O5R=QMc`%dBTEak={qVHj)J1xY8gZ+u1=#LrhUlo-PP^sIpM9+!h>K1K3v9-{x`$~Q+GAuLx??QX} zp^$yETV8{1fNRZOgZiIl{azP_4;AUQi0GVE^m;uZdf}B2(efCgU6tw`LiLKxSH4K# z&Ep!ep+UDx;CS>=-H+#m(Sud(b6ytI6jzz!O{d`z(sW?Osb+(o5k_#mwH%1XaP%(W z^dxTeyXiF;1D*PTgA0@YDU9XXUaT-}yj=TF;dm~AVp;X9BSYcfSq z$bqYv(i>l$EHy=;&$8kL^d!Dm-u&x-u>0Q-hE^DT>R9hLg_pP{$J>>BOCa~y=(mKk ziuHb-DXMXus_cbNX*b_ZwgAmyqM5zKUVmE{gCWSg6Atgh0b(C^>^lPON^W?E6hG>0 zFLvKMSP_7FcWFFYgJ@_xWQ)BX#)ld`Kca=F=hBEwA7; zXhBbY*8b)D!h|lF?f(cVY2U`K-RD*}-}e&x(TBn@bvr_GZ0-xE2K3$Tldz$WuW}=& z=0ji&5Bqeiw|X|=qfjY6@FStMLjLfwn^d~7koq>e!CAp}5|f5$QAtc7>YQKl+FwJL6NRk~?2TLrM$(u}`767tQpiGVqcO|4cXq z#{9LPg=6;D&xHM;mElt{gmVDt%I|LQTxt{$7N7pCs6%Md#_;#hUD@O>g~rMzQFGm1>d^nj$jg+6v8IeHs#K+< z#{XFrOMWHHNxsGAeFfvSXgzT92hXi%zxpaPUNK2?li#pjUkfv#S1?JM4$dTiI7&x-S^ z;PoBdRUDT5w0%}r@v^QHLOoL|9$N|ZO#0{?DLYl<#zu&D;ptwSk%!Uk6eBwl2jC+? zgR8|Os$jC6*i#(e7OJ$-yP=2I3!|xYr7-7Sp z_J#uQT z_WV=m*LkIe`ayg>7a7XAy+svtc3*F?Ira3*m-P`(>O401fC`3}?wkqF8Ajfm_HBK{ z8-?L(OzdMyR*NbNAqkppOI|7lyE%hDM zWm1#r9~u^lrA}NiWY7l>6i>iz;N1hor|8H61|9Cf3kQj_u!?sL5{o)PKi1TMErw9R z8ODfQU}xEl0!1Nysx4Qv!)*RW$6Ls~q$QOqX6skaWsD!+!^KUgHU z>lcGX^3*PBf}kEVL=3M~o-`az+Vh5p{q}i|Z0r%6mPy(~9puqw<5tiv2s++m~${i&-hPF}%or_gJ($zAF_68(7vnw`@B)J5JmPZ``Hh#3@wQ z3*#`{@X9oWR5hsyR1waNLmhg!NeoKU6K-`@D`G!3OBQP)uqJkaEVk?oGaO^7D&mAp ziMQ`<3#QiZVRtBEGdBiew}<1+&Av=m#d_L#YDn`pH}N&}bEskeQN_WKw)J_jzRzP2 zB^_30U1f{0%QfpCW}EZkO+7l4D4h4YflbmxId$esY?UU`wdj{=BE9VQgoZKi#@^7d zW?x}hJzRID9_Fpk#lGSBy98-5bhZ@KP~6uD**xCC2b;f97pD{A5A+c6Ue||@z~{Cu zG{8>L8M;M09lBrs%-%D^`qZX#S$7lDgCjDtOmQ;~4*uN)nj6@+rZ^Q7-^qh=QTxf3 z=%)97^3pD;MDzOfI}+8Kzf3l*Ufa6HZ8G${=V*Z^%Z6*4hN`QY>A0Th%ckMUrlq=` zt7vwiz3(JZOm^{3^w@*Ph-&-1$yns2=v~d?L8T}&rixdL{NAX)m@3|#tO4pK&p)xL z#aX>{&B^SZ>EablKeUmX4-lv1$}x4n8LRh$`C{&_qs7CMKNKh1e2h4*eb6fLqaR*$ zW~(^zdk+KqS*vJOYJ2-9t>U4{ZcTGr{nf2a#Tj7i=mp}4?~T0urUl}r)b|IUzfk;T zO?hL)72>G!G<)x~_TyKGcc$3Xwa~>nPip%qYsD2^%M#h{Q$({ot?@K5$EKVrE@rFS z#I0<@bO^D1){7IqcMsUf>&1i0u(m(GUc3bk-09+QcG)IzS$nU|kXvOyY{9wW&yxxE z-VAXV8~79PFYL$#;^^;R?-!?v4P_|X(VL&9elX#^b%toL;}(kjr~klZ(A2uxZCbXp z;I3TlH?=NX>iSK~S9)yQJh7oYbDnr^QcnCpjO-8Ri%Y)$7|g#wysUf-KD$7CqiZUW zV6R*vURa*F_EHgVA9f}dhEc0;f95h#PygVdv#%0oeDCJA-*lCDOgXW)gKK==rM=rW z@iX!JV;Xf2l)bWkv|sr<$kWu8FInSuarm%5otjCEOe7N36EcbE2+zTvguhPdY}t14 z*=)+wK!rrv7y>YrJ0^NMZB+;$6v> z_RsGZPf90SSj!_&!tS5Qu73ng`uva@fYx_wAee9*u}YRZL1;H!+jw!6OK-zw8NM%4}jAelMzr+&ia)X&p*~L^^)u z13(#%0lumTaU0tp;Ej?y_??_xYSJ(Cy$ z_^?9O@&~d1K8PjyVAkW5yPfTLTI@Y6PL|Xx`u!VY#fgsM5$LE&p!Z{#X~py3Fw`=T zHU3D{fRhB*mQnp+V5N-LK0^Q*8u*zSP1XPy=VYuAy3Eg zQ~mJ@IHCtopf;*2@n*b089e7j&j6ke?SF&kjo@4=?EfUNEYA0N2Gt#(yYFI0Z=zyO zuyOc*B0XK~z<|Y>#L(jNS4ih|9d$vbtz%dyf87P0hq61^LeFAB0C$4j6ocifopXco z@I>I53_OP-BuUsGVLptvMF~5QFarr&uu4bhv20P)-C9C~-MwMhq*5w*ea03SI*b;aqPj@^~+2RVX`auNI-2 zK5b=?dxmEcgHYX{i{TvzY0l3>NW}6aupEbQEaHn0{v2@`;VB4-svU$hxAe=5C<*P| zW%Y;`M*~r0IZ=V$D8T2m4*>WCQm!0}^Yli*^Fg*^`2;^J7Uv_L9a+*>io+EowgJge zC?Fz}i-m#XOMra6&IQ~tgc-jXc;;ixS+R;VuCCMp7x8`m3stUR(^#oXybFT?8OpjM zXasq11xT|DXC&c<@99iY5{ zWk>B>Rsqq8faL6nAdA9!O$E@i0LtgN1nQht0rWzE)&Yi(SDfO1fxLcH9=|gyl)bO4 znutZTomT<$(IRN2YT{L15-S^3oJc%_vNYP2%EpEKl~LKF!*U$>6%_ui{>2Ml7ps_; z{jgY;H)Ju}_62xMrCCmo$|Q0e4q*}0tAMpHK)JA`62*DEIR?rRjVZ%gB*{BspuDXU z0UDq38KcsdDod=cRM812 z9A7us2juG8?_veY#m0HD3i+r!`Cs5K ziNSM?t?i#Ez*o|1NH~NVF=Gd zI1^!CgrsxO?;A9V(*?ytp7GsAT~a9#{g!LKn}!J${o<<3k}JL&o=;S){cTZOB0LEZ z74yY#a~YyL5a*<^8E|A-)*_sXa52KcMI4vlnUfA5%wkqzz?GdFccp^a;}y32v2*6o z81U;rN-X3CgcFO{zQHpmkKMoQTy|TmEP+?4CB}R=@_0wUz2G#8Cm>?KkZMct+>|ND!_&+0@O0p5>xAfSJ#vEWLP*o{L9v3aM#M5|5t1=57$Ip>3PNH% z(~9vU5E65I$IK)KAiNN9T8vBZNA&+F(rHcb^cEU_%GiJmT3tNjS9m@ce>0IzL(J1} z#PewUH6ooxj;G&*XBB@Rph60H`qOwO{Es1hL@fPzJXhgwaRwQ2M6a+uFN-6xYwZ$G z1sEKgvtAZ^cXHTJGW{+GXop6^7c0xWBK8g?!_CMh_CUV|o*hLK7UG;O@U?k2;5k*# zDuZ7Vi*pLTAMjk|Xo=;cinhe2SOTx;aTE}X4JcW;JFuRTP&aQ9*e~} zL%nc6&b-k7zaA4s)*_Ls07v7Q%d6#hrpBB*K9iV@@I{2An=~PP3_|*CL>iY}9N!Y8 z^^dX>i}1`V_wh^}ZA3UJ9DhV&?5?9h-2uR7?LX)tNANA4NjUxkAyvSaB6rA}m?x5R zJbl)Lh{7*MT6`%|dK-~G&$t{3)T8b*qY8MzYmi1mEl!N`^9ZRNt$9jczkd|pfp7-m z-0OhH#4^Bg+M@V6#Q8`e%D#C*l!ndtMTy;UB5MO6p8_gaRJe}%YPqEjO>6-F<8R8c5+0fe?Umu%@Bl#BTOPB{P#_Yl#z20 z<`H)gjzTyE;UI)n2)P(bG?&z|_1Bf=3SfzCh+~vEAyZN!(E|neEI$SS-cici6^rxq zI>7Tzy@~wz6wSE4RGxE`dcbp2c~+PotA9zX0H43zF`r~qfSMBhS^&=x^NN3eYH7Xs zcy1`d?mx9eYFyvjG6k}d>VFXrhaemYAnuabj5IzH9MJ-#?OQ}R8qZwQjjs(8=^O_y zM@0@sI$uxRu|nyEqmaQ{&k@xijbt4C-oudbMZ!0RZb8~4vHQT=O6m`EUv=sbkvrFsM5u?VN3KvM}Y z(Tcc(c;bM_Psf=a_rY#LIyLl8gfvkPBIM&3-)!5}NgV|FyxA!M1~v-vo|Nm3pO?Wt z2Ut#Ji5p85Qak$~&L@iEF9Mc}k`BB?zVvG-1K#yt8Zj~k%Q@I>KZ-;>*CS6td_3^- ze4ftr(Ib)Hfc!QM4@24b-- z^$!O}Yx7?S>xg}R04gC)upSB2+l#=H>JcUmi4bl__i2Q9{JvtG!~YUlG}JtP3!bTm zlMjoe^Lm8TFfN^U9~#9k!)mNqhKz<;k*9hhLfVzs4;66Ay#;AR%`^q{i+hxQhdfTG zachdhK7@R({!!V`1KMe)kW%UQG$4sL@RD&~ReU$7QZ2hsmWGd)<(3ZNWl3NG+&T(Px0=+AqNtwT;ZprDew3@O5Rh!z-Z`W_KQ?ViPLD?gQ9( z6Z+2%_faas4lRQnJ)3QKTkJKiybaR;H--9x-xYY~;+5jRitrD+`If!=cspRZTp`%| zFM9`jFLzXcd<&5A+5J^9PNhD?b2KFw&{$c@qhI#$lGvko(WkmI2FeG$9-wh@D=LnU zR{*WN=RJJe1ABLK46w$BWc=am)hemi@aHO^oe5a#DE}2<+g_>wdpKapT;;7FAFHQ; z=dnd3ugA)AycZPfsZ=)Z`hGVm3m$_X2WBWtG{oaqA>J_qc;>pq$7L0tf#WOWIXw1`kfZbr})jW3ORp# z3GjTE=Z;uD!9QM%hxPMejc<&{H_R(3p0)ELkwnPibB0h3rA3FW8x~nay_T+x1Fc49QL{x-l2d^^7$uZ<-orJFdx1U znAcbV_VynD8$ZF+Huk@?m@`AJAbq?n8g|YP_|Wq>5BcUPS2K2^akLC4;g6`F>pw_0 zI%V(z(ovCu#mWkFq_eSma5(S&`K4JJO_uE#_LDt0N&f}Ad5?Hxk7{J|@f#Oq@Ao0@ z#i^Umj{Q)a*JB9s`NXMF{yUVf%x67566bYqj+JMx9x9GySA2x*1Lw2*klo`rWOE`M z9~D37W7K{MTlO((zX;h}1DP0Qe@WTbvH_nU`*vh=5!D=J|N0ZLp=~$1&Kvzj>=`4G zNW~h&JIA@n;j2s4)fKDejAH=eyraC+oJow12E1PwzlTwrPJLBYS-{!hI3aZwfs3e9C71t}`25f;b;Rf*rGf=&8sL zx9sdZFD)@(Zl>{&bEl<1K*q6(keo|02$Z2wQHCZutFfg5 z<9byYq5JjUQ@S4od>t~B6iW2IN|bGg;tFREMJIJU9ksk&jXg@yVNb7q458u39S|8i}8V&Igu!H*71OhPyX@vpp0Vk*L05gvkY z5yHa|e(2J{Ww;>`r$x0BapFurM>rgzhmf2Q353L{jzLJI^FSfO--d89d5gQ@VIeY> zA|yZDhfbuk{uLoH=?f6fKsW~>Asm2^{6O@32#w^7;pqoUt0>AWizD$V!1EQDd5HLM zOciWF0++LV;Qkq_U@P)@I#sYO7U#?N1Hki1xjU9m@J}Po6#yQ7+lB(1G~SE>PyzYj zQUNY8dITl&Vg~Z#4O$d~=N%accs@ew%HX#k-o{(PseTL!5M!p_jb#OPAkKTrHH&Gn z29?7<9fRi*X%W;}-Z-#9RA-(ujTX4E4=;qsKRPwEN179zRUT~O)GE0H?0fcnu zlzzPzm+7T#0ZN!gmo4LP)=O1$;~5LC^;sRk;Zv znWA$M(xz!K9<4tg^UL{DxfXKG&dyZc5~GFkQy4dv!LA1^XQ$iB^6n1fvGso*fH`69 zKqjYjG&b>ctT0!BczEdY$i|(7ko0QqZ%iRh{t<4#@$hogLn9s9U6b+P0+4hjGQ?>; zb4#r}9a)K^VR7*3p?Fahy7JM|AaRzk3ZUF65Cgrg0_eudSZ}TXx&@$os$y90r~rCJ zWzg*vKyN4my^Zavl6tr8tN^+Lpu~K5H*Z6n`{UxiuE#5seZE)?FB{iM79)?#^XE_& zoupYRRrEozqW@KR>|-UO+>XpBwnYU7#%L*9O!t&$?~`lA@#TSNzv}tGK3`O??s4p-j=8a zg19TE0dX=tzF8X`9J&(iCQIN8gd-603L4f#3c#rdiE;c5AvKieH=;b1I|JdqvGiXf zP7RCjW1adyOeV%)grt#dJ0+4-ix856z%7Ud#A!M4biU1jq{P?Am^X6CqUNCN!S|~h<0P(A2mY$D%J<9GRz2fB@z>p9L`Ba?w zpM?zG6P}(y+AsifkIqMkld5zE{&)k&z&hk)KI@O2JG2CG4u>KM9k4}a)0Qabwd=}& z<7Vf2B++b0XPxaKgR;_TB`^n$2f+Vdyvb(=-&B8S&tz5TIQ7xe-#aey*ty#I+S?r6ol;E#h+PbEd zr%5%GR#@ho;HwK&-RPF3xVy}ER&$W*UM$&7%2loKPwIYIH)%k!2dnQU_1UK;MAz!9 z@CvAK>53Cqp5XWV>44P0#!L@F(z1H#iZu(D`0KJ6iWVEOaP`WSYuJnR!o%dBs z^<>BNRnN27pR1+e8AWj%({eQ2aS&LFp)uSxF4rP4Z`htC`}sgu@>c(~EUQSvSxa|m zQk`mPn(ujzWyy~3tLlL3lMC6PR%smjqK6b@^GcxF1=DtI-8EfH!}V-6(y**0E3RK~ zR7W=Sf|+*)M#+Jr8@eg0rX1*+TrdW)9o?mavMR1y$a|XaXpW`phSI>4eWhM(RClR6 zo7h7Vv%aUAhT$njV7aDeRmFd>&;K*DEMb zM+7l|-CdAQX4`Vo=!_oNfgxLgg$c6?j?50LljdeI2~OU{XlRN9DzNfVqa7u$SiWmo zo@_V@nqEv+^NtIGAsnh#DCki#F6(eD6gSPhtY~?|C?>lYYg;#c#l(0xsu?EN`WOe( z(pBH}-Ms7>)>@jmgW2xhQZ+lQpVTu8x>p9VcuJs5D8cv6Vi78s0K<{BK*2oh&+h9Z zEvm&Jqx%>cSFuf3%TJuZF6uA!X9xC`vbCO}7W}-XE2isdj;~ERfNf}$8rb=LrCzm~ zS+Hm-3a;*Ix}Klh9F=@J%mh~5lM9NCIrI&yIo|P}y|Dz$z*SVuQh*qftOiqM&>7vX$=m@xk&n_}|La%N>MEd`FfYEHE2$ftCl;*o*z7k^A{U zzMxqJ1IsGN>)!NHbOpos@h#4ZrS1t!S1c|*0s%%;F`S@a>9S`kihKZ@*k5YSf>(H| zXZW!`NBetc#BxehT;~KVE0Ex<=CuatGroXgrwqU8IW?R1DsH#)&-I;7swY0I; zx1GFW>j5ot#nK7~E@b-;k|s5_tZiMgFj%|7U9)uM3bX;lYx}Yz7gXK$-GYA*tE!jo z$oiV?SowTjaSb_-hl81OfV3j(c%~|Y0U4$&dy20g!e$JV4ynz%hAQizYhd#*$%h^j zF^8uIN`teC3g)X@1)bKfrKyLpE`y|zwVn^kHf1bU$24S5p4CPTJbYYGFwvyI_jONI z3W3@%a@?|ICoUhS7`BZyDa*PEwqk-F^5&@7Z2KT-Y!)oW4|K;eEK@HOtiy|Ju6Kh} zQ>zy6%X=o6qiyL0=ZFJ3NTfSEu0iTqYhVI=-*FT_uge(mIR|xy5ZG_Rim_QCa&KxX}w!{Uo)_5j?U7p zJqru|;-xDVu3d4`(iPq@Ln0ar>GLF9odbGXqT~b1RDDx5&;U%^0(RSAX;2pY8^SDb zjDn5%b+lvItAnM9SzFB$6Yw3(6^2tiE?f#(FiB4iOf?TV;RlwykexV08VEWl_(W_L zrrZKoUBvbbm+CXX?09*wJxp9+y9O=?la6OKL#1@Bst2m+LF8(F9%4}~w6R|fm6osz zhDu__QwxEwfH(QJ=^25`ZWt=9tOY5Ve!+AKGPu6#_@2fV443+{$-|`TtZe5ogu3U- z2AG56`fR~4X?WImOvkZ6IAB|rTTp{YsL8hL1$k4peO)W~dSNl!F-+2H<$RF0AtY@# z2u#9dUwG*c{70j1*JS~AqgA8rx zkLC<5vWO*+YY-ov4Kb?aJwrKx4H^MCX&8P0t^scExOq)o#ts`Hso6Z%zHj@s>nMS3 z%ldM5@d#;FRHKb*$?E9MAC-O)bbPss1te{HoNI6-G(} zGn$syF<`Ps8jY^Duq`8{VYQHkxWfs8(oroCqQ7bms~;uxX0MC{5AhrfFjx!Zh7*{U zyqXOdCC$jHkYH$*t5}L_8oJZU){c_?Z#)_Rehb;^%V0aYzh*>4eXVO&qyMW{E?>BI zO<;inRTE>a>R7H|(SfV4WwS>^a2FH<1fF*>g0`XS>WQpjtaM;j2ldIiL8_7ug0)VH zl3iI1ActKLpQfmJZ(W!SH4d__08Xm{Uh!NuXe_iS&@QAzA+OqyFs9?5Qp8bkNMtGw z{4HAU1)fqQ}oAB zT~#h@h|+V=S`5no@yIkpy87c}fhrlmUK=MFSqDs1!w?kQKsH@p*~msWNpo>y_4+2z zOWt#FeU}3%2&K-o3um!ck(^V(cMRRq3bWp?ERW05830tLN9U4{v9MyA8-_o_fJ`XpthuZfm zsN8Y8IfEDypxa-zhhcHQCGu7=0Q1U-2$Tp4d@#WK?NEx8!`mFap`LpwJdB zq)N4{Wq2B7pBofxDD}Fxg)P#gr8(3CW`uPLk(T#;|03*=uQH{vOw_?9NdP&}2ZOv@ z2z1}Pn5{IWVeB+rnvpYuz?TcSE)By1_0{`n@{Ep>L)at}+7Z+OJ+G*`j$y)om*CRy z#u-vQ+x{ad$2J+#v>X;YWQJ0JG72$oT9@LR(;>)L2C38*s0N+Y^PpMK*=1Dy@;Wzf zLIn?GOIM)j%Q8#elVW?0mvGgSB}vIT$FzNr6gaSDK=TT=mgPebyBa3NQUi!_&Hq{Q zzNkDy`Fq%z6QntHAPvKZ=4qHji&j&qI&8T$=O6m{n`7Tv`@HD za)AL}hP7xz48d$Mu1p@(0n(6DY$(9CjqBz>v9@hrm7Epjey|8U%mXv^VWNThK?s`p zbF3O)IzFfR1@L4j5-OHV;M!O7Qem}E_)?};%VW_(ctYRP3$PllNrsC$hf4BLt1 z3Wlp*n>?_iIs34NK&s9_lPX|LH5f!H`1k*@GxnFx%z};RGBjVXRB&fm{RNwSu(Uh} z+Ez3u%TQl1sD^r7auFNbBn@FJ4#fzBYXJHXsfM!VYv5~+bv>JXxU@X0LuxvXijI2_ zTY-8*lnjOib+7=%#y8BoqWv>F`Y;Hnx_vAl;=(+j-U(ZIV@ zw9Jr6P^&k^0qOwYItB&{%3CJ)5O;4z_H; zhiYyGMqoRJcUv;1iRE-NUw|3|V-(~9%k#I%8SJU4(wK&lqXIpVb!af2VuI2vsLAr} zfI*SJVJ%9xMzwFl@tWXYWmsY*0|a(;etGe%?@Y$Ge-7)jsaZ zmXlEkE8QRu0{$cRtKGvkOqKS_T8;~yr-1bl*bq(H?BCb~|Ihx&~ zN&RzJC*UD47iyQkit+`@Jr5Bqw@bm?f=*RbcoHIZ+^N#H-g#vC9G%{nlYRo#ST zfCXx+`i`(pSn9w)eNo)N3#{Nlw(9`tH#rwV+_DWYf;?$C>O;H}V3LPt0j$^>4B~>X zL5B(+W`kx(t#y`aL8r{a4)QUZzP~ehX_D;3-fY)QX$6R)0RMyqWey@hSNuot4Tq4c z9y3!qy3WTsfH$I`V}(Pa<$vF)a2AvVNi9PQf-}JLwMW^)10}N#bK_&7crqj`mZ$kx z@@J(g72@~Z**6DDdJfJH&;{&Fhd8(G{vr93sB-rpX<-&?2S$tTptG`L+rb}0Mv{f+ z0Mvo*Lyd?1YWykUFOV&HCtrXzEMuS@^YP@d9sFf<&M2ToDwdqC=&<_=PbBkf+bXGl z-*Tr8j4D;Jl~GSdm0>YKF2IEYtpw)0^;DEhDwkaVHJQ+nz<-{OSW+H_S>W4-Pc#j; z%riv>=IbuXD>g9emTvz!N`}aTbq7b2YWsnqYR^W=7&fSex@_vU0)L$L93`*FK<9@% z_dO`}1y57|5~jijAj8k4Kseb@i`>5^Ph-y3)&prL=3vB>ya`7XS_qr=RaA|k85wD_dBp_znIL@VTj1gUWKSL$ z5;7JM6cbB>@RD`yHQwH*jzW87%Yu1T@H{A}U{22KY|&96cLe>oI@D%^top*g*bPTX zlR)<1q%K@wfsxP4y7O=L=}};cP|08$IWk-k4tRj^2Aez|E)mEmFv+|J{Tgi4wBKYG z&zGix-vn|#4?PVELBUqkx7feuONVAX3)NeB3)X~3rtjNq`q9#>IUCBeX$A^>fZ#`# z_6|t~KAVG`mX>8F!=7#}5|xj2>C2E?aCg8=vENOy57tX_;Z`wiM}<9ZtELMJ;k~4A zBJN~`H|70gH6P-oe(MKGc&UAN?HV8M@0IQeyIFRDv?T}b2=&R+Ov49HP~<(yX%W@E zxIpTW^9@p;VdWbNgoS2*Sj-(5qFA`ZXTK$)-V~Lvg|@=0kFIS zMFnZ7xEB}___I)D9tgu1)9)Bc=t6be&y(VEe~sfgYn(5VtJs5+q&l{Jp>#;-lrmxY z!TSIQh~oZ-Y?0nfSp?^YZh%49d7y>g&H6IQS~fyMWQ!#5FSI4d2VNd>0rrjg6}Vf& z=|H-lBiT8q39zi-jRJo$4b%S`xh*S@dj)cjQ=tRGn}+JJ65$K~CYf2fV(FTt&a$Pg z#VPnU*)y7D>=$73pmnLcK2;MeT@eG>kjgDxvBY2PV{4%Us`bYy);>=f2)7e_mpXY< zv0OdV-I(g>F7e$HusaczX+1Mly&5|fuz_2l9G=BC6r^5V&rZD-^AFzzPag7gs4uXl z;54$%VQsGTi=64eQpUVuj{#1PK-rWkGNc6_SP5LZmQ3tYR(!>E%+0Cu*sF`Bm2Agy zsfuk2q;9!9C;~DHZUizj3i)$WGa_#DX(08?fj_FU3r8uDuxYA4i6N-T0403;I+AQu3s#T%7CfDZiFvahnWgz343L+bZVUjlNNTU4{jXjhT&e2IzLIiu*t09cxiu_ zsnG3hC`nkGB$qE_?;kInoKtnWMw<3YV7kLr+LD?}t+UyVrBe4gnAGq*L&t@cN@C@r zPB?2JBviB=cD<}CFjg;4kwbDgyZQuaMo;LMHXKE;U0vAE8hiJ6>C{?mCBRU@CI{T_ z@C|yG#7g8G!;s-=fq2Cp5PUh8rZ&e0bNMn!$U$9!8_5H!kZsb_E=w(mB<=aLr5bkk zGHFD{^dJUF5i7v5^a?inV3}mn8aAL}DNtZ6TepL)sp|-LBl~t0oMAs%ELHb(6c`WK zDgvMN3ZBniSuPz~>p4y#@8ibpf`R=h$GAKdI_!F4&R~;b7e_X+U1YIkE3hTvz^Mx> z3sw{y26^9LPp*)LWUz#lAb<{PkRk8eEV)wpY0fP`_Q1AxHOsbev-i(a*TxzYb`~xT z$8|~2L3{RX`RWwhf^cs3$2wR|@*;2f*jJHhW5~vihjLA7B^j8**fTBCcsTc*f(^35 z{u3t34z7)wo&$gM$j1%O8|cz^|1VY2)VuZc;X{Nn3Ht!T+3?wKR!IYM7!PO+Hl{K# zWy8;37aP4bITxA-bO?-(8tAH`T%TG*EMNwEay8tD2AoV7RR~2vn9nJo6I*dlsh7JqY2=WbVY`{yjR=O<< zEb!b1Za$9(EpPvZn)2hEVZ#>;Cj=Z3vJ4WwC1tV9$zW`kuaoMsD!i{&pcb(74f2BG ztMcpMi9nCAk^*0K6_~<`y^YnJ3@0+WqgaM-V)GNy+qG_ElTMay&*^y!s~WqGkUWa% z7{3K?*>Eaa3uUKAPPZW`^ST56fF))Jx1%qi60`0Use4X^KMCvvj>FLHYuu4KG%EYx zDNfo+S(>xQH$H&eXwCZtba3Emn~NIfgww3>-#PyQ^65z!O)lfz(`x%@j}< z)EHQL*rkLXg|YD3S=*`55y%L|5TfD8#yY#3J$0&dQw}Dk;XvC`JkTO^;Cs+oNQqJP zEvr|ytZa3bwGzR)Q0-iZS&cS-?cjIpnbWWXhy`mGT{ygq{yaOrF>UtT~xYJVV-;0U;WB=#JRU*5H!&*fVF)euazO zLk->s8++vN+_3>|lAeJTSuhBx>R_4`pE+&PL@YuL65KJdy^b9|#bLL$Nmeb0QSq@6 z1EoSHBk)f}4gno1Fv0WT$o9egyvI|=5SKjyU%P~bVp^k~VDGP&4(YqvU%v80()F={ z01;-uFu^t>^hx&Kdg(}r92kG5g$*FthYLo1irunGs?T}o4wM=PY}3YmQSfwXU5D@U z&>UQ|GJG9mw5xDJ1ka?VhE!j_+Q%*XVQn6y6;MMoVe21@{m-dp0vXL(ehd+zzylA5 zBHY{sKfuoAv#D8>yDw}1v6RahSZA6Bbrl4M;c%Zz9oSK}idApK%7W2JzJ0i?uv-h? z|6fwmB8_I^MyUbY(r6g=xnPs3*oBnq2s@Rg&gLxGoc@#lVos%oheuZvio<7}xnNEX`=aJ|9@lZPd4v6^$F5&sX((4<8G diff --git a/substrate/srml/assets/Cargo.toml b/substrate/srml/assets/Cargo.toml index 58d84fb9bb..e695453c1e 100644 --- a/substrate/srml/assets/Cargo.toml +++ b/substrate/srml/assets/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } substrate-primitives = { path = "../../core/primitives", default-features = false } @@ -20,7 +19,6 @@ srml-system = { path = "../system", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "parity-codec/std", "parity-codec-derive/std", "substrate-primitives/std", diff --git a/substrate/srml/assets/src/lib.rs b/substrate/srml/assets/src/lib.rs index e266a00bdd..09f81cb843 100644 --- a/substrate/srml/assets/src/lib.rs +++ b/substrate/srml/assets/src/lib.rs @@ -30,13 +30,6 @@ extern crate sr_io as runtime_io; #[cfg(test)] extern crate substrate_primitives; -// Needed for deriving `Serialize` and `Deserialize` for various types. -// We only implement the serde traits for std builds - they're unneeded -// in the wasm runtime. -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - // Needed for deriving `Encode` and `Decode` for `RawEvent`. #[macro_use] extern crate parity_codec_derive; diff --git a/substrate/srml/balances/Cargo.toml b/substrate/srml/balances/Cargo.toml index 769e801ca9..9f7fd249b0 100644 --- a/substrate/srml/balances/Cargo.toml +++ b/substrate/srml/balances/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } safe-mix = { version = "1.0", default-features = false} parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } @@ -22,7 +21,6 @@ srml-system = { path = "../system", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "safe-mix/std", "substrate-keyring", "parity-codec/std", diff --git a/substrate/srml/balances/src/address.rs b/substrate/srml/balances/src/address.rs index 2cd545d0d1..ccaa6b46a5 100644 --- a/substrate/srml/balances/src/address.rs +++ b/substrate/srml/balances/src/address.rs @@ -22,16 +22,14 @@ use super::{Member, Decode, Encode, As, Input, Output}; /// A vetted and verified extrinsic from the external world. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug, Hash))] +#[cfg_attr(feature = "std", derive(Debug, Hash))] pub enum Address where AccountId: Member, AccountIndex: Member, { /// It's an account ID (pubkey). - #[cfg_attr(feature = "std", serde(deserialize_with="AccountId::deserialize"))] Id(AccountId), /// It's an account index. - #[cfg_attr(feature = "std", serde(deserialize_with="AccountIndex::deserialize"))] Index(AccountIndex), } diff --git a/substrate/srml/balances/src/lib.rs b/substrate/srml/balances/src/lib.rs index cf2f9bc4da..7fd694d98c 100644 --- a/substrate/srml/balances/src/lib.rs +++ b/substrate/srml/balances/src/lib.rs @@ -18,10 +18,6 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[macro_use] extern crate srml_support as runtime_support; diff --git a/substrate/srml/balances/src/mock.rs b/substrate/srml/balances/src/mock.rs index d2e62cb83d..5fb6bb80dc 100644 --- a/substrate/srml/balances/src/mock.rs +++ b/substrate/srml/balances/src/mock.rs @@ -72,6 +72,7 @@ impl ExtBuilder { self.existential_deposit = existential_deposit; self } + #[allow(dead_code)] pub fn transfer_fee(mut self, transfer_fee: u64) -> Self { self.transfer_fee = transfer_fee; self diff --git a/substrate/srml/consensus/Cargo.toml b/substrate/srml/consensus/Cargo.toml index c7bbfe03f6..d099cb120f 100644 --- a/substrate/srml/consensus/Cargo.toml +++ b/substrate/srml/consensus/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } substrate-primitives = { path = "../../core/primitives", default-features = false } @@ -20,7 +19,6 @@ srml-system = { path = "../system", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "parity-codec/std", "substrate-primitives/std", "sr-std/std", diff --git a/substrate/srml/consensus/src/lib.rs b/substrate/srml/consensus/src/lib.rs index 0d2bd7f279..302d7a2b35 100644 --- a/substrate/srml/consensus/src/lib.rs +++ b/substrate/srml/consensus/src/lib.rs @@ -25,10 +25,6 @@ extern crate sr_std as rstd; #[macro_use] extern crate srml_support as runtime_support; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - extern crate parity_codec; #[macro_use] extern crate parity_codec_derive; diff --git a/substrate/srml/contract/Cargo.toml b/substrate/srml/contract/Cargo.toml index 51a0b172db..60da497f0e 100644 --- a/substrate/srml/contract/Cargo.toml +++ b/substrate/srml/contract/Cargo.toml @@ -5,7 +5,6 @@ authors = ["Parity Technologies "] [dependencies] serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } pwasm-utils = { version = "0.3", default-features = false } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } @@ -26,7 +25,6 @@ assert_matches = "1.1" [features] default = ["std"] std = [ - "serde_derive", "serde/std", "parity-codec/std", "parity-codec-derive/std", diff --git a/substrate/srml/contract/src/lib.rs b/substrate/srml/contract/src/lib.rs index 5e3722bb04..e3f6a600b3 100644 --- a/substrate/srml/contract/src/lib.rs +++ b/substrate/srml/contract/src/lib.rs @@ -52,10 +52,6 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[macro_use] extern crate parity_codec_derive; diff --git a/substrate/srml/council/Cargo.toml b/substrate/srml/council/Cargo.toml index 39cd73e96c..e2bad6b3c8 100644 --- a/substrate/srml/council/Cargo.toml +++ b/substrate/srml/council/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } safe-mix = { version = "1.0", default-features = false} parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } @@ -23,7 +22,6 @@ srml-system = { path = "../system", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "safe-mix/std", "parity-codec/std", "parity-codec-derive/std", diff --git a/substrate/srml/council/src/lib.rs b/substrate/srml/council/src/lib.rs index 412de7d2b2..26d88c6c7b 100644 --- a/substrate/srml/council/src/lib.rs +++ b/substrate/srml/council/src/lib.rs @@ -21,10 +21,6 @@ #[cfg(feature = "std")] extern crate serde; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[cfg(test)] #[macro_use] extern crate hex_literal; diff --git a/substrate/srml/council/src/motions.rs b/substrate/srml/council/src/motions.rs index 2b3850369b..69af4a563e 100644 --- a/substrate/srml/council/src/motions.rs +++ b/substrate/srml/council/src/motions.rs @@ -20,7 +20,7 @@ use rstd::prelude::*; use rstd::result; use codec::Compact; use substrate_primitives::u32_trait::Value as U32; -use primitives::traits::{Hash, EnsureOrigin, MaybeSerializeDebug}; +use primitives::traits::{Hash, EnsureOrigin}; use srml_support::dispatch::{Result, Dispatchable, Parameter}; use srml_support::{StorageValue, StorageMap}; use super::{Trait as CouncilTrait, Module as Council}; @@ -29,12 +29,12 @@ use system::{self, ensure_signed}; /// Simple index type for proposal counting. pub type ProposalIndex = u32; -pub trait Trait: CouncilTrait + MaybeSerializeDebug { +pub trait Trait: CouncilTrait { /// The outer origin type. type Origin: From; /// The outer call dispatch type. - type Proposal: Parameter + Dispatchable::Origin> + MaybeSerializeDebug; + type Proposal: Parameter + Dispatchable::Origin>; /// The outer event type. type Event: From> + Into<::Event>; @@ -66,7 +66,6 @@ decl_event!( ); decl_module! { - #[cfg_attr(feature = "std", serde(bound(deserialize = "::Proposal: ::serde::de::DeserializeOwned")))] pub struct Module for enum Call where origin: ::Origin { fn deposit_event() = default; fn propose(origin, threshold: Compact, proposal: Box<::Proposal>) -> Result { diff --git a/substrate/srml/democracy/Cargo.toml b/substrate/srml/democracy/Cargo.toml index c037a4b219..ea8b63920f 100644 --- a/substrate/srml/democracy/Cargo.toml +++ b/substrate/srml/democracy/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } safe-mix = { version = "1.0", default-features = false} parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } @@ -22,7 +21,6 @@ srml-system = { path = "../system", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "safe-mix/std", "parity-codec/std", "substrate-primitives/std", diff --git a/substrate/srml/democracy/src/lib.rs b/substrate/srml/democracy/src/lib.rs index 34aad5856c..0c589d5893 100644 --- a/substrate/srml/democracy/src/lib.rs +++ b/substrate/srml/democracy/src/lib.rs @@ -21,10 +21,6 @@ #[cfg(test)] extern crate substrate_primitives; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[macro_use] extern crate parity_codec_derive; #[cfg_attr(not(feature = "std"), macro_use)] @@ -41,7 +37,7 @@ extern crate srml_system as system; use rstd::prelude::*; use rstd::result; use codec::{HasCompact, Compact}; -use primitives::traits::{Zero, As, MaybeSerializeDebug}; +use primitives::traits::{Zero, As}; use srml_support::{StorageValue, StorageMap, Parameter, Dispatchable, IsSubType}; use srml_support::dispatch::Result; use system::ensure_signed; @@ -55,7 +51,7 @@ pub type PropIndex = u32; pub type ReferendumIndex = u32; pub trait Trait: balances::Trait + Sized { - type Proposal: Parameter + Dispatchable + IsSubType> + MaybeSerializeDebug; + type Proposal: Parameter + Dispatchable + IsSubType>; type Event: From> + Into<::Event>; } diff --git a/substrate/srml/example/Cargo.toml b/substrate/srml/example/Cargo.toml index 34d8d058d1..8fe76d9bf0 100644 --- a/substrate/srml/example/Cargo.toml +++ b/substrate/srml/example/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } substrate-primitives = { path = "../../core/primitives", default-features = false } @@ -21,7 +20,6 @@ srml-balances = { path = "../balances", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "parity-codec/std", "parity-codec-derive/std", "sr-std/std", diff --git a/substrate/srml/example/src/lib.rs b/substrate/srml/example/src/lib.rs index 4c2708e953..8dcbb7094b 100644 --- a/substrate/srml/example/src/lib.rs +++ b/substrate/srml/example/src/lib.rs @@ -34,13 +34,6 @@ extern crate substrate_primitives; // Needed for various traits. In our case, `OnFinalise`. extern crate sr_primitives; -// Needed for deriving `Serialize` and `Deserialize` for various types. -// We only implement the serde traits for std builds - they're unneeded -// in the wasm runtime. -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - // Needed for deriving `Encode` and `Decode` for `RawEvent`. #[macro_use] extern crate parity_codec_derive; diff --git a/substrate/srml/executive/Cargo.toml b/substrate/srml/executive/Cargo.toml index 33cd0432e0..ee956e9399 100644 --- a/substrate/srml/executive/Cargo.toml +++ b/substrate/srml/executive/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } sr-std = { path = "../../core/sr-std", default-features = false } @@ -25,7 +24,6 @@ std = [ "sr-std/std", "srml-support/std", "serde/std", - "serde_derive", "parity-codec/std", "parity-codec-derive/std", "sr-primitives/std", diff --git a/substrate/srml/executive/src/lib.rs b/substrate/srml/executive/src/lib.rs index ea83267c91..005b8508db 100644 --- a/substrate/srml/executive/src/lib.rs +++ b/substrate/srml/executive/src/lib.rs @@ -18,10 +18,6 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(test)] -#[macro_use] -extern crate serde_derive; - #[cfg(test)] #[macro_use] extern crate parity_codec_derive; @@ -295,7 +291,7 @@ mod tests { } // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. - #[derive(Clone, Eq, PartialEq, Debug, Serialize, Deserialize)] + #[derive(Clone, Eq, PartialEq)] pub struct Runtime; impl system::Trait for Runtime { type Origin = Origin; diff --git a/substrate/srml/session/Cargo.toml b/substrate/srml/session/Cargo.toml index c006eff0a4..ad798edbdb 100644 --- a/substrate/srml/session/Cargo.toml +++ b/substrate/srml/session/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } safe-mix = { version = "1.0", default-features = false} substrate-primitives = { path = "../../core/primitives", default-features = false } parity-codec = { version = "2.1", default-features = false } @@ -23,7 +22,6 @@ srml-timestamp = { path = "../timestamp", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "safe-mix/std", "parity-codec/std", "parity-codec-derive/std", diff --git a/substrate/srml/session/src/lib.rs b/substrate/srml/session/src/lib.rs index df3afa9aa1..99bf182cf8 100644 --- a/substrate/srml/session/src/lib.rs +++ b/substrate/srml/session/src/lib.rs @@ -19,10 +19,6 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - extern crate sr_std as rstd; #[macro_use] diff --git a/substrate/srml/staking/Cargo.toml b/substrate/srml/staking/Cargo.toml index 7a1f4ef4eb..4d35592144 100644 --- a/substrate/srml/staking/Cargo.toml +++ b/substrate/srml/staking/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } safe-mix = { version = "1.0", default-features = false} parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } @@ -26,7 +25,6 @@ srml-timestamp = { path = "../timestamp", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "safe-mix/std", "substrate-keyring", "parity-codec/std", diff --git a/substrate/srml/staking/src/lib.rs b/substrate/srml/staking/src/lib.rs index 680da340c5..cd21fe05ad 100644 --- a/substrate/srml/staking/src/lib.rs +++ b/substrate/srml/staking/src/lib.rs @@ -23,10 +23,6 @@ #[cfg(feature = "std")] extern crate serde; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[macro_use] extern crate srml_support as runtime_support; @@ -75,7 +71,7 @@ pub enum LockStatus { /// Preference of what happens on a slash event. #[derive(PartialEq, Eq, Clone, Encode, Decode)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] pub struct ValidatorPrefs { // TODO: @bkchr shouldn't need this Copy but derive(Encode) breaks otherwise /// Validator should ensure this many more slashes than is necessary before being unstaked. #[codec(compact)] @@ -103,7 +99,6 @@ pub trait Trait: balances::Trait + session::Trait { } decl_module! { - #[cfg_attr(feature = "std", serde(bound(deserialize = "T::Balance: ::serde::de::DeserializeOwned")))] pub struct Module for enum Call where origin: T::Origin { fn deposit_event() = default; diff --git a/substrate/srml/support/src/dispatch.rs b/substrate/srml/support/src/dispatch.rs index dd52e35b3c..24ba2a9c75 100644 --- a/substrate/srml/support/src/dispatch.rs +++ b/substrate/srml/support/src/dispatch.rs @@ -20,8 +20,6 @@ pub use rstd::prelude::{Vec, Clone, Eq, PartialEq}; #[cfg(feature = "std")] pub use std::fmt; pub use rstd::result; -#[cfg(feature = "std")] -use serde; pub use codec::{Codec, Decode, Encode, Input, Output}; pub use substrate_metadata::{ ModuleMetadata, FunctionMetadata, DecodeDifferent, @@ -36,11 +34,6 @@ pub trait Dispatchable { fn dispatch(self, origin: Self::Origin) -> Result; } -#[cfg(feature = "std")] -pub trait Callable { - type Call: Dispatchable + Codec + ::serde::Serialize + Clone + PartialEq + Eq; -} -#[cfg(not(feature = "std"))] pub trait Callable { type Call: Dispatchable + Codec + Clone + PartialEq + Eq; } @@ -50,10 +43,10 @@ pub trait Callable { pub type CallableCallFor = ::Call; #[cfg(feature = "std")] -pub trait Parameter: Codec + serde::Serialize + Clone + Eq + fmt::Debug {} +pub trait Parameter: Codec + Clone + Eq + fmt::Debug {} #[cfg(feature = "std")] -impl Parameter for T where T: Codec + serde::Serialize + Clone + Eq + fmt::Debug {} +impl Parameter for T where T: Codec + Clone + Eq + fmt::Debug {} #[cfg(not(feature = "std"))] pub trait Parameter: Codec + Clone + Eq {} @@ -188,6 +181,42 @@ macro_rules! decl_module { $($rest)* ); }; + (@normalize + $(#[$attr:meta])* + pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + { $( $deposit_event:tt )* } + { $( $on_finalise:tt )* } + [ $($t:tt)* ] + $(#[doc = $doc_attr:tt])* + $fn_vis:vis fn $fn_name:ident($origin:ident : T::Origin $(, $param_name:ident : $param:ty)* ) -> $result:ty { $( $impl:tt )* } + $($rest:tt)* + ) => { + compile_error!("\ +First parameter of dispatch should be marked `origin` only, with no\n\ +type specified (a bit like `self`).\n\ +(For root-matching dispatches, ensure the first parameter does not use\n\ +the `T::Origin` type.)\ +") + }; + (@normalize + $(#[$attr:meta])* + pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + { $( $deposit_event:tt )* } + { $( $on_finalise:tt )* } + [ $($t:tt)* ] + $(#[doc = $doc_attr:tt])* + $fn_vis:vis fn $fn_name:ident(origin : $origin:ty $(, $param_name:ident : $param:ty)* ) -> $result:ty { $( $impl:tt )* } + $($rest:tt)* + ) => { + compile_error!("\ +First parameter of dispatch should be marked `origin` only, with no\n\ +type specified (a bit like `self`).\n\ +(For root-matching dispatches, ensure the first parameter is not named\n\ +`origin`.)\ +") + }; (@normalize $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> @@ -351,7 +380,7 @@ macro_rules! decl_module { ) => { // 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))] + #[cfg_attr(feature = "std", derive(Debug))] // TODO: switching based on std feature is because of an issue in // serde-derive for when we attempt to derive `Deserialize` on these types, // in a situation where we've imported `srml_support` as another name. @@ -360,7 +389,7 @@ macro_rules! decl_module { // 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))] + #[cfg_attr(feature = "std", derive(Debug))] #[cfg(not(feature = "std"))] pub struct $mod_type<$trait_instance: $trait_name>(::core::marker::PhantomData<$trait_instance>); @@ -389,7 +418,6 @@ macro_rules! decl_module { #[cfg(feature = "std")] $(#[$attr])* - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub enum $call_type<$trait_instance: $trait_name> { __PhantomItem(::std::marker::PhantomData<$trait_instance>), __OtherPhantomItem(::std::marker::PhantomData<$trait_instance>), @@ -401,7 +429,6 @@ macro_rules! decl_module { #[cfg(not(feature = "std"))] $(#[$attr])* - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub enum $call_type<$trait_instance: $trait_name> { __PhantomItem(::core::marker::PhantomData<$trait_instance>), __OtherPhantomItem(::core::marker::PhantomData<$trait_instance>), @@ -610,7 +637,7 @@ macro_rules! impl_outer_dispatch { ) => { $(#[$attr])* #[derive(Clone, PartialEq, Eq)] - #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] + #[cfg_attr(feature = "std", derive(Debug))] pub enum $call_type { $( $camelcase ( $crate::dispatch::CallableCallFor<$camelcase> ) diff --git a/substrate/srml/support/src/event.rs b/substrate/srml/support/src/event.rs index ae7ddea412..02f295ab18 100644 --- a/substrate/srml/support/src/event.rs +++ b/substrate/srml/support/src/event.rs @@ -115,7 +115,7 @@ macro_rules! decl_event { ) => { // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. #[derive(Clone, PartialEq, Eq, Encode, Decode)] - #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] + #[cfg_attr(feature = "std", derive(Debug))] $(#[$attr])* pub enum Event { $( @@ -216,7 +216,7 @@ macro_rules! __decl_generic_event { pub type Event<$event_generic_param> = RawEvent<$( <$generic as $trait>::$trait_type ),*>; // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. #[derive(Clone, PartialEq, Eq, Encode, Decode)] - #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] + #[cfg_attr(feature = "std", derive(Debug))] $(#[$attr])* pub enum RawEvent<$( $generic_param ),*> { $( @@ -364,7 +364,7 @@ macro_rules! impl_outer_event { ) => { // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. #[derive(Clone, PartialEq, Eq, Encode, Decode)] - #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] + #[cfg_attr(feature = "std", derive(Debug))] $(#[$attr])* #[allow(non_camel_case_types)] pub enum $name { @@ -518,7 +518,7 @@ mod tests { ); } - #[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Deserialize, Serialize)] + #[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Serialize)] pub struct TestRuntime; impl_outer_event! { @@ -529,7 +529,7 @@ mod tests { } } - #[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Deserialize, Serialize)] + #[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Serialize)] pub struct TestRuntime2; impl_outer_event! { diff --git a/substrate/srml/support/src/lib.rs b/substrate/srml/support/src/lib.rs index e9cd35afa5..e70af960f1 100644 --- a/substrate/srml/support/src/lib.rs +++ b/substrate/srml/support/src/lib.rs @@ -36,7 +36,7 @@ extern crate mashup; #[cfg(test)] #[macro_use] extern crate pretty_assertions; -#[cfg(test)] +#[cfg(feature = "std")] #[macro_use] extern crate serde_derive; #[cfg(test)] @@ -122,3 +122,6 @@ pub enum Void {} #[doc(hidden)] pub use mashup::*; + +#[cfg(feature = "std")] +pub use serde_derive::*; diff --git a/substrate/srml/system/Cargo.toml b/substrate/srml/system/Cargo.toml index c4bde66fc8..5bc00b1230 100644 --- a/substrate/srml/system/Cargo.toml +++ b/substrate/srml/system/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } safe-mix = { version = "1.0", default-features = false} parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } @@ -20,7 +19,6 @@ srml-support = { path = "../support", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "safe-mix/std", "parity-codec/std", "parity-codec-derive/std", diff --git a/substrate/srml/system/src/lib.rs b/substrate/srml/system/src/lib.rs index b10b311259..eccd99a98c 100644 --- a/substrate/srml/system/src/lib.rs +++ b/substrate/srml/system/src/lib.rs @@ -27,10 +27,6 @@ extern crate sr_std as rstd; #[macro_use] extern crate srml_support as runtime_support; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[macro_use] extern crate parity_codec_derive; @@ -41,7 +37,8 @@ extern crate safe_mix; use rstd::prelude::*; use primitives::traits::{self, CheckEqual, SimpleArithmetic, SimpleBitOps, Zero, One, Bounded, Lookup, - Hash, Member, MaybeDisplay, EnsureOrigin, Digest as DigestT, As, CurrentHeight, BlockNumberToHash}; + Hash, Member, MaybeDisplay, EnsureOrigin, Digest as DigestT, As, CurrentHeight, BlockNumberToHash, + MaybeSerializeDebugButNotDeserialize, MaybeSerializeDebug}; use substrate_primitives::storage::well_known_keys; use runtime_support::{storage, StorageValue, StorageMap, Parameter}; use safe_mix::TripletMix; @@ -68,12 +65,12 @@ pub fn extrinsics_data_root(xts: Vec>) -> H::Output { pub trait Trait: Eq + Clone { type Origin: Into>> + From>; - type Index: Parameter + Member + Default + MaybeDisplay + SimpleArithmetic + Copy; - type BlockNumber: Parameter + Member + MaybeDisplay + SimpleArithmetic + Default + Bounded + Copy + rstd::hash::Hash; - type Hash: Parameter + Member + MaybeDisplay + SimpleBitOps + Default + Copy + CheckEqual + rstd::hash::Hash + AsRef<[u8]> + AsMut<[u8]>; + type Index: Parameter + Member + MaybeSerializeDebugButNotDeserialize + Default + MaybeDisplay + SimpleArithmetic + Copy; + type BlockNumber: Parameter + Member + MaybeSerializeDebug + MaybeDisplay + SimpleArithmetic + Default + Bounded + Copy + rstd::hash::Hash; + type Hash: Parameter + Member + MaybeSerializeDebug + MaybeDisplay + SimpleBitOps + Default + Copy + CheckEqual + rstd::hash::Hash + AsRef<[u8]> + AsMut<[u8]>; type Hashing: Hash; - type Digest: Parameter + Member + Default + traits::Digest; - type AccountId: Parameter + Member + MaybeDisplay + Ord + Default; + type Digest: Parameter + Member + MaybeSerializeDebugButNotDeserialize + Default + traits::Digest; + type AccountId: Parameter + Member + MaybeSerializeDebug + MaybeDisplay + Ord + Default; type Header: Parameter + traits::Header< Number = Self::BlockNumber, Hash = Self::Hash, diff --git a/substrate/srml/timestamp/Cargo.toml b/substrate/srml/timestamp/Cargo.toml index c07a62aeda..8472bb89ca 100644 --- a/substrate/srml/timestamp/Cargo.toml +++ b/substrate/srml/timestamp/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } parity-codec-derive = { version = "2.1", default-features = false } parity-codec = { version = "2.1", default-features = false } substrate-primitives = { path = "../../core/primitives", default-features = false } @@ -29,7 +28,6 @@ std = [ "sr-primitives/std", "srml-consensus/std", "serde/std", - "serde_derive", "parity-codec-derive/std", "parity-codec/std", "substrate-primitives/std", diff --git a/substrate/srml/timestamp/src/lib.rs b/substrate/srml/timestamp/src/lib.rs index 36004e88c3..8911a7e5df 100644 --- a/substrate/srml/timestamp/src/lib.rs +++ b/substrate/srml/timestamp/src/lib.rs @@ -39,10 +39,6 @@ extern crate sr_std as rstd; #[macro_use] extern crate srml_support as runtime_support; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - #[cfg(test)] extern crate substrate_primitives; #[cfg(test)] diff --git a/substrate/srml/treasury/Cargo.toml b/substrate/srml/treasury/Cargo.toml index 32621e1561..9090ac4d9b 100644 --- a/substrate/srml/treasury/Cargo.toml +++ b/substrate/srml/treasury/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } substrate-primitives = { path = "../../core/primitives", default-features = false } @@ -21,7 +20,6 @@ srml-balances = { path = "../balances", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "parity-codec/std", "parity-codec-derive/std", "substrate-primitives/std", diff --git a/substrate/srml/treasury/src/lib.rs b/substrate/srml/treasury/src/lib.rs index 94e60e4b32..340ab48a8c 100644 --- a/substrate/srml/treasury/src/lib.rs +++ b/substrate/srml/treasury/src/lib.rs @@ -25,10 +25,6 @@ extern crate srml_support as runtime_support; #[cfg(test)] extern crate sr_io as runtime_io; - -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; #[cfg(feature = "std")] extern crate serde; diff --git a/substrate/srml/upgrade-key/Cargo.toml b/substrate/srml/upgrade-key/Cargo.toml index 980a7240a9..74561894ac 100644 --- a/substrate/srml/upgrade-key/Cargo.toml +++ b/substrate/srml/upgrade-key/Cargo.toml @@ -6,7 +6,6 @@ authors = ["Parity Technologies "] [dependencies] hex-literal = "0.1.0" serde = { version = "1.0", default-features = false } -serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } substrate-primitives = { path = "../../core/primitives", default-features = false } @@ -21,7 +20,6 @@ srml-consensus = { path = "../consensus", default-features = false } default = ["std"] std = [ "serde/std", - "serde_derive", "parity-codec/std", "parity-codec-derive/std", "sr-std/std", diff --git a/substrate/srml/upgrade-key/src/lib.rs b/substrate/srml/upgrade-key/src/lib.rs index 28433d8fbd..9a8e7493e9 100644 --- a/substrate/srml/upgrade-key/src/lib.rs +++ b/substrate/srml/upgrade-key/src/lib.rs @@ -25,9 +25,6 @@ extern crate sr_io; #[cfg(test)] extern crate substrate_primitives; extern crate sr_primitives; -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; #[macro_use] extern crate parity_codec_derive; extern crate parity_codec as codec; From db075b57f03c38a33787411d0d9e7b3f821fb7d0 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Mon, 12 Nov 2018 18:58:44 +0000 Subject: [PATCH 16/26] RPC: expose chain spec `properties` (#1104) * Add properties to chain spec * Read properties as serde_json::Value * Use a serde json::map::Map directly for properties * Add type alias for json Map * Update chain_spec.rs --- substrate/Cargo.lock | 1 + substrate/core/rpc/Cargo.toml | 1 + substrate/core/rpc/src/system/mod.rs | 4 ++++ substrate/core/rpc/src/system/tests.rs | 11 +++++++++++ substrate/core/service/src/chain_spec.rs | 11 +++++++++++ substrate/core/service/src/lib.rs | 8 +++++++- substrate/node/cli/res/bbq-birch.json | 3 +++ substrate/node/cli/src/chain_spec.rs | 7 ++++--- 8 files changed, 42 insertions(+), 4 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index c17744a472..f62c803817 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -3325,6 +3325,7 @@ dependencies = [ "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)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "sr-version 0.1.0", "substrate-client 0.1.0", diff --git a/substrate/core/rpc/Cargo.toml b/substrate/core/rpc/Cargo.toml index 3f35394c91..0a1c95bb5e 100644 --- a/substrate/core/rpc/Cargo.toml +++ b/substrate/core/rpc/Cargo.toml @@ -11,6 +11,7 @@ jsonrpc-pubsub = { git="https://github.com/paritytech/jsonrpc.git" } log = "0.4" parking_lot = "0.4" parity-codec = "2.1" +serde_json = "1.0" substrate-client = { path = "../client" } substrate-executor = { path = "../executor" } substrate-transaction-pool = { path = "../transaction-pool" } diff --git a/substrate/core/rpc/src/system/mod.rs b/substrate/core/rpc/src/system/mod.rs index 78fd7dda87..44f9033a2d 100644 --- a/substrate/core/rpc/src/system/mod.rs +++ b/substrate/core/rpc/src/system/mod.rs @@ -37,5 +37,9 @@ build_rpc_trait! { /// Get the chain's type. Given as a string identifier. #[rpc(name = "system_chain")] fn system_chain(&self) -> Result; + + /// Get a custom set of properties as a JSON object, defined in the chain spec. + #[rpc(name = "system_properties")] + fn system_properties(&self) -> Result>; } } diff --git a/substrate/core/rpc/src/system/tests.rs b/substrate/core/rpc/src/system/tests.rs index 95f37e79c8..0a1222c068 100644 --- a/substrate/core/rpc/src/system/tests.rs +++ b/substrate/core/rpc/src/system/tests.rs @@ -27,6 +27,9 @@ impl SystemApi for () { fn system_chain(&self) -> Result { Ok("testchain".into()) } + fn system_properties(&self) -> Result> { + Ok(serde_json::map::Map::new()) + } } #[test] @@ -52,3 +55,11 @@ fn system_chain_works() { "testchain".to_owned() ); } + +#[test] +fn system_properties_works() { + assert_eq!( + SystemApi::system_properties(&()).unwrap(), + serde_json::map::Map::new() + ); +} diff --git a/substrate/core/service/src/chain_spec.rs b/substrate/core/service/src/chain_spec.rs index 1b9cad490a..bc3ebf63cb 100644 --- a/substrate/core/service/src/chain_spec.rs +++ b/substrate/core/service/src/chain_spec.rs @@ -88,8 +88,12 @@ struct ChainSpecFile { pub telemetry_url: Option, pub protocol_id: Option, pub consensus_engine: Option, + pub properties: Option, } +/// Arbitrary properties defined in chain spec as a JSON object +pub type Properties = json::map::Map; + /// A configuration of a chain. Can be used to build a genesis block. pub struct ChainSpec { spec: ChainSpecFile, @@ -130,6 +134,11 @@ impl ChainSpec { self.spec.consensus_engine.as_ref().map(String::as_str) } + pub fn properties(&self) -> Properties { + // Return an empty JSON object if 'properties' not defined in config + self.spec.properties.as_ref().unwrap_or(&json::map::Map::new()).clone() + } + /// Parse json content into a `ChainSpec` pub fn from_embedded(json: &'static [u8]) -> Result { let spec = json::from_slice(json).map_err(|e| format!("Error parsing spec file: {}", e))?; @@ -158,6 +167,7 @@ impl ChainSpec { telemetry_url: Option<&str>, protocol_id: Option<&str>, consensus_engine: Option<&str>, + properties: Option, ) -> Self { let spec = ChainSpecFile { @@ -167,6 +177,7 @@ impl ChainSpec { telemetry_url: telemetry_url.map(str::to_owned), protocol_id: protocol_id.map(str::to_owned), consensus_engine: consensus_engine.map(str::to_owned), + properties, }; ChainSpec { spec, diff --git a/substrate/core/service/src/lib.rs b/substrate/core/service/src/lib.rs index 3b817e4ced..07dbf9addb 100644 --- a/substrate/core/service/src/lib.rs +++ b/substrate/core/service/src/lib.rs @@ -78,7 +78,7 @@ use codec::{Encode, Decode}; pub use self::error::{ErrorKind, Error}; pub use config::{Configuration, Roles, PruningMode}; -pub use chain_spec::ChainSpec; +pub use chain_spec::{ChainSpec, Properties}; pub use transaction_pool::txpool::{self, Pool as TransactionPool, Options as TransactionPoolOptions, ChainApi, IntoPoolError}; pub use client::ExecutionStrategy; @@ -235,6 +235,7 @@ impl Service // RPC let rpc_config = RpcConfig { chain_name: config.chain_spec.name().to_string(), + properties: config.chain_spec.properties().clone(), impl_name: config.impl_name, impl_version: config.impl_version, }; @@ -378,6 +379,7 @@ fn maybe_start_server(address: Option, start: F) -> Result substrate_rpc::system::error::Result { Ok(self.chain_name.clone()) } + + fn system_properties(&self) -> substrate_rpc::system::error::Result { + Ok(self.properties.clone()) + } } /// Transaction pool adapter. diff --git a/substrate/node/cli/res/bbq-birch.json b/substrate/node/cli/res/bbq-birch.json index 7504b7e8ca..ebd6b19fbd 100644 --- a/substrate/node/cli/res/bbq-birch.json +++ b/substrate/node/cli/res/bbq-birch.json @@ -1,6 +1,9 @@ { "name": "BBQ Birch", "id": "bbq-birch", + "properties": { + "tokenSymbol": "BBQ" + }, "telemetryUrl": "wss://telemetry.polkadot.io/submit/", "protocolId": null, "bootNodes": [ diff --git a/substrate/node/cli/src/chain_spec.rs b/substrate/node/cli/src/chain_spec.rs index 5058f0de60..a3fd6e0863 100644 --- a/substrate/node/cli/src/chain_spec.rs +++ b/substrate/node/cli/src/chain_spec.rs @@ -140,6 +140,7 @@ pub fn staging_testnet_config() -> ChainSpec { Some(STAGING_TELEMETRY_URL.into()), None, None, + None, ) } @@ -240,7 +241,7 @@ 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, None, None) + ChainSpec::from_genesis("Development", "development", development_config_genesis, vec![], None, None, None, None) } fn local_testnet_genesis() -> GenesisConfig { @@ -254,7 +255,7 @@ 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, None, None) + ChainSpec::from_genesis("Local Testnet", "local_testnet", local_testnet_genesis, vec![], None, None, None, None) } #[cfg(test)] @@ -271,7 +272,7 @@ mod tests { /// Local testnet config (multivalidator Alice + Bob) pub fn integration_test_config() -> ChainSpec { - ChainSpec::from_genesis("Integration Test", "test", local_testnet_genesis_instant, vec![], None, None, None) + ChainSpec::from_genesis("Integration Test", "test", local_testnet_genesis_instant, vec![], None, None, None, None) } #[test] From 168de867f5569c92510b1115bea6fc0fe54279a9 Mon Sep 17 00:00:00 2001 From: Chevdor Date: Mon, 12 Nov 2018 20:13:13 +0100 Subject: [PATCH 17/26] Also change the image for the second stage (#1103) The fix in #1101 fixed the build but it produces an image that could not run. The PR fixes that as well. Ref #1099 --- substrate/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/Dockerfile b/substrate/Dockerfile index d4a43eda8d..f7a36f2a5b 100644 --- a/substrate/Dockerfile +++ b/substrate/Dockerfile @@ -17,7 +17,7 @@ RUN cargo build --$PROFILE # ===== SECOND STAGE ====== -FROM alpine:3.8 +FROM alpine:edge LABEL maintainer="chevdor@gmail.com" LABEL description="This is the 2nd stage: a very small image where we copy the Substrate binary." ARG PROFILE=release From 367c99b2bb4431a4b479dc6fbf926640ba3033ce Mon Sep 17 00:00:00 2001 From: azban Date: Mon, 12 Nov 2018 11:21:03 -0800 Subject: [PATCH 18/26] test-utils: add chain-spec-builder cli (#1061) * test-utils: add chain-spec-builder cli * style changes, mostly indentation * fix padding * add issue to todo * more style fixes * share seed padding with keystore * fix master rebase error --- substrate/Cargo.lock | 1 + substrate/Cargo.toml | 1 + substrate/core/keystore/src/lib.rs | 39 +- substrate/core/service/src/lib.rs | 4 +- substrate/node/cli/Cargo.toml | 1 + substrate/node/cli/src/chain_spec.rs | 95 +- substrate/node/cli/src/lib.rs | 3 +- .../test-utils/chain-spec-builder/Cargo.lock | 3943 +++++++++++++++++ .../test-utils/chain-spec-builder/Cargo.toml | 10 + .../test-utils/chain-spec-builder/src/cli.yml | 24 + .../test-utils/chain-spec-builder/src/main.rs | 51 + 11 files changed, 4116 insertions(+), 56 deletions(-) create mode 100644 substrate/test-utils/chain-spec-builder/Cargo.lock create mode 100644 substrate/test-utils/chain-spec-builder/Cargo.toml create mode 100644 substrate/test-utils/chain-spec-builder/src/cli.yml create mode 100644 substrate/test-utils/chain-spec-builder/src/main.rs diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index f62c803817..cab6452706 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -1729,6 +1729,7 @@ dependencies = [ "substrate-cli 0.3.0", "substrate-client 0.1.0", "substrate-consensus-aura 0.1.0", + "substrate-keystore 0.1.0", "substrate-network 0.1.0", "substrate-primitives 0.1.0", "substrate-service 0.3.0", diff --git a/substrate/Cargo.toml b/substrate/Cargo.toml index 54ae7d9d82..0396030022 100644 --- a/substrate/Cargo.toml +++ b/substrate/Cargo.toml @@ -76,6 +76,7 @@ exclude = [ "core/executor/wasm", "pwasm-alloc", "core/test-runtime/wasm", + "test-utils/chain-spec-builder" ] [badges] diff --git a/substrate/core/keystore/src/lib.rs b/substrate/core/keystore/src/lib.rs index aeb9c50886..5a87fbcd7e 100644 --- a/substrate/core/keystore/src/lib.rs +++ b/substrate/core/keystore/src/lib.rs @@ -131,6 +131,24 @@ pub struct Store { additional: HashMap, } +pub fn pad_seed(seed: &str) -> Seed { + let mut s: [u8; 32] = [' ' as u8; 32]; + + let was_hex = if seed.len() == 66 && &seed[0..2] == "0x" { + if let Ok(d) = hex::decode(&seed[2..]) { + s.copy_from_slice(&d); + true + } else { false } + } else { false }; + + if !was_hex { + let len = ::std::cmp::min(32, seed.len()); + &mut s[..len].copy_from_slice(&seed.as_bytes()[..len]); + } + + s +} + impl Store { /// Create a new store at the given path. pub fn open(path: PathBuf) -> Result { @@ -153,24 +171,11 @@ impl Store { /// Create a new key from seed. Do not place it into the store. /// Only the first 32 bytes of the sead are used. This is meant to be used for testing only. - // TODO: Remove this + // FIXME: remove this - https://github.com/paritytech/substrate/issues/1063 pub fn generate_from_seed(&mut self, seed: &str) -> Result { - let mut s: [u8; 32] = [' ' as u8; 32]; - - let was_hex = if seed.len() == 66 && &seed[0..2] == "0x" { - if let Ok(d) = hex::decode(&seed[2..]) { - s.copy_from_slice(&d); - true - } else { false } - } else { false }; - - if !was_hex { - let len = ::std::cmp::min(32, seed.len()); - &mut s[..len].copy_from_slice(&seed.as_bytes()[..len]); - } - - let pair = Pair::from_seed(&s); - self.additional.insert(pair.public(), s); + let padded_seed = pad_seed(seed); + let pair = Pair::from_seed(&padded_seed); + self.additional.insert(pair.public(), padded_seed); Ok(pair) } diff --git a/substrate/core/service/src/lib.rs b/substrate/core/service/src/lib.rs index 07dbf9addb..6592bce75f 100644 --- a/substrate/core/service/src/lib.rs +++ b/substrate/core/service/src/lib.rs @@ -139,10 +139,12 @@ impl Service let executor = NativeExecutor::new(); let mut keystore = Keystore::open(config.keystore_path.as_str().into())?; + + // This is meant to be for testing only + // FIXME: remove this - https://github.com/paritytech/substrate/issues/1063 for seed in &config.keys { keystore.generate_from_seed(seed)?; } - // Keep the public key for telemetry let public_key = match keystore.contents()?.get(0) { Some(public_key) => public_key.clone(), diff --git a/substrate/node/cli/Cargo.toml b/substrate/node/cli/Cargo.toml index 6f1f92cc82..2ffabbbabb 100644 --- a/substrate/node/cli/Cargo.toml +++ b/substrate/node/cli/Cargo.toml @@ -24,6 +24,7 @@ substrate-network = { path = "../../core/network" } substrate-consensus-aura = { path = "../../core/consensus/aura" } sr-primitives = { path = "../../core/sr-primitives" } node-executor = { path = "../executor" } +substrate-keystore = { path = "../../core/keystore" } [dev-dependencies] substrate-service-test = { path = "../../core/service/test" } diff --git a/substrate/node/cli/src/chain_spec.rs b/substrate/node/cli/src/chain_spec.rs index a3fd6e0863..1efef9e84b 100644 --- a/substrate/node/cli/src/chain_spec.rs +++ b/substrate/node/cli/src/chain_spec.rs @@ -18,16 +18,20 @@ use primitives::{AuthorityId, ed25519}; use node_primitives::AccountId; -use node_runtime::{GenesisConfig, ConsensusConfig, CouncilSeatsConfig, CouncilVotingConfig, DemocracyConfig, - SessionConfig, StakingConfig, TimestampConfig, BalancesConfig, TreasuryConfig, UpgradeKeyConfig, - ContractConfig, Permill, Perbill}; +use node_runtime::{ConsensusConfig, CouncilSeatsConfig, CouncilVotingConfig, DemocracyConfig, + SessionConfig, StakingConfig, TimestampConfig, BalancesConfig, TreasuryConfig, + UpgradeKeyConfig, ContractConfig, Permill, Perbill}; +pub use node_runtime::GenesisConfig; use substrate_service; +use substrate_keystore::pad_seed; + const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; /// Specialised `ChainSpec`. pub type ChainSpec = substrate_service::ChainSpec; +/// BBQ birch testnet generator pub fn bbq_birch_config() -> Result { ChainSpec::from_embedded(include_bytes!("../res/bbq-birch.json")) } @@ -43,7 +47,7 @@ fn staging_testnet_config_genesis() -> GenesisConfig { hex!["f295940fa750df68a686fcf4abd4111c8a9c5a5a5a83c4c8639c451a94a7adfd"].into(), ]; const MILLICENTS: u128 = 1_000_000_000; - const CENTS: u128 = 1_000 * MILLICENTS; // assume this is worth about a cent. + const CENTS: u128 = 1_000 * MILLICENTS; // assume this is worth about a cent. const DOLLARS: u128 = 100 * CENTS; const SECS_PER_BLOCK: u64 = 4; @@ -53,12 +57,12 @@ fn staging_testnet_config_genesis() -> GenesisConfig { GenesisConfig { consensus: Some(ConsensusConfig { - code: include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm").to_vec(), // TODO change + code: include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm").to_vec(), // TODO change authorities: initial_authorities.clone(), }), system: None, balances: Some(BalancesConfig { - balances: endowed_accounts.iter().map(|&k|(k, 10_000_000 * DOLLARS)).collect(), + balances: endowed_accounts.iter().map(|&k| (k, 10_000_000 * DOLLARS)).collect(), transaction_base_fee: 1 * CENTS, transaction_byte_fee: 10 * MILLICENTS, existential_deposit: 1 * DOLLARS, @@ -68,7 +72,7 @@ fn staging_testnet_config_genesis() -> GenesisConfig { }), session: Some(SessionConfig { validators: initial_authorities.iter().cloned().map(Into::into).collect(), - session_length: 5 * MINUTES + session_length: 5 * MINUTES, }), staking: Some(StakingConfig { current_era: 0, @@ -84,9 +88,9 @@ fn staging_testnet_config_genesis() -> GenesisConfig { minimum_validator_count: 4, }), democracy: Some(DemocracyConfig { - launch_period: 5 * MINUTES, // 1 day per public referendum - voting_period: 5 * MINUTES, // 3 days to discuss & vote on an active referendum - minimum_deposit: 50 * DOLLARS, // 12000 as the minimum deposit for a referendum + launch_period: 5 * MINUTES, // 1 day per public referendum + voting_period: 5 * MINUTES, // 3 days to discuss & vote on an active referendum + minimum_deposit: 50 * DOLLARS, // 12000 as the minimum deposit for a referendum }), council_seats: Some(CouncilSeatsConfig { active_council: vec![], @@ -98,8 +102,7 @@ fn staging_testnet_config_genesis() -> GenesisConfig { approval_voting_period: 2 * DAYS, term_duration: 28 * DAYS, desired_seats: 0, - inactive_grace_period: 1, // one additional vote should go by before an inactive voter can be reaped. - + inactive_grace_period: 1, // one additional vote should go by before an inactive voter can be reaped. }), council_voting: Some(CouncilVotingConfig { cooloff_period: 4 * DAYS, @@ -130,8 +133,7 @@ fn staging_testnet_config_genesis() -> GenesisConfig { /// Staging testnet config. pub fn staging_testnet_config() -> ChainSpec { - let boot_nodes = vec![ - ]; + let boot_nodes = vec![]; ChainSpec::from_genesis( "Staging Testnet", "staging_testnet", @@ -144,15 +146,30 @@ pub fn staging_testnet_config() -> ChainSpec { ) } -fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId) -> GenesisConfig { - let endowed_accounts = vec![ - ed25519::Pair::from_seed(b"Alice ").public().0.into(), - ed25519::Pair::from_seed(b"Bob ").public().0.into(), - ed25519::Pair::from_seed(b"Charlie ").public().0.into(), - ed25519::Pair::from_seed(b"Dave ").public().0.into(), - ed25519::Pair::from_seed(b"Eve ").public().0.into(), - ed25519::Pair::from_seed(b"Ferdie ").public().0.into(), - ]; +/// Helper function to generate AuthorityID from seed +pub fn get_authority_id_from_seed(seed: &str) -> AuthorityId { + let padded_seed = pad_seed(seed); + // NOTE from ed25519 impl: + // prefer pkcs#8 unless security doesn't matter -- this is used primarily for tests. + ed25519::Pair::from_seed(&padded_seed).public().0.into() +} + +/// Helper function to create GenesisConfig for testing +pub fn testnet_genesis( + initial_authorities: Vec, + upgrade_key: AccountId, + endowed_accounts: Option>, +) -> GenesisConfig { + let endowed_accounts = endowed_accounts.unwrap_or_else(|| { + vec![ + get_authority_id_from_seed("Alice"), + get_authority_id_from_seed("Bob"), + get_authority_id_from_seed("Charlie"), + get_authority_id_from_seed("Dave"), + get_authority_id_from_seed("Eve"), + get_authority_id_from_seed("Ferdie"), + ] + }); GenesisConfig { consensus: Some(ConsensusConfig { code: include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm").to_vec(), @@ -166,7 +183,7 @@ fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId transfer_fee: 0, creation_fee: 0, reclaim_rebate: 0, - balances: endowed_accounts.iter().map(|&k|(k, (1 << 60))).collect(), + balances: endowed_accounts.iter().map(|&k| (k.into(), (1 << 60))).collect(), }), session: Some(SessionConfig { validators: initial_authorities.iter().cloned().map(Into::into).collect(), @@ -192,8 +209,8 @@ fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId }), council_seats: Some(CouncilSeatsConfig { active_council: endowed_accounts.iter() - .filter(|a| initial_authorities.iter().find(|&b| a.as_bytes() == b.0).is_none()) - .map(|a| (a.clone(), 1000000)).collect(), + .filter(|a| initial_authorities.iter().find(|&b| a.0 == b.0).is_none()) + .map(|a| (a.clone().into(), 1000000)).collect(), candidacy_bond: 10, voter_bond: 2, present_slash_per_voter: 1, @@ -209,7 +226,7 @@ fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId voting_period: 20, }), timestamp: Some(TimestampConfig { - period: 5, // 5 second block time. + period: 5, // 5 second block time. }), treasury: Some(TreasuryConfig { proposal_bond: Permill::from_percent(5), @@ -232,10 +249,12 @@ fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId } fn development_config_genesis() -> GenesisConfig { - testnet_genesis(vec![ - ed25519::Pair::from_seed(b"Alice ").public().into(), - ], - ed25519::Pair::from_seed(b"Alice ").public().0.into() + testnet_genesis( + vec![ + get_authority_id_from_seed("Alice"), + ], + get_authority_id_from_seed("Alice").into(), + None, ) } @@ -245,11 +264,13 @@ pub fn development_config() -> ChainSpec { } fn local_testnet_genesis() -> GenesisConfig { - testnet_genesis(vec![ - ed25519::Pair::from_seed(b"Alice ").public().into(), - ed25519::Pair::from_seed(b"Bob ").public().into(), - ], - ed25519::Pair::from_seed(b"Alice ").public().0.into() + testnet_genesis( + vec![ + get_authority_id_from_seed("Alice"), + get_authority_id_from_seed("Bob"), + ], + get_authority_id_from_seed("Alice").into(), + None, ) } @@ -276,7 +297,7 @@ mod tests { } #[test] - fn test_connectivity() { + fn test_connectiviy() { service_test::connectivity::(integration_test_config()); } } diff --git a/substrate/node/cli/src/lib.rs b/substrate/node/cli/src/lib.rs index beb47f91ff..078ee5e143 100644 --- a/substrate/node/cli/src/lib.rs +++ b/substrate/node/cli/src/lib.rs @@ -37,12 +37,13 @@ extern crate node_primitives; #[macro_use] extern crate substrate_service; extern crate node_executor; +extern crate substrate_keystore; #[macro_use] extern crate log; pub use cli::error; -mod chain_spec; +pub mod chain_spec; mod service; use tokio::runtime::Runtime; diff --git a/substrate/test-utils/chain-spec-builder/Cargo.lock b/substrate/test-utils/chain-spec-builder/Cargo.lock new file mode 100644 index 0000000000..9a05a2818e --- /dev/null +++ b/substrate/test-utils/chain-spec-builder/Cargo.lock @@ -0,0 +1,3943 @@ +[[package]] +name = "aes-ctr" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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#a7c0bd6944902b1c9fb2bcf4f8fe1412c824b5b9" +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)", + "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.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]] +name = "ansi_term" +version = "0.11.0" +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 = "app_dirs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayref" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +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)", +] + +[[package]] +name = "asn1_der" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "etrace 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "atty" +version = "0.2.11" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace" +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.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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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 = "base58" +version = "0.1.0" +source = "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.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.7.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)", + "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "base64" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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)", +] + +[[package]] +name = "bitflags" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "block-buffer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byte-tools" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.25" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "chain-spec-builder" +version = "0.1.0" +dependencies = [ + "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", + "node-cli 0.1.0", + "substrate-primitives 0.1.0", + "substrate-service 0.3.0", +] + +[[package]] +name = "chashmap" +version = "2.2.1" +source = "git+https://github.com/redox-os/tfs#3e7dcdb0c586d0d8bb3f25bfd948d2f418a4ab10" +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)", +] + +[[package]] +name = "chrono" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "clap" +version = "2.32.0" +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.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 = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cmake" +version = "0.1.35" +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]] +name = "constant_time_eq" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "core-foundation" +version = "0.2.3" +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)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "core-foundation-sys" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "crossbeam-deque" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-deque" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +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.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)", + "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)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.5.2" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.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)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.2.2" +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 = "crossbeam-utils" +version = "0.5.0" +source = "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 = "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 = "datastore" +version = "0.1.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +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.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.32 (registry+https://github.com/rust-lang/crates.io-index)", + "tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "digest" +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 = "either" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "elastic-array" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "env_logger" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "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.5 (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 = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "error-chain" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "eth-secp256k1" +version = "0.5.7" +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.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.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "exit-future" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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 = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fdlimit" +version = "0.1.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)", +] + +[[package]] +name = "fixed-hash" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.3 (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 = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +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)", + "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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-cpupool" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.55" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "getopts" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "globset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.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.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "h2" +version = "0.1.13" +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.10 (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]] +name = "heapsize" +version = "0.4.2" +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 = "hex" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "hex-literal" +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.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hex-literal-impl" +version = "0.1.1" +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)", +] + +[[package]] +name = "http" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "humantime" +version = "1.1.1" +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 = "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)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", +] + +[[package]] +name = "hyper" +version = "0.12.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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)", + "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)", + "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)", + "time 0.1.40 (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]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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 = "indexmap" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "integer-sqrt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "interleaved-ordered" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "jsonrpc-core" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#2ed142d55662155b0dc76b9b5d2732300f265dd6" +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)", + "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.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "jsonrpc-http-server" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#2ed142d55662155b0dc76b9b5d2732300f265dd6" +dependencies = [ + "hyper 0.12.13 (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.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "jsonrpc-macros" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#2ed142d55662155b0dc76b9b5d2732300f265dd6" +dependencies = [ + "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 = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#2ed142d55662155b0dc76b9b5d2732300f265dd6" +dependencies = [ + "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 = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#2ed142d55662155b0dc76b9b5d2732300f265dd6" +dependencies = [ + "bytes 0.4.10 (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.1.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 = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#2ed142d55662155b0dc76b9b5d2732300f265dd6" +dependencies = [ + "error-chain 0.12.0 (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)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kvdb" +version = "0.1.0" +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)", + "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kvdb-rocksdb" +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)", + "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 (registry+https://github.com/rust-lang/crates.io-index)", + "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.4 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "language-tags" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lazy_static" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lazy_static" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazycell" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.43" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libloading" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-floodsub 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-kad 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-mplex 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-ratelimit 0.1.1 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-relay 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-secio 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-tcp-transport 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-transport-timeout 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-uds 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-websocket 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-yamux 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "stdweb 0.1.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-current-thread 0.1.3 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (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)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.4 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "smallvec 0.5.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)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "tokio-dns-unofficial 0.3.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 = "libp2p-floodsub" +version = "0.1.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "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.10 (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)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.5 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.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-kad" +version = "0.1.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "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.10 (registry+https://github.com/rust-lang/crates.io-index)", + "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 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-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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "owning_ref 0.3.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)", +] + +[[package]] +name = "libp2p-ping" +version = "0.1.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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.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 = "libp2p-ratelimit" +version = "0.1.1" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "protobuf 2.1.4 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "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.10 (registry+https://github.com/rust-lang/crates.io-index)", + "ctr 0.1.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.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "tk-listen 0.2.0 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.20.3 (git+https://github.com/tomaka/rust-websocket?branch=send)", +] + +[[package]] +name = "libp2p-yamux" +version = "0.1.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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)", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "local-encoding" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "skeptic 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lock_api" +version = "0.1.4" +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)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +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 = "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.20 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +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]] +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 = "mime" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio" +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 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.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" +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.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "multiaddr" +version = "0.3.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "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)", + "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "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)", +] + +[[package]] +name = "multistream-select" +version = "0.1.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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.5.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 = "names" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +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" +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)", + "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.14 (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)", +] + +[[package]] +name = "net2" +version = "0.2.33" +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)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "node-cli" +version = "0.1.0" +dependencies = [ + "exit-future 0.1.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.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "node-executor 0.1.0", + "node-primitives 0.1.0", + "node-runtime 0.1.0", + "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)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", + "sr-primitives 0.1.0", + "substrate-cli 0.3.0", + "substrate-client 0.1.0", + "substrate-consensus-aura 0.1.0", + "substrate-network 0.1.0", + "substrate-primitives 0.1.0", + "substrate-service 0.3.0", + "substrate-transaction-pool 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "node-executor" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "node-primitives 0.1.0", + "node-runtime 0.1.0", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", + "substrate-executor 0.1.0", + "substrate-primitives 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-trie 0.4.0", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", +] + +[[package]] +name = "node-primitives" +version = "0.1.0" +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-primitives 0.1.0", + "sr-std 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "node-runtime" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "node-primitives 0.1.0", + "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 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.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-api 0.1.0", + "sr-io 0.1.0", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "sr-version 0.1.0", + "srml-balances 0.1.0", + "srml-consensus 0.1.0", + "srml-contract 0.1.0", + "srml-council 0.1.0", + "srml-democracy 0.1.0", + "srml-executive 0.1.0", + "srml-session 0.1.0", + "srml-staking 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "srml-timestamp 0.1.0", + "srml-treasury 0.1.0", + "srml-upgrade-key 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "nodrop" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nohash-hasher" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num-integer" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num_cpus" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ole32-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 0.9.1 (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)", + "libc 0.2.43 (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" +version = "0.10.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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)", + "libc 0.2.43 (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-sys" +version = "0.9.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.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.3.3" +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 = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "parity-codec" +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 = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parity-crypto" +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)", + "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)", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parity-rocksdb" +version = "0.5.0" +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.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parity-rocksdb-sys" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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)", +] + +[[package]] +name = "parity-snappy-sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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)", +] + +[[package]] +name = "parity-wasm" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.4.8" +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_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.5.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)", + "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.4 (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]] +name = "parking_lot_core" +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.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.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 = "parking_lot_core" +version = "0.3.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)", + "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.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 = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pkg-config" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "proc-macro-hack" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "proc-macro2" +version = "0.4.20" +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 = "protobuf" +version = "2.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pulldown-cmark" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pwasm-utils" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (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 = "quick-error" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.3.22" +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.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +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.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.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]] +name = "rayon" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon" +version = "1.0.2" +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)", + "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon-core" +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)", + "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" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +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)", +] + +[[package]] +name = "regex" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.2 (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-syntax" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.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 = "ring" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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 = "rust-crypto" +version = "0.2.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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)", + "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc-hex" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc-hex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rw-stream-sink" +version = "0.1.0" +source = "git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d#8111062f0177fd7423626f2db9560273644a4c4d" +dependencies = [ + "bytes 0.4.10 (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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "safe-mix" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +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.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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scoped-tls" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "security-framework" +version = "0.1.16" +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)", + "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)", +] + +[[package]] +name = "security-framework-sys" +version = "0.1.16" +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)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde_derive" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 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)", +] + +[[package]] +name = "sha1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +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" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "shell32-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "skeptic" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pulldown-cmark 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slab" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slog" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slog-async" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slog-json" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.32 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slog-scope" +version = "4.0.1" +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.4.1 (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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sr-api" +version = "0.1.0" +dependencies = [ + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "sr-version 0.1.0", +] + +[[package]] +name = "sr-io" +version = "0.1.0" +dependencies = [ + "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", + "substrate-primitives 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-trie 0.4.0", +] + +[[package]] +name = "sr-primitives" +version = "0.1.0" +dependencies = [ + "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", + "sr-std 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "sr-sandbox" +version = "0.1.0" +dependencies = [ + "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", + "substrate-primitives 0.1.0", + "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sr-std" +version = "0.1.0" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sr-version" +version = "0.1.0" +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-primitives 0.1.0", + "sr-std 0.1.0", +] + +[[package]] +name = "srml-balances" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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)", + "safe-mix 1.0.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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-consensus" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-contract" +version = "0.1.0" +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)", + "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", + "pwasm-utils 0.3.1 (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", + "sr-primitives 0.1.0", + "sr-sandbox 0.1.0", + "sr-std 0.1.0", + "srml-balances 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-council" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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)", + "safe-mix 1.0.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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-balances 0.1.0", + "srml-democracy 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-democracy" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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)", + "safe-mix 1.0.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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-balances 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-executive" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", +] + +[[package]] +name = "srml-session" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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)", + "safe-mix 1.0.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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-consensus 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "srml-timestamp 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-staking" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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)", + "safe-mix 1.0.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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-balances 0.1.0", + "srml-consensus 0.1.0", + "srml-session 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "srml-timestamp 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-support" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "substrate-metadata 0.1.0", +] + +[[package]] +name = "srml-system" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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)", + "safe-mix 1.0.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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-support 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-timestamp" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-consensus 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-treasury" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-balances 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "srml-upgrade-key" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-consensus 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +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 = "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-cli" +version = "0.3.0" +dependencies = [ + "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.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.25 (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.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.5 (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", + "substrate-client 0.1.0", + "substrate-network 0.1.0", + "substrate-network-libp2p 0.1.0", + "substrate-primitives 0.1.0", + "substrate-service 0.3.0", + "substrate-telemetry 0.3.0", + "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.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-client" +version = "0.1.0" +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.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)", + "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)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-api 0.1.0", + "sr-primitives 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-executor 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-telemetry 0.3.0", + "substrate-trie 0.4.0", +] + +[[package]] +name = "substrate-client-db" +version = "0.1.0" +dependencies = [ + "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.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", + "substrate-client 0.1.0", + "substrate-executor 0.1.0", + "substrate-primitives 0.1.0", + "substrate-state-db 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-trie 0.4.0", +] + +[[package]] +name = "substrate-consensus-aura" +version = "0.1.0" +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", + "sr-primitives 0.1.0", + "sr-version 0.1.0", + "srml-consensus 0.1.0", + "srml-support 0.1.0", + "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-network 0.1.0", + "substrate-primitives 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-consensus-common" +version = "0.1.0" +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", + "sr-version 0.1.0", + "substrate-primitives 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-executor" +version = "0.1.0" +dependencies = [ + "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)", + "lazy_static 1.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.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", + "sr-version 0.1.0", + "substrate-primitives 0.1.0", + "substrate-serializer 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-trie 0.4.0", + "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-keyring" +version = "0.1.0" +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)", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "substrate-keystore" +version = "0.1.0" +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.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.32 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-primitives 0.1.0", + "subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-metadata" +version = "0.1.0" +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)", +] + +[[package]] +name = "substrate-network" +version = "0.1.0" +dependencies = [ + "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)", + "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.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", + "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-keyring 0.1.0", + "substrate-network-libp2p 0.1.0", + "substrate-primitives 0.1.0", + "substrate-test-client 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-network-libp2p" +version = "0.1.0" +dependencies = [ + "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "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.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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", + "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.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.32 (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" +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.7 (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.5 (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 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)", + "rustc-hex 2.0.1 (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", + "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)", + "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-rpc" +version = "0.1.0" +dependencies = [ + "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", + "sr-primitives 0.1.0", + "sr-version 0.1.0", + "substrate-client 0.1.0", + "substrate-executor 0.1.0", + "substrate-primitives 0.1.0", + "substrate-transaction-pool 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-rpc-servers" +version = "0.1.0" +dependencies = [ + "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", + "substrate-rpc 0.1.0", +] + +[[package]] +name = "substrate-serializer" +version = "0.1.0" +dependencies = [ + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-service" +version = "0.3.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.25 (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.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.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.32 (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", + "sr-primitives 0.1.0", + "substrate-client 0.1.0", + "substrate-client-db 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-executor 0.1.0", + "substrate-keystore 0.1.0", + "substrate-network 0.1.0", + "substrate-primitives 0.1.0", + "substrate-rpc 0.1.0", + "substrate-rpc-servers 0.1.0", + "substrate-telemetry 0.3.0", + "substrate-transaction-pool 0.1.0", + "target_info 0.1.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 = "substrate-state-db" +version = "0.1.0" +dependencies = [ + "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", +] + +[[package]] +name = "substrate-state-machine" +version = "0.1.0" +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)", + "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)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-primitives 0.1.0", + "substrate-trie 0.4.0", + "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" +dependencies = [ + "lazy_static 1.1.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.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)", + "ws 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-test-client" +version = "0.1.0" +dependencies = [ + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0", + "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-executor 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", + "substrate-test-runtime 0.1.0", +] + +[[package]] +name = "substrate-test-runtime" +version = "0.1.0" +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-api 0.1.0", + "sr-io 0.1.0", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "sr-version 0.1.0", + "srml-support 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", +] + +[[package]] +name = "substrate-transaction-graph" +version = "0.1.0" +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", +] + +[[package]] +name = "substrate-transaction-pool" +version = "0.1.0" +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", + "substrate-client 0.1.0", + "substrate-primitives 0.1.0", + "substrate-transaction-graph 0.1.0", +] + +[[package]] +name = "substrate-trie" +version = "0.4.0" +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]] +name = "subtle" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (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.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (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.6.2" +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)", + "rayon 1.0.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 = "take_mut" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "target_info" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "tempdir" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.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)", + "remove_dir_all 0.5.1 (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]] +name = "termion" +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_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "textwrap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.5 (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.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tiny-keccak" +version = "1.4.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)", +] + +[[package]] +name = "tk-listen" +version = "0.2.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)", + "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.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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 = "tokio-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.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.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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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]] +name = "tokio-dns-unofficial" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.6" +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.25 (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.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.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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.6.1 (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.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.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.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.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tls" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.25 (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.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.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.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 = "traitobject" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "trie-db" +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)", + "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 = "trie-root" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" +dependencies = [ + "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" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typeable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.2" +source = "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.7 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.1.6 (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 = "unicase" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicase" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-width" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +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.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "untrusted" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "url" +version = "1.7.1" +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.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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vcpkg" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vec_map" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "want" +version = "0.0.6" +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)", + "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wasmi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (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.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.10 (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 = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +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)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +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.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (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.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)", +] + +[[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.10 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +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#966f2730f7a32150f282eef29fd2aecb14d7b9fa" +dependencies = [ + "bytes 0.4.10 (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.0 (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.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 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.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +"checksum app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e73a24bad9bd6a94d6395382a6c69fe071708ae4409f763c5475e14ee896313d" +"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.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 base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" +"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.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.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"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 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.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" +"checksum bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ce55bd354b095246fc34caf4e9e242f5297a7fd938b090cadfea6eee614aa62" +"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.1 (git+https://github.com/redox-os/tfs)" = "" +"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 cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"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 crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" +"checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" +"checksum crossbeam-deque 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3486aefc4c0487b9cb52372c97df0a48b8c249514af1ee99703bf70d2f2ceda1" +"checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" +"checksum crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30fecfcac6abfef8771151f8be4abc9e4edc112c2bcb233314cafde2680536e9" +"checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" +"checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" +"checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" +"checksum ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4b669fcb8e20124db86dbd9b01e74ec0e9e420e65381311ce5249864fc7ff0c0" +"checksum datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" +"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 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 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 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.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7afe6ce860afb14422711595a7b26ada9ed7de2f43c0b2ab79d09ee196287273" +"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.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.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.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 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 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.13 (registry+https://github.com/rust-lang/crates.io-index)" = "95ffee0d1d30de4313fdaaa485891ce924991d45bbc18adfc8ac5b1639e62fbb" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"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 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 (registry+https://github.com/rust-lang/crates.io-index)" = "72ae89206cea31c32014b39d5a454b96135894221610dbfd19cf4d2d044fa546" +"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 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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-floodsub 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-kad 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-mplex 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-ratelimit 0.1.1 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-relay 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-secio 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-tcp-transport 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-transport-timeout 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-uds 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-websocket 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum libp2p-yamux 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"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.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a" +"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +"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 mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" +"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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"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 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 nohash-hasher 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "27593c72432b8cec9ae79e92792a73c38341064d525b6b612a9fccf8b7d17407" +"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" +"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 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 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" +"checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" +"checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +"checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" +"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.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 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.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 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.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" +"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.20 (registry+https://github.com/rust-lang/crates.io-index)" = "3d7b7eaaa90b4a90a932a9ea6666c95a389e424eff347f0f793979289429feee" +"checksum protobuf 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "671a9cce836bd3635b40b2b0a72783481755ee988c493891f4e974b45264cc9d" +"checksum pulldown-cmark 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8361e81576d2e02643b04950e487ec172b687180da65c731c03cf336784e6c07" +"checksum pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "efd695333cfae6e9dbe2703a6d040e252b57a6fc3b9a65c712615ac042b2e0c5" +"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.9 (registry+https://github.com/rust-lang/crates.io-index)" = "63b5829244f52738cfee93b3a165c1911388675be000c888d2fae620dee8fa5b" +"checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" +"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.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-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_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.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2069749032ea3ec200ca51e4a31df41759190a88edca0d2d86ee8bedf7073341" +"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 remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" +"checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" +"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/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" +"checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7" +"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 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 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.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.32 (registry+https://github.com/rust-lang/crates.io-index)" = "43344e7ce05d0d8280c5940cabb4964bea626aa58b1ec0e8c73fa2a8512a38ce" +"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.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.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1347484b6f8bc4b32a9323d9800b6d934376391002ad9c528cc659fe8afc08ee" +"checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" +"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 subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc7f6353c2ee5407358d063a14cccc1630804527090a6fb5a9489ce4924280fb" +"checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" +"checksum syn 0.15.17 (registry+https://github.com/rust-lang/crates.io-index)" = "3391038ebc3e4ab24eb028cb0ef2f2dc4ba0cbf72ee895ed6a6fad730640b5bc" +"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.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.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 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.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.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.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.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" +"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 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.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d0f8bfa9ff0cadcd210129ad9d2c5f145c13e9ced3d3e5d948a6213487d52444" +"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" +"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-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.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 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.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" +"checksum wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d184c4b7081f30316f74f8d73c197314dcb56ea7af9323522b42a2fa9cb19453" +"checksum websocket 0.20.3 (git+https://github.com/tomaka/rust-websocket?branch=send)" = "" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"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/substrate/test-utils/chain-spec-builder/Cargo.toml b/substrate/test-utils/chain-spec-builder/Cargo.toml new file mode 100644 index 0000000000..7bd99e53aa --- /dev/null +++ b/substrate/test-utils/chain-spec-builder/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "chain-spec-builder" +version = "0.1.0" +authors = ["haydn dufrene "] + +[dependencies] +clap = { version = "~2.32", features = ["yaml"] } +node-cli = { path = "../../node/cli" } +substrate-primitives = { path = "../../core/primitives" } +substrate-service = { path = "../../core/service" } diff --git a/substrate/test-utils/chain-spec-builder/src/cli.yml b/substrate/test-utils/chain-spec-builder/src/cli.yml new file mode 100644 index 0000000000..08c0233c31 --- /dev/null +++ b/substrate/test-utils/chain-spec-builder/src/cli.yml @@ -0,0 +1,24 @@ +name: chain-spec-builder +author: "azban " +about: Utility for creating chain specs primarily for testing +args: +- initial_authority_seed: + short: a + value_name: INITIAL_AUTHORITY_SEED + help: Initial authority seed + takes_value: true + multiple: true + required: true +- endowed_account_seed: + short: e + value_name: ENDOWED_ACCOUNT_SEED + help: Endowed account seed + takes_value: true + multiple: true + required: true +- upgrade_key_seed: + short: u + value_name: UPGRADE_KEY_SEED + help: Upgrade key seed + takes_value: true + required: true diff --git a/substrate/test-utils/chain-spec-builder/src/main.rs b/substrate/test-utils/chain-spec-builder/src/main.rs new file mode 100644 index 0000000000..f0e9ef066f --- /dev/null +++ b/substrate/test-utils/chain-spec-builder/src/main.rs @@ -0,0 +1,51 @@ +#[macro_use] +extern crate clap; + +use clap::App; + +extern crate node_cli; +extern crate substrate_service; +extern crate substrate_primitives; + +use node_cli::chain_spec; +use substrate_service::chain_ops::build_spec; + +fn genesis_constructor() -> chain_spec::GenesisConfig { + let yaml = load_yaml!("./cli.yml"); + let matches = App::from_yaml(yaml).get_matches(); + let authorities = matches.values_of("initial_authority_seed") + .unwrap() + .map(chain_spec::get_authority_id_from_seed) + .collect(); + + let endowed_accounts = matches.values_of("endowed_account_seed") + .unwrap() + .map(chain_spec::get_authority_id_from_seed) + .collect(); + + let upgrade_key_seed = matches.value_of("upgrade_key_seed").unwrap(); + let upgrade_key = chain_spec::get_authority_id_from_seed(upgrade_key_seed); + chain_spec::testnet_genesis( + authorities, + upgrade_key.into(), + Some(endowed_accounts), + ) +} + +fn generate_chain_spec() -> String { + let chain_spec = chain_spec::ChainSpec::from_genesis( + "Custom", + "custom", + genesis_constructor, + vec![], + None, + None, + None, + ); + build_spec(chain_spec, false).unwrap() +} + +fn main() { + let json = generate_chain_spec(); + println!("{}", json); +} From 1f0f3c8f6b1fd038d12d0cf0e13844c9c5dc174a Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 12 Nov 2018 20:44:05 +0100 Subject: [PATCH 19/26] srml-contract: Extract schedule (#1044) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Rename Config → Schedule. * Fetch and pass config. * Integrate config everywhere. * <<::T as Trait> → < * Update roots * Cache existential_deposit * Update COMPLEXITY.md * Update roots. --- .../substrate_test_runtime.compact.wasm | Bin 44860 -> 44864 bytes substrate/node/cli/src/chain_spec.rs | 2 + substrate/node/executor/src/lib.rs | 10 +-- .../release/node_runtime.compact.wasm | Bin 624437 -> 619713 bytes substrate/srml/contract/COMPLEXITY.md | 39 ++++----- substrate/srml/contract/src/exec.rs | 39 +++++---- substrate/srml/contract/src/lib.rs | 81 +++++++++++++++++- substrate/srml/contract/src/tests.rs | 1 + .../srml/contract/src/vm/env_def/macros.rs | 4 +- substrate/srml/contract/src/vm/mod.rs | 62 ++------------ substrate/srml/contract/src/vm/prepare.rs | 35 ++++---- substrate/srml/contract/src/vm/runtime.rs | 24 +++--- 12 files changed, 164 insertions(+), 133 deletions(-) diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index fe88a3463d8679758db6c75f0f567cb6d335816b..cb5c02bbb90c5b4248fd0a3f071a730895cdf9a3 100644 GIT binary patch delta 1582 zcmZ`(T})g>6rP#8ccCn@BP>D%%cU%(lDg0~ZeyX+D~*I=%L67@O|=%Omb3w(DMUj7 zf9T3WyWwEFWvh}}W2>>*bYeoHHT$3mi6jzZ3=c|HZA?>ZLerNTW8ydWO2KG1x%p1c zoH^$^-#N3NFNoBFNPf%>ug6E1czD%REX8~S%$`!e^Pf3SsyTxT9;0u~p4^$y6bp+? z%dkaQWCN0_)!W5!I+L;8H}9N!EMdn~Ugo?v_u4<bJs=Kuw)0+NC+1D%wc- z58QC9N2q2^x*!!zF?+LIgPSW&wW;JP=eMY!beHNVtu{R-lQ|S$SDHTv#x^>TW%e7| z^l6i9f1dhj-9AH%MXA2B85ODWh_QM(rOZJEug#?&NKvvvFM>rR)WTErLueB&_^bA2 z@I^Wtu51`Qsr!x@==d7?`nLoT?I^T_7SZSk3k!zquotxe_vtnufTP4bErieUpc>k8 zOz`r{TXW6aX(zF?n3g*LNK&w_lFv|cT{S2S*426dSL)w0c^U0({Dqe(d*==gj>Aor zB@yTLw65&ZO6y5tG*>l7=$oed`J%esblQg`ueJWjAC9?=EZ@jH(boO&_TmABO{%G8(kzTH$^MF+G zof=RGc3Rh152J8}SP?qiy$^%9-MusG&I+Z}6FtYUF6!$e4ZL`41XEtCH^egC`B{D! zWjTe8ehG1I9X*L0ulEjRF9+KxCHszN@HrJ9_*9eKJyg1iPf^#%Q#I4hP$OXV7~djB z9R-|+5Z9&|7B@I>&WW1QrV$pi8fS;eh;BngJKBzlA4Y%8US2VKOr04$VDQ*@tfgkk zQAJDPj*7v8D9)f9;V}ug3ZaR9UrXDQ#q4=H5!-;~KZ}KU%LONmj&Rf5MO*n_Y2{Yt zL$*aE(A$XjQ|mY)R6D){>4(N^^ozVg9cX9$L`8MdDW!S3rSx8daS-6H3T9_vZL8t1 zFhUxbDCSW*J8{{Ul!DoVgZNkaMD2NdR@}o@{^)u+Ei?>N#|< zt-b1S=L@0k9=a5-RnMNO;AF=eNhI>=&B@JFkZ9(N4kSu=l7 zE}jGifG+_hun*{GY=9kykq5`5>tGjwI)OwY{d>!lOaS|U_X2OCnkJ~v^}VHnv#>q? lo9}n2jUV{3{stkAo45b~ delta 1572 zcmZ`(eMntp7=NGl+x!YKK3ps<^}(7FqqK@|A;8Ll~mL%iVA`n^n1^lQ>Yy{{2rd~ z=l4A4%r5eoMgIPI(%deGc$b11@#rjb_c1drf2MDUrsXw_I7P%~&d%()$Se!;bVD`Sg)jQcQ060hr!K=%t`;;mA!Pso!jo*Op5DS8|e>O?0wLgJ#|tg)8S4* z?gNBHkIz8C*L-(7{4rRKOheOs%x#8G%`!bl2}wr(Y*o`ni7lXNfegCSuAo<$b}fksM*F9Veb@RsjS zqm(!rEZg-Dh6(bhhKZLfaWw@4%9d+z7^7NikQ)&6Rx_mtxC6;&K!C->f>;c`LB%q( zrI%CDg{|4n?2D&uLYbo5XE4z1uPLKB(NI%?7W!+d9e_mb>rV2E{dM1xUz)pj5_&vQ zUse#dqCZlV?Y5F?lUU7?!m#+Xem$k+kM(EVNb+LSSF|}|MMPI3((M3`^0x-TWRRmA zgJ32z9fQc&zIqq>PChk3fES*w3S3776 zkEre<)`u{rL}!qv2smSTT~VSIFL3EB6L=0UOsp3A z+kg)PeZWIN9oPl*GS GenesisConfig { gas_price: 1 * MILLICENTS, max_depth: 1024, block_gas_limit: 10_000_000, + current_schedule: Default::default(), }), upgrade_key: Some(UpgradeKeyConfig { key: endowed_accounts[0].clone(), @@ -241,6 +242,7 @@ pub fn testnet_genesis( gas_price: 1, max_depth: 1024, block_gas_limit: 10_000_000, + current_schedule: Default::default(), }), upgrade_key: Some(UpgradeKeyConfig { key: upgrade_key, diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index fd68aadd51..fe491c7cfd 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -295,9 +295,9 @@ mod tests { 1, GENESIS_HASH.into(), if support_changes_trie { - hex!("978a3ff733a86638da39d36a349c693b5cf562bcc8db30fec6c2b6c40f925a9b").into() + hex!("a998cf2956b526aecc0887903df66457e640bb2debfd7976b5c7696da31cdaef").into() } else { - hex!("7bbad534e3de3db3c8cda015c4e8ed8ba10dde7e3fca21f4fd4fbc686e6c1410").into() + hex!("2caffd5fcc42934e6b758613ff0a7e624a8c5b7c67b7c405bf6985a7e3a19701").into() }, if support_changes_trie { Some(hex!("1f8f44dcae8982350c14dee720d34b147e73279f5a2ce1f9781195a991970978").into()) @@ -321,7 +321,7 @@ mod tests { construct_block( 2, block1(false).1, - hex!("7be30152ee2ee909047cffad5f0a28bf8c2b0a97c124b500aeac112f6917738e").into(), + hex!("72b2afc379ce2161aef95ef6f86a2321867f12b046703ea0af5aed158c2a4f30").into(), None, vec![ CheckedExtrinsic { @@ -344,7 +344,7 @@ mod tests { construct_block( 1, GENESIS_HASH.into(), - hex!("325a73726dc640af41becb42938e7152e218f130219c0695aae35b6a156f93f3").into(), + hex!("5f4461c584ce91dd6862313fd075ffc26dc702fcc1183634ee7b0c5de8b5b4d1").into(), None, vec![ CheckedExtrinsic { @@ -626,7 +626,7 @@ mod tests { let b = construct_block( 1, GENESIS_HASH.into(), - hex!("cf0fee74c87ecff646804984bbdf85832a788b3ca2a2aa33e20da61fa7182b37").into(), + hex!("9885d4297ce0341ec07957d1de32848460565a17ef2ea400df0e2326634914ae").into(), None, vec![ CheckedExtrinsic { diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 8d53eefe478c3428a332b27b469e77d4e4617ef4..94c8b1f3b87d8fb0a5e210df1fe498c8ac6e2fa3 100644 GIT binary patch delta 167262 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
6`mSRsQ24w5BnrKjs~AgwXnm zci^;a(9gUhX5?2JMAb&)wEw~;R8&~{UY(}-@U$`G!ChF(^OT={hU&J}|{IBNuK`s;ZWmNf=_rwBJcK!>k zU-%=DSO@Nx3Ow8KK6il2L_OwjVlp0G_&0GpE-(F!OLCV<`pyr)3RCo7J`kh2R5(oE z{h^p#a2cO|$P8Eik(gAl+%Q?kx{t*B64Scu6KvjPD431h7v3|=VEhJJ+9#)P#Z^6d1s7W`+a~+ThzpnJ+Ut&i)^8w!2*0NU6R? zO5Oe`q8>AJ=ci&3Cpv|xVaLe-6+iOoBbq@{ZLq2Tx6inK;-BJdq|N9{{s{wTufF4- zu#RTv=l&^1*6@y_JAB65aO7Sq|0PbO(9rVF#iR9*ogaLLv~F>S-V;zso%mc%6`S>O zpUacHN5A=8ZZ`Lg`i?K;C9qIxzLY<~rO2n!;%5Efm-4XEv>igUB}ADL$d5t_M_M2H zZ#hy7>p1V<@~6UdFmU};)mvEW&s6C!?P)5cprqGtQs1qjcmeP@b%J#+KmQmTB`DK# zOBKa_R+XyBxI9s+>hwCH#-qFEgqjxm#~uU&$&jg)>T!1rEtFbdCixxxBc;yD&2+3! zQOw~&pE?GYSWMOGKl{`$$SF)R({YPmB}J?h(;A2ULt7>oD9!3zyHtmRYRKSokq@98 zcW!n73l7kN!_9HzV^AZpJe6>QEy)tJSP)cy5nJ^1kQy7%lK=szn}tq<(L z7WL$aij`!;WKn7|EiU!iQq|{}{ARvn!1f`Irr2S~|uT-zE8Cvkr z0}BmJxzIHGu0wN&C4uhH(r-qTOTJ8T`iMR%s;`f#fxvo4l#t&6-&xp?)%9S?%U-JElbsGbkld5Gtu8KCYw&PS4KHMP1<&uS3a}tQ?4_T^o>(w#hm#>Y zte4d&@}T0?>PTEps%DP6q*B#?``Xu4{U^0IReQAw&hGSj*Lc(O9@<&a;u2t>I~cnz zuzzj$9?<(wYO$}%?A%|M)v1Meba9<(D<{+-PT3VLc0FXm&3bOV8U^EvMT6?4s)T;6 zR+ad%Rb&K1e|>Ck)d%!&X>T>EGD{CRK?tntXL_r*Fxb`xbp|dm8$GA>BwMXUmdPGl zoslm%k&^{Uoz`QMz|@G2rAf8kCDEkr*9T;n?zpUvx?d#A9FdIT4|(RvApXF($q4@9 z_$$R{%S}`b9|ufql~^ZF33tA zq#quyw)CoSur~y1<#QCx@vW4b%8A7Z5!ybwpViO!7)faV$lOBWhSNzy4%^YQV;8QgYjS(&~IaEre&aa1z!Rr@2yXsu93n z7=H&{FUnvT#J7mpk7;59^DVV zZ7ks*euAS}4ULu^QSTnC`k~IB2Xn{0hp6*JX~#`NNQ#u|6NiDMN;~!pQ{#hvhFiy1 zW7N%3+^KIKuTuTclLt+PU~~L3!V5BWW0%n)xlms`K`lUwHzuen#9jL2iRxBprnSwg zT)#C*&8Z=D7R0YWi-)f!Gxa6%B-wO{l!NprDip{@;hp7-?Au=NFPD^ zD5sAIeZ=X5X|v^?n5%B_Q-d;HG*1ml z@hx>ie_6EP-Xr{qj+5u9Ediuu{QEf7PB1+PxbU1AMZfYrH6g$gE7O|?tGeO&yyTDh zc_jMiz7{+(Yl*wu9cxa(6H%_$%~$XE00ZBKQ_%YUopJYJosCofR{ z?09M^&?dJC%2L)}oJ&HkqwYM_Dj`rdEhkah@#u1OgA{jlOuIn+Ll)iswD5HcKI8XcIpg>nvPPzoBI!zN<^&0Q{SJKqance$&IKN8Iet2b=IyQHaq?bg6E~|L(Ag%Rzw_@SEmizOo&>Tj@ zH+O%O9EH$bmyWwYz#G-KoFWW~(LX}W92k7NE`bP8;nGru$Z`vX!`AO_Y^zXLF`d+>|2OH{6>#Ak8ua3Hdr)Ihf z$LgrNdOdfuY$y$)N!R)7%Qwr~%6g_nZ??yn*&eO8ZiSD>fHkPM?%aceXM$dK} z;({hypY46HC^DV(>eAUf)7f0p88wRO2k(-N@sy%fQ)jX5qRWzdno-4G?T(AGJO;qu(^HA%A)bl;$D`19uQ~ zg4m+ZTUN1IRzsI%O*hM$#>-OZQ$KK*98^RdF@!dW*gfv5+!@(sRn2)bI-F;uKvg<% zha6OrC4}2(8j+Ztokc@w57Kj|mFzODCNnK32W`+8pk0~@6Hx$C>!|BM>}H`){hgfE z2ZZb=LUt#aG?Sd1H_5|jlEV|R7E0B?p;3`6@}O6)m;PRs#HjCLTf`p_v7~4S>Y-ZO}8_P6@50OX{h4@k5J zh^rwE!2v5@mjiIntvTM{gwfqb*ha;$=0GViI6Kn$69%*4@>_T$P=o}1Cf;xiDyx`p ziIoDeB5oK%oH)NxF)St=KEYoo%GGXXfs*SLYjDm4)ldyIMwjteqH7-(4@@=ayksO+ zLbbR{d=1C0`!2%y&Pk~Mnv3o<$q&|)B^qD}Ui zt?)=(;DznzRv3VOQo>deBN{~#yIttvzm^jUf*-x6hH!_r+Z`lbTBac>&>6u+phLgg z7b0O_Kf_dGm%eyvX)v%mF+|OSqyliHpZn>1;v`_g1f#oXT8d7eitq-Kh{w?d5rZ-E zY+UUYd_eIfm}F?0m~CH-fQyaXId}0YcGEX3x?iD*DsQ4p5V7mOp^yHB`e48XF%eKH z^hj)tS!w3~W~H1B8*0JvSk^*p7*i%TAk(Pqv1&Rc+Zj~F2@rlOb5%K% z6W<}Zw+we=PT_29x#JtkB7;1QN=Q#GfhTJ=8zAzg;%FG4dlJYE?2h==2fvreV?yM& zNwN^CJky5plq9*1bGP&`hVBBkSWLmO#VJ2BJ)x86a|RA8&WN95<0~u-Tg-^}LdCFN z@P5R3xj-Qb9v* zQ-~_+q0Dq7Nig*VJq2(E(QO*SWXS|NHonjf+rFvsQ{eN$P(cT{fuW*i#49mNU&{~+ z;*-1*>Jdn=mQllHE9}s6NGCyIK6u1ze6)&Xm_O7@NPn~M-BelBLm55Y4$!I=cp~GBHQ3NX6`! z?VDMb_yeWk)!z>hhl?;S+Zx;hM(7`N(0G zHBo>QUDn~)N3xgu&77OAv&)G>d-M7YhlQwzRKN)kFhld4Obc`>)*5hDA(9N@b^uG7 zJ6L&3mf4#^g~Icy@)e7)49&v!4&9i?iBFm0+p!MmczvH zIDH5{f?NX2;~CJ&+XZC=Oi(N?I&r@&$IcGD9$>UY)X1)&1;dl4fh%UjFQ@wzI08)z z_LF?s-c-HHCCmUQJcqf|~xvQ%Q0 zqthX1j!y`=TR=pF^dc5*02b?=c!sWAdsKdHuQN8`xOgN+giY<)4_E==MdDZrYz8wo z3;M@LC+mq4KuHMB5cqvOPutbJ&`C5O(r)AqXHx#fVXre*T(@GonE8w;Z{EuL2k?l?O9{I1#lK)CxGRy?S?;wBB z6QnWvaO%5}e~igLM&zF%hKD>y7DohU5YV6m)oJJi%-d9CqD8|dnEmaz;Rvjjj!Gza zSx(|YBN=c8r_x9P$b%wt2iD*h5YVvz8wchf?|4;^cwl|vl;fhvl!YsM6o?J>l`)Wr z+91=(aAlYnGRvAysUQ;)X~n}a3&<4WFTgPd4no8MA~Y>Ym>azavSViub)dkSs71b7 z%s?+5faGyp#F;rH?iIEiVx2^Gl}ny5l!jRIF_s)=ot(!Rgx6xz*qC<75|AEtok@r( zgGErzMRdO+1-KD7fyKo3rWml8A;$-$p4h&K(TF!j7&I0U8WFfbBjv=FfEaN=!jobl zMkDJS!Xl&%u!wU{P_lNIsmI{qQXEhqRION^$|3AxU=P9>&Zx7p#SR)QLi3hTn=rAw zYa2mC5vq=Xe~P%~9CxWG_tYgso52+X25?56qu=1numdocHF0wMJj--6k1kXL@_|mf zf($4uWvu>_2(m8xXPWw6bqxf$B~wj{64O4R-+WT`5()h;Tr$9#hZU;tGtvoC2snbB zM>sI8?K!N~p+-1uEbFQF z(wpy=_0!<3HNppH5n{tg^Cx|jQAfrXD2IIpX~Tq@fw#I~l9)XVQ{y!V*ueySnnv56 zFB<|7kdXX(?nBbfWF4+)IImXH2>8IGBQQZ(l2oaq%PH8m!{ubyMYx=Vp^+)s1yGPm z#T+Cz5b`wbG@6a)W%fe1wBm$QeIfcyfS!^qm@)?|VC+UoUm}Q63rPVEZiGIH+O;^V z)f-C6PN1(GAaQQ0Fdz*a>uJ>Pa2)!vtjo+G$T2KaDHocla*TltP9B3q$JZgs^j{#( zKt?$QP(VR6xP@CpRq|pfJaC3$38`eV4;Q&alSo#_5KamMu64u#MGkzF7&1WVy%}(& z6Qn~Dm|y9PcnN%@1iMv))>0ae)d!r*uIdBYWA&;Qw7NTAX(Szll4sh_7SLe4^^-5mgQ50>D#N zj=L6&T7*aF%-xysLEI|r0fg*W{P-BoH{_L6K~6!b9UJ>Dj+EL7&ffwFaQ;>XTi29O zRqB1uWHZXR0_a9TDzFqSCE9_{LXts%c1p=LOx8Lv%*zNy64)#ri11*5bF*5~A#iVD z@nPB(L@z$js7=em%D|TNya+Ge!0a+zrk95z_MORDBUQ(PU~0_#K4Sg~e4{`mI3`Jl z5W(^YO54e;03F=vd}MP^aF-}p0BganbE;P?M+Y38g@a9Uqs}ghOHg^tX1^D^^rXe$ zoUerA3+;(ht@vLA?OC+FDSa?Im4YJddI1Ch0F12LfRkR53Q$zZGjO`NX&Ea8gC6nQ zq9hrs#xHekPH0Hjrs$C%!0{y3kZhK-v*zkbSfp^^s2((Ag}JMDVMd2DZP%ym>sqdU zyb=&rJ4Z@_urHxMqq=yPJfzf)vDXw}uL*1(yFg$53yEC1mu2Zey|4!87ZZ^t0hNpr z7zq$DtQ^Bc+De`ouMDwecdhHMv;1^p(kT95`1jYaE zPyJjmj5oGX15RkfRiHL?1buN!Bkm(#g0nuqxf*p^xK`n(cner|2s5Fs z-?Obwrq$E89y6n6WKCt0Lg@?FBJdcnnLJRu4*~gva3QB6Rn2ozaRdXYo2Pclq@T5? z9`qMEmbO8R>tn*KYyiF4>KdyM>FiRlPk;#G3J^wB+wgu(84m6sb`yotgR9pZAHyNH z%J|qAj@bn84Aj;adzOa~@dTVOnY(q)SNNxv5#9AdTU*7WWaC6gNRT3N#U>i#JR$FG zvuDOuAt{dl1i*k;8m?o!N0Uk_1zE-+TTp|Ij&IdxYyb)IFg#M|rEruyQ`bUZ%?7s4 z8X`O`GUxQUowC#g=a>z(X@@n99%76{vw@jgg3|gvE>Lql?=)GydsEyw(Lzblc3{HA0C-E{V-*}1hJ*e zSP15@;M(h5u%OTCl(jkN59OT>FUUe_k2bT|-Lv5yy1Om_G1&wF?pI$0mr;7i3OG#! zcn~!fcPM0&h~YR|{$%qgG3TGS#xw7#vSf^co zD5Ajw(n#?9;9tdb;%PYoFL`QP&^M{=2V@c53wspGU=q+PX%Uzr%?&4QBzcmtkys1; z*EhT%j}HYPT@dgH>JMLlVT#o37v%_XiJtPJ98?oR-Xv@X+QOwE3T?R{x~O6Sz4}Et zu*#V25G{Z-SP7hg8%U<7Uo?AGc+Dg*0vsYFadNh29`Rfv>)33B1En zq)j9&PdbBJuo1v&SVDm!Xu)PI=7=pBKouLr7B0wzm*l((N@ZkI2iq6+)ybr-wkP}QLHlIg zfTZ1bH6Ad&^$K7yk%o+7-geO zH+-^_0MBC*xjwz=6k|FrDG~me6o)5$m=pSego8vv2$tE_!;#Qv(D>UR$)qhz}#< zjQJKtRu#^~H1o47NKui02r+J03)XxIX+ef5Bq4iE=$brgx1y(Y_4O}e6Jf7@`~f+- z3H`c#a8nN5QjY@!a8`)t&0_s4Ps{_A2t7kq|oXzSEyK+oH!9Y0#l$&8j zhcV&i6ag^RhTN)Yw~B-V&@@TUUatT3G56RZ1>Ye@5=HSn1UN%GNgkE%`&mn={XvjRAmB4obv!f z#e@f;z&MTstAx}ageh%9VE5IFBl(tNYyGQ?8%V4#hd9h;aG1Hc{y=^MlVRNmfnT{ePV zM+-BdX9|jgNUE^yOEG{T?M>%L(1|c@;z6(El+Wvyo9!+VX6abFjIJQgVG9sT>J&Qxc98;VG@g2)wj@c zo(6}<<7sdhm827}@4A9ERI(Zz_LZx?K}EXwJvj}0ifIY`Nu#P9WjKKRHCEV$Poc1} zjRU%cw`N!X7Za^_oyvaTS&07%-D|h3g(r0Jv$FS0Va$23Vb<3X$RMSs0n)L#r$(#8 z+i{&3Vlzncu48zPE5;dWhNz!oAx;Ieg1U^k8FnjdPIrxUGme#KW&?HDMEjQTm`w1% z1`ET(qa0Tvz$*)L8VRRNQEF_MECRpHHlR%b8k_^!3F~Xzr!Z3<`>m{<3E!SgM+!_B zm)$%2X(AnNNW`$8J0669w+Bu#0@f;-yMAqVAbWwf3%j^mMm%8FS?3C7GzImsrS5Km zkX;G8mKcb)XDGKJPR1S>h&D*Ekpc!PG24W^OBl&A5R5alW+_iRkx9@tVS++uXpe0| zdR=@riUt*9BaMnwELDb21DB_S@D#9-MFsoR1j4XQ7|!lKVS6xacAv027|ZSsQd%v{ zKR^J2jTi{Woo2+bt7JHcEK8MdLr+B5A!|%>A`2t}Y-oSZm<)KvB&d;`v8>gskK8Hy z71WB9(cqbs(7DWPAV9KV0f1(_iH=Q5(=!+b0ugDdIhQj=%0JIxLlbN&qauWgi+gm1 zeOv}J0>sP(q!O@jPKs#tWyp?7R-u~@kducE9M`?3O&n(+cFJ&RG<#?7qk@gE|AlLR zbewP%N(t_Z$(jK!Io}JcM@ofg0^%Gg5(jU0BYRgV;K=7>v*&P_0GWBVPcQgA4o3X> z9$EHXAADE5K?9Z(&+qG?@E-zU5G(>vi<=)zKVXoJSkzK*yPjYY#SVwxF4t@Cl?{g$ zk*|&eadvny2kyb1>{JI}2o%|Ylxk^)1%SY89FPmmK+X{=yE{iQ{lUF*Ix@I$#zK*W zD9K8oZ_;?@06t3qLIN=p9QqmYq!9tt;Ld_|yyv00*1QkuuVIJZrk!olk_u#fF>ONnPKVqI0F%lyZq@P>$5ov#Sg624 zKHm&kox}(PVFE5elz^FoV~jTSC<32xgX=Vztg`N|yhE(akvKxi914ej*96VoH?Etw zJY)_w!;m7&@d6NeC1e&f4siy>5o*BmWtc<*CPUkBlAnWlN>NZ`BoVffF2tM>M7j{u z?$RM^7!yfm_%DZ+q)0Nk1qMl|kDKK%ap}2&heX?G#dZm?6emU@`-?z~`xWpnC_^)x z0sn{dZ0Hb~0PI5GKp~p5cTCB(l>7q&9|1$OcWvlwA}-m`a9K&%Q(d!-7EakCHFp3Fk)(j?ekjs;x zuy2A4XAeAVC@LIuL3XX#X!=F`%e}u)8T;$KXwyrDc0W*wB$xS5gxsX0#2vD9& z0&)q|P(&9t>yWObKYma)W{_dd9v=DSoHT+xHA)|ZY%uI&Qbs7-&%m3!KF$^=q%vZC z@cER$i|M-#>*Ym4h`MGZ?Iy!`vBO5kQ1wjDysKP&(n4;1(n8fK zIU94qC z5^x3h!st5M%j-_nkSQhD)HxarkX8$qn~9n7r;u1c)a7}G6hTFB*p23pHZ+w)}oaTu1& zb|hW;yZC#60-R#dI{e*e6W(Ohdft^l7xw24kruofyBOpZBkUl(1RiX(2>aG`5rNCNThs7HSO<7}*;%k9o9vNm2xd8NcR5BNfeaub7XspxTvKK+L zbFm@=Vx-*l09k_Do1~ZNkJq1XO~D179!J;}%{lrU0?!~!fQ@&s04XZD0{$IN+!V;D zpt{fm5Q=cTNE4_QlcbBe8^J~5-tG_P_1rs>!KeyyfCwZC;1#^riYO@UnAG&aCLXQ9 zs06`W;scjJmwLP5>g&C_lU&6BdBqIl3VwLAlx0cGz=ZDZQKOc(jY<2gpnIAW;NiyN z*%%H(SHLC?$HIE)r?PL9U0D2(P>Y?^Km1gFw?F^r7PbyK`yqcz62hC=J%WYgVhB|t ztbg^Mw1Hzf@Dn#g1kK5Y1p*G9f1B4tM}8w?*jAeNTUqY5GggAfV_vv|0#14D&?NI4 z*^q*Gpt0zzB?uPEn#S_lbPI6=P>95>{IT3ER!6#9J?-ostTp|JS%I0P+PQpqd)#FPT_OpjTF;KnbVj(85|%hj_AT82IBP}$o(Zs=93)Y0x>w&{xYP|=b5MzC-O@3q>X zf0@AxJ~rt3R&_bQAB+=B^qrTg8a(~^rD{Lsz3DPF2wT2;FH;v)m_6N2;snh97j#9R z$6SsYGj!|a>QnB8(t8%^yIS$ypMd^#tLjfbwlE=3u8Xcvle53}r@woJ8dlW)S*PXT z$PoRKO(LMzK8lxzY`X&f*$(~uqj<5>C_VowHML{H_tlxQI`<-bW++6+h@tSqGCNnR zu|^N^SeebzeXK`yfAa=5^|Qec9!~sKn#q8&tA9TN{FyT5*H@H!54- zuvUd9T|^FaC%nCQ>>~Q17q)F6{Q`VU9kqEtC?G(W2hH#1r#GnKlREtr8Nf+B^0O&~ z^}4^s{7wc)GziKoNgMbH2RP_+jojByuen1r0l)!+2DkgY|%y=rdZ zT@17KFg%AGO@IZ68s#tilwFTn&vUJ@Y9o5K@q-s@>58AE*ka+f(yuF^-= zg2w#9S!e*C1)%}=ZE74n9RwO6;Ikq8d0T^wSyPdrF%z%^RU(*Vm=xRT zVrw%FlEJSMIWFB#$Iii;v4P)iRi|WE6`C18g;y1}CXJsk?$F5-r{t|{WDa_0VxWhi z*GQTV3#B!(83zvmphf|0fs}oZcG=2{z#lRpR{CjR zME~e$6zB|&tFFZ7IO5W#>Z@0$0!`x( zKfxyR_NK4Im7u%O)vH-XDoXU0&X!D$+_!+-K|g7E536K%(5zG^uf33tQx0BBF$kT} zL_T6cK|hefemyX6i1kzuYnpI;b}GoUk66c6glW|X(4nB(-`bYdpKK5{uxVTL?mL53 znUuhf-htfQMkC zP+ti<;&lSOXHbe+^U$4;lAtsA{u3-(2!2bFrjNI>`pvTNtIZv%SH?faqSfJKPRQK# z#WoPHn0lmD1<(w)P%KtI)Et17d!y!7>#Sv-U}3x#ECFesmbbv&pm>PDo|O;VvoNwu zREr1{`|ObB6$o%3EbFl6hRGU0=}+ztR_V9b2g66vv=!}45$%<50zbov9qI+h9l{N?I6AGu3(v-a)&C1p`HXe zI$K~Y8gWfOV8QehoXw?M7)de+&YG4?6f9l;zoBDoE_>mId1C>vU15tibg z&@&4KRhtriC1eU74QV5yDnbT%IQX$W^B_U7Qqz=%gBr#c5ElDC03x#p8-f=7qAJnS zI06{o!K(G>b4= zB!7AQ+{~REY)r6+KVL|qRd}H4;-0fc%8E3+3{Mqj#u~mQ2R&=$bkR$Bjyd!YTRET) zPaky?WWtp|xUz$eD+HM_LvVx-bVR=v1d{hmTBHrO!lq3VlMx}UCWC=9*jn?bvehM@ zMzy9JRf4OCWIO@V>5t*Jh4R17q~QvI$UvyLhtl34$|5O0Bt6<0Q?Ne6f^urH9nnBXE>j+pTkn`GZ<~Kchm9^lT-5HfUfR;Sa#3h8wA)Ow*1+-s_I@mnGIoP&63_3WwfG`mj`GyKQhYTzlb zxY)B6j+zta)E%>-c_6p!16X#wi43IW-?4Poc7~X`S?u^p;jCl;>jre@9yMq_%xDYT zkf%z_$~^}ND>ww)OAb&FBramZa?r`EgID3Wb!b0iDC(Ga8rvWQ@>%ynO9NAl;9m3u z;T{{3>uCaEu9HJEAWpX@g*tq846}8;N8|yHpsM9~y$FOm-jc+e86OSKOkpQ_7VaR? z8+mh8@f*N-+XEv3CK;wU$RMU693f<^ld1+4S_q|j_B2Fez*yD@zCir4j)q)~n!B7; zV)k0>P}VB(87+<($4y?qGh{gN7%9K{#vj3aG2gJU?5P~@ zurZr7EN(1BmhDnw(!jDI8wTKYH!RF5EQ+LMEjO3-9>f}%`Z;b0YqdZ`F2jLDxI|t^ z4i*TBO2|I;L%TUy^kTtImfI#I*9p0ej_H}}X8^KL^^!xFJ3R@XmOHtk7nDP~Gh61R zcqbgYrD^%NgiMQ@U`Cvx7y(2vuq_84CfCb0^wN*0_daP1vj{?P31h+R$W_~cYJI8N z!`W(nRO3{J{anp>3j5{OOmn;s&G^40j@->BijTHhPoWB*~3-*5-=Va*@%$CFY<$>_X!jg)(H=(cAoCL8WF^o0&nH(mt{fyYgWp8}o6W=g0iL44`~eAD z6fdo5oUK0Vig`L>1bvAtHDlwE_;QUrh%eU|g!tmu=&(ZIkgA2Z=-}m;%YFiu&e@JG z`;LZ3VtRuW8KJGrd@B-?E(Twjc9P*YukLCms>DDfE|AyiO1Fc^t1UT&me~T0h6W&1 zqsTYr$~JmMoA6ddKoOgbZp5TfwNjXqXnw61=JconCYMM7q9tUZnXUSLxjy%yPoO9* zUlq)h8MvfT<1Y1J5|%_npE)KWE2ahnLg;sAUj3a^A2I~0T(};VTOCJ$-9yy} zv1`Z-^y{@7MBlz}?l_!Rg~S|BqrsZYv%e4c^qB3ccU2*p18wS0b_eS`4MaL7>(*2n zZBsG9YP2o8e4-c#ju_lxmvIduMe?SJF|$f1Pto>tP;!MFfysSEVong&K3;E!OAk9W zI5ke$vQ*vEqIm(0pqWg*>EJnIMmdsJb-6QVxY=1|#EM~kWXR)#KIIqKAR|f8G{Jrm(kSDUe27Lk9=HS@Bc0C6 ztAj*BwkSu_s4gsAxNC?Angp~cqJWgP&NJdSWy1X%i*0SZSA^s*c}_L%qAJ<$6*)B^F4ZrZ5^$nB!duBp(iJCVP!T|c-}HQ@5{ zPBooMUZ@$Qr#`BRLf1!p3dslwebS?&S9bC4jlZWcnv~G!l^@E3#cts zYR9wB=nS{|aJbf755ys#GN@IFwdyO_dWH2bqmwf-TIGv&;>)B9#k4cv0(@bWu zfE{PonFaH=H&LxjPuQh!B$Y%^kv?@7vWvFs>vyRih=IEN3H$_IE+vNef?lqG;io^L zu0X;~(Q~S|vJ=6MzdfM_%J|IYKOJESc6?`#YLfA6&QPv6WLt@# zZhuNO%1wU#_EYK*oq0}0{1z==uYFF{pG1oRt9x%agxEt+ZLxzl<&rMI3t5A9q^O z3}Xk4%h4~(_~2s4rg4Lyc|;e6nKl?&W26}cWQM1N@33f>%^>(X~qM& zn;G=lY|M*+x|oO&&>>oYkun2rG&2ESJA?lc#3+dv@svXOpfNBJel390ON#9Abl8ku zXa$4brA9h3iR|kGZBH@$OcUcnm{!p4uqE^_hsyp)W&LodJYC$R=M9rhqj>y2m8Jw$B@gQA#JybO1)&X9Hn0!DF@eK(X=7N)FjE=ln$T&#p!9C z94hPd1Bb}40(Iz?QSzq$WEzRW)1YHqdDECK+Vvx&yC1A+e zFd4nAui-TnC*ee8TR1;Bwl+CUwDuR9qAvk_z$lNRD{dXpL*mr&Bpcb9( z@`%QH?-7^#vNx?ibDv~yR)6X~@otE4IA0qgd5)+YLdXW6k=2Lel`g-5Iho&b6ETdS zznUofrNM24Fs$8e2!F(F=fel!{SPrs5Oh#z7IK^6;Emf1(97|+4HK2w zP7fa|tCv73k>oNU#al?+u_JCL5Jhe$A?_qknB|&56e8vHmTO&Z0}5Tq(G)|82Jw|l4cC@SyXQxh# zUZIoYWyNTB^$=1?207B$K`>Y}07<@eK1YNM(}wiz@(wKV*uU5kJHbLl7s%^ zCBzFY!Iey|=(ul!OiqAYBR?+36gb0#gZNJP8<-*z)e|SmK1J=&h6cajgs{GFqD(Kw z4dR?+2xal+tp24(%-+pC8{H?~4asFg-tP6A$vdT=m?-TkhBUwA4Xl~U(j1d~RhH~L zk~d_hM@*8bzENkbs|N`VfH&3xY_XK0*X95c5vDA>2_MEEx_?Y>8Y62Xh|xpe;`>ed z#Yu85Bx%E;a&jGPQ3`|PcM~<;L0*1Mp{-fZ-wfp_zi zLX!WHzfuhy+n!eQg)uAZ{Rj)fa%}vSIzk0_`@2P-cSxvG-}J2VBMoBxvudTO3P-PF z*mG*QjA!%PJwpXWc(s~35fx8;QPmc^nq9%Ta1zcAo&2${T=#zwzeUXzQjMV|!66{{ zcs5*0GS#pRPwz&s&5wq8*0BERi|UZjdrx*+PBDJ%H8a`Y8*9H~vVQ{USUZsKN+i&c zJ2H$*3_IdO4EyCv$hE%VB{e*L{f}WbX2rcZfezBGQU@$9`Xvg;N;wriz9jG7YoKS+qk@MS6lOvZft) zk_pHJ+{^~`!K2zi*#dUAv9{A#bdCU1!B~(V`H(Xs670OrUFa?R+Tk!28V*jEbrfvG zHMbcWYjwhJW~+j-F6p`7eA07Qa*#>JAY@*%SWi5RV93({H=2?`He z)8HHe!n|sq?VpRUu;%iJq~I;^i5J|vgQU8l=lWas6dT$!`0;2V=+c5t^c6L*q3hXs z&!dO4dO)ENJy0rb-s(YnZx9mT@X&k?P7f&0C%)otgXulJgJr`3W%8g7va*l64&-6G z{GcRP)O8TO>{V61V25fFm$Aek!9k-j>9-i+0e`|J2g2p!-~xKi{S+p_0+S-n^GMKL zwKqxvc(cK>=D33h{!$9NDy;1y2uu0!ipudAAcJ5A;pqL{qm z5MKL(IfUtKb3sA&fAmy;@w#frE~cw2I>=%UE+QrsUJjHYekA}gP1X|Rq7=_2hthFZ z2sS3LKK45`?I1JRNnkDQ0ajNoczo)~#O_L|DKS>A2K^i0kCCi5Ad%euMw5#GZHdFf zFhZ~okE}&(dF!wdpk41Cz zOH%MnrUm?PQdR_eB^2>NmlV#$qzJpL%*b*ex`A_mX{@GmX515fYxN`2OXhguC+5cx zn$VV7Hi>yDRR@#g{5RAINm^ARu}jcCAl~?7R)*b3#7D8AoJc&OKYBxr7EkCtZ>sZg z(Qm3_#BTk;oA~MNCv^BNHBLSu^zm=vY~JZ_sRiO;{q$Q{;%@!tx75H>DM2!9Ld~>5 zgxC!6yF#CoKW6112bSp>by(;hL<2or7^(jsb?*WvM^)zicXe0w+`4Bv$>ch@)HDf9 zA~7J6gmA5_0g*)k@v`o!xUaiv;MLXFbzKEJ3JNMn6s5vN41xx4YZP#1HR|96@UjvW zH417}R-&RtL7Y|8_xpR!sp{&U3E-~(|L6bzFk6=`sl~W*H$)5i{wpXPSkyA<7PV%S> z+d*St`_jFYzd0O^@s&5xtQI63$9Pz-3)i?|Z{_dG0ebN9ma#I(Hqr_*@6f7um@Ky84%~(WiDoiO&rqBoCk?)=>0^6wd|z zT-5Uz_zbds_YWR!z7OhTk|1DFrD6n{*28{SS=`ziCR0K#i5-y0ba(Sk!xX6W~$vu17G_lPu8lwsG}+&ZO#jdH8LBQe4hU5yz#c+5caj@ zeTUj@^8VpXjtl`57*yyyP2HfT+K4_Q#yQ0&r$8BOk9*kZcRXCNt_71L{o{}Di=V;9 zUb1^Gb{1MuO6|YG872%{F^P6-4g63}ZTN^4LhJQ>`6`%32u*5cVvZVCA}hbt6=j`6A{b3Uo8MN2wo?P6jGB{b&IJ zy%HI@YE)BNzv$)7a;6{E(ogTJoP$!N1^4DK%hn5QDNc?xCn{KO zvQff6jT?5CVT1d)F)3ZnA&2xFTin^AICCaXVN+@WW)i3G|4HR=6q~z$QrY= zylU9Pba?;4o^1`SqXB!nNU#$ zHjz7tKKFTP6p>?@gh^UeM&pg+@(a#x+=9uXK>Lg>bP4t=ZtajS#l9|fpw=X2eHF;O z-$Xr}F629V2>$I%pL-w4I!fuA?yD?2i!^DY_%m6(Qj#O$VCh?l|7NeX-_@}car4SY zcmT<=9WPl7Nj9E@SBA5*wTz7SJnj2=<+!JKMnoK`;i@i3(&-v3BLONM-cL8sY?yR{ zc!BitpI6RDR0!eNbr_JUZ2*EID`w>cO6tX!maE6)iEdK|(O_j9vF&H+-~IwJ+?k&H zi^`(Yg};WZq^NC|@mNhjqG&CvO;168X{XSof0{`u-~a9Dy}zhD78IZN%gQkaP?`^5 zn6;(mVb94%K3%zblzfK+DJ_x*yNt8NV1@Is&E}7c%2hd$*7sLVnQnW1SU9-2XnPeL zjyn0e+xC*FCECLFGSi7^H51HCC|Cs)Xc{J!8BmT z8cf>Lz$PP(DPK$Xrh{ji6E&8UX|oYy3pGPn^3aou^*6SQ;*PF&o!D7IpsLfb{N}w7m-(zu(-0V$%e1GMv zmOKpF)uApaD0HHdx>WgwtI8Ll*bM z>=ii8Dl#8bY_+e*FQvq%lMhrDA3_{d;RSrjE%5bA3#cY%ZBC+BC>ugr`Ay~EmS;`M zOwtzZnZTVTAFd|AGo@kiA^iptVrZxd8E!dIp{=-C{F*Cead5dLk6EYL4%!OV+o@}B zdc$vEWP8(Z{id?C#ga^MhzJeY#(p|C655$NaNhT;Nuq3wiCjefMH7w_7Sm}}cPv5N zNm;^IaP}CA0vQ7?YheJl@tI&$W+suL98gS@iKbcDq7kZz!~vS!#LAw^OGA#mVRIPW zrZ!rk&@2w2teil(;h1D0d}Na32j#jgK*uh2iAx3biBL9Xh|`5?ibr)MZJHG=wro<1 z2rAAXR5GRMv)~Ry1rU{r)w)Uhl1d_iNp`w`7c7Lz^s^T?C`z^)DBO1RO z7EXxNWuk*JM<{c43s0qPRgk947!nvU%&^Zw*Ha8{HcI5qBaQOU#SGGCJJe7H4u={n z%NlA}pST~2tEbXKsIYQ^qeGK`2gK3N`Sy@B$|-``&pSskN}1`x*NhpF8O(P|r+ynB z8g_h$J)G*4&4)(=UW;^y!ZhYMBO0JhcXpyRBlI2EvtD>lXK$MkGACuBwZhce;9=42 z&jwEmrcgw|_Dpohecu(C7M}ZqfS!~P73vx4GR(DZsnFFs3vgf{j$LcobQUXry&H_U zg5IZ(4(ZY?9i2C{Dwa&r*2TB+*<70X z_JfrZUz9ZkuLWA2%1rmN#iKDy)ed$`kL(sUtR&EoDc5m2`m*rgBV)9-Qp{;c2X=Yo zGRrAZ@FrU;+3bc@K0*H&ig@GkBU_8& zrK3b6kIsVHW;=Ex;gNB-qQY{mrc`>HBO-Weh7;UMjOT35qgbYdpjL{oTr4`8+_H?p zX?@$vxgtzVr}Jyd1)Z)*a=T0xb}DuB=s+&a?Mxs7GWPmwCU!^t@0LBF|ILDeEAij3H&*K&uR83o9szK9t+dd1*R^#kzg%q!3=M!^M|mLC964U=@}hZ zPzc)BBRa4!9>|KR1C!LZRR||YGuT7o{_M4b)#m0{yud%2A1};a>f5bIU2}CW%Y|Qm ze27Z4nAQdHm@m9Ao?rZIf7vw|vjGdgw}d~Oua_x(1g<|5F&K2|zF;Mh@0fmTen#r1 zF`*+uD9vRZ=Az=P2Hm_5xl7R!2c71d-zoMu?oqo7p&Kz&S3u@vLgv1>wM^LD$LSXt z5SKv86H{NkF<)wb7 zok#aZMO7oF7P8e|5t3{)D0E@Dksn}t7ApWdhn2h27e(V9m*d6{EVwSv_L&UV8=qC= zt&jOP@u@dbt+fhkBret3)RuB=xhitL*&)-4O3FP-76DGK&l7$KOZf<-({m4U=vB8UXuv#l;JX@F>)%4znDnG;hM)F{bA!8%h z5$W&$P{{#D^s!N^m zO}ypUaP|26j|_(@RR8hy;q_dedsO(@?k`Bc9Nx$~E=$wO(cwF&`ii5&I-ia2I4=BD zt$P;#&ne*{#IRmY6v?b=-McxPdx`P7jw*$5#)JhSR?}BYbT7 zlGDS*?H*iqdic2BuPH2GLFebo&J7o)(HW#ZsiudV(NV{f+Mj>mjPS{p*FB91zEK+O+{W0Wn&7!zB$K}T z>EStPG(Va@zTz3-7sKGgV~xpZ$1&h({^>m5$txukq(dm?*2Uwuq{T;fK{Cs1fLJ^u66F$%x%^VLIw zb?Mg6SKrW^$)j}Xt<}ZrigG7(t4oMX3;mWWr-al&>JgIcxFf;TrMT2c#$S4C^~FI~ zWB1*L%;-t$w^!FJY_pooTzWhoCKr;?`-tAf3wE*sAwdYb0%7h3PSKAW)2$~&OM-t- zpSQku-oicCWQ9NjIim)wj(7Mvc5lyKQ^(u`)N$trvO?5>1JT!U{+rSb{}L`<@VSp< zuc<>@(r4($6SsUcD?}aGN~M80>MX@WE>rHUd&XNm+jXOT;hxcRJ-hy<^r!z4uJ4_^ zchU^2^cSzRKyrwDVS3ro5gY2!K#-b3{dCJKL#21$@yhVNHh{1C*YNmZzX*zS6^WSC zt)$z}4d)FyGoHJb9EhmRrsQMv67q8)vpd$^=2_#kcZ;i zU-Rm4?TDhZL$4&`12F4dlAb8!^p01DD|<8VzW)erv0;-wBF&l!#jcO&n{)6An+RSu zJ4cr|@qwUzSe0~gPS5b=uL?sAQGxWvxpto$t{dL6j|o)j^R5XPPS>0lMod~(bbfl) zdEpUD3#d55ZTgY(!hLNyCOoaaOVLii6J9;}rtzc|{G>IHpwct$xEZ7KG)Y^H@URyv#TkbD=) zQQi1D5+=F5D);>;w`1kckwZ||NlW%dwsTINqsU(LU$TOb>EIqqXYFt-z4#(lSogF3 zY$g0Vez?kyrYBT2QEl2O@nl}uxA#xU$CdrK5IXDh-%ICTu!!VvkKj(_vBo7 zB^R{$f8v7+c<~%gP4pFM2+4gsL-AH&#=lRG)I(iAhd-^SaVNJcEC19aA~~CgXk+W# z#y3<%U4v<&rL3;ihkze~bX&^lO(7nu!8=PjO@y&p;2qxF_!XgOuPo&YC!dJIG z$CSCQ+wA#UF88Rat>a=4R_oNqbUPtD=j|?Cx4ion9!+w~587K>zFm*$VzPw~8~=dB zAVgQ0FSr_<1t)EJB-{8on;XZ+i+y*oA}US8(0!H0a~)jnNk`rsKBJ}ToKaIs&c6hj z8f@5ZfkQ1ICOtlb41qDp8T=;G7%i%-tyCCa6;HDAoG{SPaxQ99d%Q(%Sl9<^YyN9UT^H*Sr14r39n{4LoeDO22wZxVW{)uzo6NeA}aW<2&3?JMh67!z473i(h7X zd?(y9aB;VLMoOTy^yhJem9{uFD$WZa}W#({rwQAkCtVtL?FCq zI}Xwxyd_+DQlQ6fEr_K)o#j^IJzp|bhwE&U`O-zECKL2T2h^>OKB&?3^h-fEeM)W_ zrbV-klZs{>GlD&djFmRUXc$1bQjLQ(C;LgT#czR+udw7xjXsAX512Bg1SrN+(?+TL-A$87voylYsRvyTHmq5l% zEe<~08UUZNsm4WE^2$Lr_3TBZ4TJcc5y*ff49kzi~NSaK&FtzA;*cR9T8PnMrET1vn0*6`Sa;QT;bO0(je1ownf z0z_v{8bWyK%D06lw=S@!DhSKBd&hgW_F}$l3@~7JPdE$0kOjor73q{!IU$sqAlWZr zpzH_ReYxbK>}Jxxvi+-j{14g@CZp;iURa)WBSDDP4XtekcnLdDm&8SR=S8u8@y`F6 zpdE*W8-sODq$!}7Ja|HUs(V1(Ox`;H_x9Y;A1}OQr&ySS3u@UBrz0?dXH;ak8e<`JeLbjYMs(CG|f}nlf+8LadI=_Xit+0Bvaye z;ihH0lJ?#QZ`15WCMK~%aU9{(KhA5zwpgXT1UYW12#Q1&hey*Z>A*UZ6Y7ICneMwH zT)E7(rP^Ify6cfcS5v;XlpcR|IPbK*)JFr^K=XF=+!Pi!;Ou$U+*y3V>!7h#{EK{9 z;QUy*)*MP(Y1pjdz#EK*(j95|g7gn*I7@#TOVB?!TGYIyd#?!3 z=GW{i!z1U;qI=%ahK%8R201JJyDP&53uf7KVa{0T1Le^LjH&eD^60|!;w!^3zQ6fO z^teUocdiWA^J~sk;X$n#Yop4J7J%HWw%^aS8tWNhY0l;6o{j0*Sm(3D^z5)=Cic<| zWl}c@rDv^7Z@wyAv0Mj_3mQH8bW}@reet5vB`&jp;a}s(^p97C?+WIo*IbP`$m!o# zqx>&RPk(2aa{0+S!!>1mpufzzR4T=@g@mrHJd$9xCa_22 zumZq7%zkM8KtV|+{Ll-if8po=z2YZ1##s=7EG(7_KS5v2e`VQ#8c^JZ?Z9We>l`c( zIG^*b@UCGUGQFYnZdd@d^^PvZ={h$(b$fU!Be-gN_*zD{ z*M=`yv~(@`MB{lrNw^sUHVQ1PC%rp7pYOl&ZV+Wry8JpkFpcyn*M)Oe;J1(aNG*x* zQJxPl7pC36(WgLLbipVY5E|(luL}?7`%hdKt{Wo8ZZoTmLrx+!#)Ip_!60aiH{L@Z zsrEVV4Ugq=^?So5D|AL2@=(jamL93c-IKt|t%--Y=U<$DkD@~ly%#M*VLpTMdi9R*px&t)R55P4 z+jfK#SgBiX2%C@TDf{ICGZs7Rd%xEduS=7X0`Yj_7etY)_a6jp7GAmwkHHyz!;W%FhVMF*E)zarv4`aO3#A<>jS8b>HuAQSBR6lpkN+^Hyc<7=QVS z@?}AAT-tj``RBoL;}0HEZj{qc-y9xMzBfo8xHIuyGuAnP@3G^dk|;cLoMgw<^zGw#LA`(UE92pFrOxUM}NfBZyv zNUtjcWLNJB7nL7+Z+h~saG8IKv*(|7g}4?!Xm~_yw2=3PUE#{-0!Y|ghqJXbaMjED zLe>?uz7X)g(i(hCO^%BFoU0csM||1wCrDirxBND#8zxu1Su^8aTO`0Xi;}3`!1~;_ zkbNmnIGdN8kup<|gm&a@k!EY}xo*KY!iI1m-)zSZv>ks7kw*RMFgqV;HFrj9(`QGVYYNcxg+rlJwzVg~eu*VDsNm)~0=>vy1Fq}P7nggA< zFwLma38~AyrqFFOaXsjr@`Nl%9Scqf!@cP@Q%T zO{3S=Fd12hQ;xKCT7Fbei00GQGBvN7&&+r1`e75Gu3W^TBh#qCb<9`p;G)bfoE0iN z5jHtx8s(x?3>8#%H1lat^AwYU{;5bo(|a{mXbLkCJpt&Am8UArK58TDarp#_R>{+b z`cM`h$0Rtp9x%C>Oo|;uX@b$=w!rkLfVh0t!p3OQKqV18GF9t`cdWO*`Rb^pj%fCP= z@Te|>C4*||m#70fKrumhAKK}5cMmXG)S&5B})|CQb$Od5ORNa+~NXifH<;|=j8|s3^7IK-*lE~Jcq4&9G z<{WYJ(!aKRz2*Vs-{!+c2qoMgT4e4n67>W&LG~?ASzKcf#BjWh(cmbL|jU-5FMC(=?qbGa%onQ4IlR+5h3W$tV?;~PpR<<>b4rYa2aMdbv?MO&6SUa*?G+N3@<%=NzYs|3wjR7 zbxT#5Jce5w#M?fI>$J&I+MIhpUKe{ZXFeb2~Y-3P?~aOGL33dwEK$Glk(6x_zVGu(;ELy6t6k!JUTN$)Jzs(g*28@~4!0BhI|CvWG1CuA;X)AUJjhw~EPhCj@4Evo@9x=}__rqu^o8%`AL>kk$yDlz*BV(o#a(2b=pB zS1w#t$@?r>MnIrS|EYDLrO77SWKTMBYxt62D1Gy-;gb0}u4131pc)l-#zti-M`xv< zzBRlORp(i^g=<^09F0=Uol#+Yja%pHF|Th))31!rE?_R6)t6`Qc zZ2!V=ThRUmiO+BU!eUyYUxb&a8UkA5;r81}e$KI<@zQl1uLu`d>|=;VoW2kbt_3T3 zKIFuxxP%yjAk_G%1Qa~2XVa^=5-fa~5PMaqSp!B}u~IwFw+6KS3P;P!A{3!sS!V>UY`>{u?nBDJ)u zUQC4K(tsO2?YXTIIkUe^OT|5-{W?3qXvrw)Kx4>;paI}8pa#wdPhatcaA>t9Vs%^q z1_RaGr0TLqrgBBD7m+7?1C4C^kHh(A?!j|+gAK`PFCEcy68Yj-FiMEE|kvNL*2B3KL2mNM# zV=cUQqs!}|fxJPg?yQ1U%(&lWjV#!0+wPRz)@jRayXZ+E?GcTQJkA2FC(XX=E|(Q! zFM}E4$(+Q+WAC9j=-OyJ>GCg!3tP}Fv_v$Poth$EXEWmYUJqAeeX;IfUT)yS(tG@V zXibEr%2d7-YG$hl!|8Ek3Y&}?pM`p)R0>mxWivvhq8r4Ei2fIjZRg&&Rfbbp>X3_h z;q+!hHo0RAF!qZ??B+*wAHj@JHdGs@>}7o37B}I7GEypR5vahM=)w2Z18vK6J(#iKX^lAx~8;;Q!!;{ zdg<4~xH8t%?<#b)ph*PD_eBk~DgB&|Z7AJMjT-$PU4u1Lb9Cvuj0>DHj^px2Pq2fr zpXAntb3Hm++Ri+4MkI?Drth1|&{&n!S}?Vm<{*@fnf9@?IEn_hV76;ard%2h%5;IZmtE_+Qe{kY}$5Y1qWnWY@V1_gW*Ono< zy7Yh+*+D$cKCBm**t+YMv~W-X*LL(?G*(E5{_DV`dv;1?JcX?mwYT|ghL3h>8~wbl!9 zgsSQN-}P!Wh#gC_W)kk^N{-FZQT|IKGpy(DMEd5hg-0GSuu+Nq*;~4!S&`1V5FKo2~9is9y4sn9ry~LqErhv0U{wg;uW3A5p@Y* zt9eHnjH3hOgPwQ>?135U3CY zv0)ykt$ddD|7P>|RKe4ffCfd)&> z0;PD1yi6vU)v@=y7Y4{$0~I-rB@?0zDhGV3l~c&1kLbwh$2+kQfTku!-ZfF1Ja+~# zgl3aoHTyb*s+k&@L(GZN1^cO$-sxM!p}C!TdKNm1sIJB<0oO6Or* zKNml#?pOhveJ*E^M0#CEAw>zS%JyZbyYLr;7)Tj#xEiqBJ9m5m*vL{+t0;bCAL$#B z1khGAPB+uT)>!R{gZSRp1q>J;zx7t1*gF{hvR|Qa~ewYdi|0}_WW%hu{-G5>FV!A^Kbw8JK=iL z<>NVl`d%Y1V-M*H!xp?gN{_uO9BZ^ix?#~^`psfk4V#tTd{=l# zOC}H}v$^p$2hIc!22RJVgyOp}o_D7Db0$6{G34YTKAT4YPJVH2AMAEY4Oqqafh+;u zE1S`IY_QW-3SPT<&*K$Hb6zuI#39pVb?M#eO6ffEeURkBPIsGqCPIOEJ#TbgJj{WB zb3wBK7SSVC&llh-x#({CF)MxF-9+CQY+k6H<;foU!O=MMW3C3sqm`9sHWz9z_Hz2@ z%Jh4NHo4tP8;L_)OH=K8{jpd2W_E3i7c?@N~ z4Tb3&oo_?A^1I=p)~u(~>pAx4boS=tEEzH=E5&Y!ehC{`MZ2{%fz<;|p@4#+eV2 zL4t1fR{ceeZ&okldi3f9TaQgGi=8X`R>5DrL#7|>Z=;u)OxIIe8#1{&S0xUi#0L@e z5`8u&sUWdemdHxFr=qr?Q`3}@?4-o_ z(8jUX;7OOJ%9|a{7TcNsx^8^hxe*7E`v)N~t4g_ckm<09SI!+u#?DEeNlvC0H?cb8 zpu|fEb@0zlQz=vo1~5gs+A49S5OwHQdRI zzI1hf;ypeG)Hwhm-ok>3O1y5Rah4REowsVqo z&n7$HweV>MhhO3G0cU=N2REzq?5^dVEGP_Y>t5dJa(YriYTE~q1yr+5&QDw3Wxias zEuHrbrvqn2W)=b}egEK0^&Beb7)-V6kEXi{6gyJFX~4y`V>f927Bp7vKGt+Oy%u=2 zz>AVwQ{qiG!1SO4V0thUye1Io_~LqWwym|$(Jbxc%@|4a*CR?QP^XnFa85!t^t(iK zvAY%wf49BX*1&9zJW6bj;zQzP**rNt7_#+gZbhV>c-I8nHpIeS)v1;ZsCkfoWx7;u z`OAHpDbJ1fp{dFYHCWNfI35{Yp`S37RlL$ZU@;Svop_`<3b{75#HTm*;R>@^VVFLg z%WE!WuVV;7STmDaR03w4gOs-lH9*RdatM-GzrVif-Aka8+(JRy}8U$Fut4l~7vrRmK`iRktKwW>j2(+VH zo$If7`Y6BdS3m1fu_rZUgeI~|`XKDT3 zaK)3iN7->xqOx9j=geYJR0IRlLyP3jMG zeJ*Ds@J_0o-sKw31hQPR9E#hyt$2BxzuOnxgB^fT5c@W?Z0B(A09{F&`@*G#PT;DW zsS{d+s%<{SX@ZQiv5H14VHsvCTtK~%Y*0S(d;#o-;@U1Jp6A*umlkm|DFWP?-B*gN7p0jy>{n5k4t8+RlGvy@aO7#2p`KQ@9Me@% z&`}X+msM0^zl&J3(XzW^f59#QKcwwpxRvZ63QrJ45E0(=Z*QiY?9ZH0S_I#`c65^g zNR*PTH5r1~1I<#p{l0McOtch>0zpYCM1iPB?!m_3b(VWuNo{B-@L-?p81tXba($B*4qT#Y6fbl1 zdThkI;B-?C#YV;k(h0rE;MOQGyhKz4a&}GWXEdcs*6l_j!CqK2XpcvXL=C&C{UIOm z4@9TiK=%;FQBn_1UNq+HHu^KjH*5n#V!-M+<#!E(b->KnSJ5%LN*mS2X6j zH`;8z%}K7A7Kr0iOW_hyoJcIgYNBXZ@%w{SA|MWqdu`9ykUGGB=`(^k7vcc4=gUsS ztuRpc&xIb~7I?Xtn0UFLQrApPU_N3$;W(q0gr?s{2c8=(h-C#>o!`bH0Q+j zsD*n16Uz0{)U(X>gBOC>jM&z=XkZRfyN5+5FHHyl*HXD6j z?6HC58mPn{ULUFIa`t2bepKAWL}FkXw>9Gma&j!Wn1|6rfHV zn(@GS@Cf{OXMPC3+zPLdY62gD-=G+tSYLpCm_G5>;gG@u=S-_D*DrZ9?Atky0Ifm% ziE_l^Q5}#MR?h3juY*M>gBFRfGM+7Fbg&CCz)<(5LM$U}P(X0oLSo33-&i;;_kcam zrXenOo;a)%y@y(|*N%nZD@xAQ!p9K42r{GML$DQ=n8OuIcmYJwL;#_8b_7W(j-_!n zk5$W-KtO`?U_cO-N1P;17DHWe8_)DRL6&r}O2-W8V*hlGNga;ILqrxPX~BJjl1f*{ zeX;3f(1FgP=Vvwf(_+@-L;+*?oZbu})f+qLpQdLPF6Lj}A1(~Gq7 z1}MlA&r`&SdRZ~R&xu&KKLpspM_o9Xg|R8pjwc4ID4ug3jSS!`HberS#744-?v^xv zFAx?*jVr4Tv~_rQJQ?CiIG9JvWrDPWx@QukIw|i7o#gCWAyMLiMe??t=;Z2qTO`|= zd!035HxUz3bz2HZU}%XJ+wS{_G{;i zfk^?Y|!ue$?972+wf5KgIx7H5-7dwx8e5g_wf|_MS90ioC-&SIeCCEyTOeI z?+nu5^_98lrT-Pqp_c3ZD_k9XCjIJvg@+!nY;C7dnt^DWLwfk{7@praly&K)zhlFS zb?NqLuYPa6Nq-+cF$ns{_dXPUuiTswYzCF=O}h6_;R(T0-!U4!BG}B|!{70R=n3!) z;FGXzaCs>vjZa+RURiSTo2`B29`<>%r6ji07nFvTu<=jf){W%*irUbIQ8rmEPPBiU zn~~(pw|xdp0%5E;3EL>+i*SKU@U(Xpa;}W8t``plx^Ip3J@+w9*DT_~9fKYvhn{0P ziex)lF(;qrDOq{4yim1wi%k(;dWYWtXDqfICq#+-g^_6dr+d zmgq13k4e^{{(POt29 zdgGhi?@CRolmgD%{lEGv?NYbvetB}YN-3{zyVL`PQrqvaQa@9v-ndmP_GP{DO-{LD zzjwuorLN!IF11_t%acn4OON{=ln)h3-SAZ__3yu-6u533BW^-BEofyY(ncr?dUMhr zT+t9IO15XWzIBdR%AQ2Y2eVuEQr{ceLrKG0L!fS`!<>ZDHEn&NhnNs8cAQMq3>(*8 zjtbYpb;g5{CK0Gl)MNAlm+?ZAU?mupg?vd2v@;g-TAVZs|fkE zWi}pb6|G^ha5^qj^isxCj-Z!DA0^`co7don(jHXNS~G$?==TCe_G818kECuwrXfjK zQ-9pIF@D1ZLv}_qbs?+L9bt3`Eb@*pnjd^Uy*G^hD!4O!OcY(QVHY#C5Xv|YA8RAz#U|QoK zZtO_XVDPW*5t!WBLR)gs#~foIao`Ipr(HZie45NKH#8=&zc7J_Zc3;N>bNN*Y=F!3 zUeJmZ!2touCWa6sHn{0gG^J6xJ}UK`2r4PI8M zK;)|gB`!cZ1Zd9Tt$Zd3@m`ArL$KmHNYAN9BXf_>Iu1m|lwcQ)=cZTJqsdIC$xvzY zV6?hdG6$UePWrCFXvs-fkW8iUh_N>~u)UldqdCwoy-V&U?xOHhGgM*67mQ<@riAO( zV01983`H+nH|SYMGCWPqRhE5fW<;NcJnZ3H(jqU8HeEf_#(bWMPm47)L{d4fm9se*l(yxD< z7rkrt`ydaQa}^;bwov2!KM-!WCKlah@+E& zo#XrC=vkHW6;tV7FOS|prC(njT^_6&-@GFFX;A*gb?MU&iEhu7{BklWJJonyKyd>51 zU57`9O5NmJI4I2b2|*>D_qb@3E&b~s7kxG;|5q^nha;kI24#BwjU%H!1yTBqwb9|_ z8-w(%OG&b^cwO|&Lu+s(7$G}2`4_+lG5DXz-dC6elmPRD%LK4PHpIYCNFlUPv>RV2DPda{!Is|zxW_1klAo_Zw&nPF_1E@A4@O~SGGm+|mw zu7s3E*;)e|hoje9^qCKoO)VxjjzkTh5-)c_F#?$?;jOL~Pwjt^xwZX)O zXhS5&Xm2`sG?6gZyfW;CFif0ZdQ23j&pACDNS}Iik%G=UI$Bk~P5x`;M>$ORc+=6* zVTI2|(vt>y2Giy-(PIXGSS%Q)pFBF6-`&dQ`X7pglv#688XrrV(PB?tb}Ss|-_my+ z8$G4^iSkCmR@1FimZg~WJ+W`cj*A+FZ%5J>9v8j1tKg50i&m~jZkNS0&=o6%Y_xE| zww^T8ZTf`cqa)h+A6my-p3rNKkCe#w+s9kabt-52hdV0s(@XBC%v}KCm`)mXwlgPv z$4L3k^t4w+!*GW5A72$ctDT>>kR+HKr1R20yee95(CSGaa|RwQKRuQ$_;s(23fY3+ z`|4=LtlKL=U|AhXXE!5;7^OdWbudJ{UWI%i0o_$NpJj>%Q+%vkM zeq`lT3tga5PNQ&1krX_iw-B$ZoW%!+=__?7QmMu-6m&#S4s#t^-$aoSR`IXl*H~;U z&!?LNEvW{od|^i&$Et!8#L7xGlqYLzIR>9^iJPn+W97%Y*kN9~p7F#Yh84?FKpCbA zYL1iyaCy4oHPP8~Km4mns$>Eynv9Bu(D={vJ+Fy=7gWc$x1!$%Wl~$V&Z)k*{HtKR z{<`QTLHXA~`kM2j;|A`Rlpv(F@j#H?c0MxTjdIxyVMF|$U(oZ|1<~_C!AmZP4nn8? z$OX}9<@d<}DZIY;4bdAH{DLaS%Dc-jSEp#$An`A) zz7SpPH}-aK87oVq;+uZEC14KH{w7{BboXj|`~C+SME-5hT( z-4-oLpS~5P!DmqULK=;x@7YSPKaqZIYqYA3_2F9)q90EWeJkR-n)2a_LmRVg!yl_B zxzE>@=wX&DcYZ>O&rUg`5}Z-#^U`SH;C1%{dkzpPHvhm|qggb6_=f6my6A1lru}bK z&Y1LRZ;KKHX1eWd(PPMw{kgYA8~AzoWzl+x(G8bH&kVZj+x~VGh@SK-Z-?;jN`L-# zfV3-p_B*2Y^Q-sr=&YD!LceX)%&6^{LF&=Gyhj&ZjuKX!i$6|P2h#g5k5(TuGw<;_ zsJK3E`)=h^7|SVbpGf~Mjg}7PX}1fL|DH4&Dl~ZI424$Dmm$-h${df!Z{8MtIS>k+ ze`R#W2v~uqzn246fqVG`2(KimT}`%pa(w@l(E|~foBnuvbkz|cEGs);I2Nm%>~X09 z-Y6=^V~xIU*MM;SWO~!J(N_jPP!1yTuEWl5R+g92x4%1DaY%;jbkX<@{=hMD1xtPe zS3q2&%YQtb?C+U-oN&T1C?7XqaFDjCJ?$}4E5l+p7O-&C5rnq(6F8pGOX?;v@A1^_B$xqaTFszZrRNz) zKUJ0X?P>MMCNJ;pVIz1?I=;6WZV4{CV^)-Y^S#m1u!8$N?fZB%(%O&cPWH2) zY&wOxA#FnJ8SGaI^~y5Ll&;z{IF51u;X`C`AeTJuVc*QibH!@o z(mNWhPFPjN7VW9M79~pX^?tXJ|I%;V}Rx%dhi zQ0uz=@JTm4Yr&eBdqj5q7=EVBZ4m4BHPYxn0M|mNg3uG~E<=TMx zA(DkFV-%#$WRa0-!_6y?Me6qIXRkJ39G%=o&&WzrCu;i`@e?Iq#AmBmi2*@$gH1@V zrqp+IFjY?1+z2H544|!$GV5(pS`)ram?-%vqtzlfYXwit&dm`BugtTK2fZW+tV);a*Ht-cOIEQFd-9e z1CLBOl2%^YT$m89*&8oRShmL10}$7iuQsRN+VVDCN%65=SDeecbS2ftgs#0inhQza zU1>2G?dBYc7g(?+Xg0(IZes#T(uni;qGqo{Co;fogZssO$CYl>b>7<2Rl3eyTM}1f zjka{1uET4|aLIMfS~6U6Ts12}qo?+yoW&(Wp278XF}N1}^h`!!N^T^= zeMcEuA99o-zUL^T%?q{0X5M&hpt|^=3sat zsMrD*SHX(FNr7$^z2AfA6V3=1XE|K#IXb|BXp9g2%2?T5x(==_eP35t-H&vwuPyyd z*P*qgU+T)v6vM^u@Iz8v_4+EoMX^41AbWP`nX1^Nu~F*oV58J+Y?QjiMm;W4Y2!br zeKki2tpJI z8+6Lx;_lFKG$*3cXWba}gVq_K6ergWD1p%dN{H^jBfvXX4}cJ$fTrg-t4m?CmcVYv zcc*BlwK2^jG<5Mka1%Sq=0F*H*0A-8{(>%Qg#GJGT?4FcF~Ksx7a^ zb@&rDG6Z`=as=HG%zwA8xC2@mS0d;awLME)f_H-bUni1}H_@GTY$3GvN>EfztzXZ) zh;NU|PNX8MXD<{ptuE5&m8aK*i&FZ3tFyBCROXa;I5}C7Y;xq(RdarxHGhM8!~99r z1Q`5nmk*nyk-pB#8?mbV94j9ZHWzKG-xJh+l!=y>)DI~DYjPSVmq2Ot(E;K@WW!=D z*F!fSUMgvUR*J!zl8A9gA0&;JzsxiQrLcu=>il21|ySB4KJx zQIilQ8$q*n=IC0=kOrk}~z!uCuJO2&a);DzV{mR$OkT}?y1 zKkSl_c$Z8$9vN%a+t|1z`!$*RfmXxyjPkK?VFM`lLvso+nCDZU(f zl%)EaZALl%W+a%h+qq{9$4{y6PQVB84(cIj&2XX~w z+61WtUioRBaX&qX~p4)E8%V60l(i> zHg*8-Q@*}U_2X;bv7U&@td~@AaCO7fL)?i$@@&Jn_QNqfG~8=H!_+S7LB_TioA5Co zjVfe#xn3kdqqjJl9atLCO|#iyc++flo=vmajWII$07?Ro$}^i?yo!Nj4wB}NA?7(SLuV190+{?p5i$9V zxHkC>q3t0RzR7wdE}I`q7n&G%bJ=cgn@waZ4`YC-xM^&+k=3P1bahow-<&p6V`a>1 zGc|@YLG@jlE*i&#zC`2rx~^!Wa`sBo{j{!V9G@+p%?+x^m-GNtx>YwRK)xWGb)8jWkK}$heCT#`6d{r%hXC__Y zP@c1L>m3UIT%Y2v-t3(ovKHLd9HwBMvDPr)%mkdjLw*5Hl;G-S3`VRms@MWfI`!6> zO(wt=uhA>BWE>CEG{g60=jx65>>LvTK2y?qRG&B)Rb%JmRXV0dYuR~ou9V3Tx2LTo zRwO9H#Z7hDZME3xz)kkSiw)|LI2zS9``VA7M^)Rj$Y?5dJg)GIZ+vmRgHO8poJy$5 zQ7sMvn$iwyt0i>seLFHoNM+NqJxKrX>1bsB_5ccW^1tBhx+GmQ$$7aFY|cKAAHqyt zb6q%!^&ScHa$(va?c~>*KRkC1Hk`S#un~qb#8wR^R7{z0YK)dmyA4VikKRsM$F1|O zF^Vx_df*9McLwZ7WpZx_M#;N8R=z%P%x`;uX|H)re?J*5Y|WCPI6F5KnH3xe$CZAj zD+K>_T|xD4=?aS9r7I}^BV9r9dv(nW#jo+hKmqmmD!rkY+lf>y=bNfFJF!LG9fl%x z7YxOEHZMo1W^|>ft)Ji)i@bhv25)zQD4Bk;pTz}cWtx7XGM)N~P|!Y|uAn&mWM}B~ zlLu@8$?GRVN>Hk;pXdP?*Va$;z~g96EITnpG{0lGX`HrkW7v|qQU4~?d89dWk~_jq z6=o+NtS)^N28EIfrH$dsF#zM+F#zN18C_iaDuOvvQbtF(%~ew4Nai16&doo>6q|nt z@O>K9*DOnO6!oq%M^W6^P`X3UVa8KB<3#t7i2?IJ5u#;YGxi~yX+7V2&ER~-ZE452 zE$w`k9t%y_uw~5{)1?_>x-|2xmR`8J#e1_R;VF*i_qIK4c%U;2w(l?IX=`~`o8Tp3 z;s^n(6)ubC8$sY{GlIa=W(0w!%?JWdn-K(_HX{f;Z6XN6RAXK7qKEOcEdrV?=V}|M z?+I$(28P+FbGyAT>S=a6J^Y`V?XCZb-F^VGopH$+HMceLVL$6;ZcZ9Eg6HO3WRhg1 zXQsE34?EyOhMDPYz=m3fGQqdaNg|S?8A<7~4Lq?0I^H$p@7{w#K^;+^V8A_sHnVNi z?g5;FNS~DzrReoi$ZUy<__LOc{aV|8N9k?C)&pwGs?8;Zo%=&|v&YVhK|2#t0{k*M*1De$X6BgWQ-7S4i;gqEYXlygbz8KQh0ii7CT?MT z0hz2)44-p;_H*ZC6$$jbsM4Z=lbM3NCIN$@U@U8G#u>|Av^$TEl_U#ipR<_tj>Nhx zZ#C;DY}p&m`ZWrq3br$~)^c@Lb~96IcC)Uso9*iC=BgLYh`&q-0gBAOx;P$@C!)#U zi<+&)j&011hsCCwvH}F`5mZG7^pZJTVGrhTUF03E{odi)@D5iZU0%@~*ibTutM{q- zs(ETYHL5l}o2t#HR+dgK{~dLkQcm5blvB6))TkSuTFy>Ho1kjZ&WBDjJO6OrdMYyt zJ&+t#nSvbsTSr9p>4D^EX6JXv(LG>UhaA;|4msLo=XV(DEG2KMpBRJswXe%A)w0b) zax6kOHc62slE_$UZaj#kPW)NML#u5)Q2qZ~#sl5NU=TY<2j=$<&H1y=X2e^)8Ns!~j4%MsY(_Xx=KN6;&PZfNxR$dw(oy&P|JsZI zC7cDoFTGUW^4=n z%-9t2WH-y<-xdoKkg)6T)jfgCY^eFJP+_XO(kU_$PpfrGUs3CytR`2he2l)PKiFf} zz=hfaucZs(U^2F=&Whv6s)(^yV7od>TI;PR)1pb(CNpz1i4r)oGAaD=!2dG>M{o_8^*m$bNV3R5 z@)8e8^yJFMMTNz!srRt5y-0wxH6C;m>CWi3T&Kcj*)}SzG){oyhEuY>N~Uhby8CT( zCy%7xTVJUjr^lP>PqgiGXmFS7uu-@YdNXVMeyftg+)s8hn$2YAL~g2&GLfs4%r=|z z+K&%BpJWJ_c|J=@9>6BmKW{#z;XH~+9B`Ema^4R!v?Wp&oi$)ED=(n3c|Am4wnf+Z zLN18R@Gt^}@ZoZrV3^Aru*X?VyP(P9fYxYQI(vtw;yZAkhHTZb@`6qEjmZZlL;%Sm zYJ|hzLShT1@)l-B7-!KF=Ij8t<^-{;X_&v3{{mL0(7?)A@N2E^)yv)VZCEk;gaTUR zi9hH8OMf$?#gPTH_z&Qpesz6i&M~^%RDWuQ30EEn6V4py5@JKtps)%EN~?Wxl^N5r z#gp=Ob1j*xX;yOWwP5XBwp4sfc#RKEcA#<+Xe6dzh$9tjI95$xuWxjU*n|(}lNm=b z7Ltl;!i09b+2X0*E6h^xBu4=aNCE?a&U$_JqO9I&)y+^FXKeY55QJiXEKqo+^Hv$) zPDBpO1VPZ*Ajl3_%!NtTmXj}hm`hZf1QR+bsxX%ps>SS~kun(PfV2VIoVg(#XwG~> zq-<=+bDOj78Jl5~yO%|rxZe532xYl(JXRUK>vEEU26n0|un*Un*1Qt!f2W~PM zFtxms+1FK!Qec3tuDJFgv7N?;E{Nyb-2ivavqWqMNsJaYwv~}-Kx=jB_G)t&d&qTy zxe$T4nKYcz%y}Gvr&TwT6~WD?Iv|z6G#s%&%Q2_YZrO++0L23(98|_9O)-G0-EBx( zYI5ysX@kTlVzTqdXN|{yQ+*T9H1@vDto!qXQsI@O&#`ytUk-9rDWK+NCuVbARZ*8)Fu(Bk&9b!IsbEVsPOp#7hKdkVGMCz zpM*m96Gs9QABKsWlJc#fw&%Y=8=44J>u5vsFAc0s8?6rF__B}(;;={_!a+DQL%#Jg zXK0|nKrFgK8~1Qkwf}9}*qzaaP_956dOibj=&^ig(`bWkJPNwlJriB<-DD;HUlrx^ zm@q#IfQ3-njx|BLgHSxKc1Qr~b^<`CWnx=)WnsaFNcT&B%y~zKd-&sEk7jsg6d+u; zfv5l3t1>_Pq(S0JuBV=t8 z8xzfMKLVq+|2eS@I${%6br2h8uoZ}n98nNk%Tt>WQX?y~_dBDbK}T$JVjN)Vr6V>m za`pE>#Aa!@$@DB@OSU?4nU4$b8|HaIHNH#|L)MJk=q>al=M!Tw;P+Alu$0XF!w5T{ zl5(QFSyvVZF4dJlLNgP!mV~b>sNHOauS`LlxtS>_mb}NeAV+0(b*0qJ4lsox9| zJeuGqNX&wtV0#w)1Q)U3r`fgl<#fiOVi}!LyhvxQzi242hip5PxC62?0T!pu0Rk*M zI300d-k=7#P+|d^fVxbp#fH}K(RR3r>q2_DsVuI`+^FvR^;}$6 zSIxDq;<|bdL%%RekH4#DK`WVo?HWnr7AdL$ooiiPocPECabhzc+MJl|` zDZmkkXHl`$+FIwcQtX`flF4b-X${ky}eDS#nefI zJ#ej(tc6;)?4wrcG+nhmMgu_Hfq~cIibuo3q6VXGOJt9VvhoZ2kRJk%@5u{;IU2o>FrDPbWnyN7K`h^jAOZS@h>G zqiDi*wxh8mAR1ZYUR)Hqf)Bbqmns{#qp@C$B1SOQi&cU*DA_8kLa4BrJy?vza&2W; z>vdUMMA4hhSS+ny6F1?|f~x<#SS+HzLBYR7EY?n8rO#RE>~hq4AB&}TsO^|)VyHBS zgyo012U^_h3~LJ>0rb-$&yXQV4LpZ?Ab@+=%NI?h@^H={NTz-R37}ENk!1hX^X{0fwJWI2RZql;;b9}gQ1 zvQf%!$w6ZMNLm8Xv9@go!{-kDUhKE&upoaIzsa42ZK4-Mr(^Mak#tts{JB_o=5LRZ zV!8Q>-2BzAg55@=$a2ouYAttRFQm0fWwm1*Bimn>a6Q)QR)we4thn-LdI$w4JY zTKi*TGj6Z;hP(=|m6(T{0W;8Yff2FSyK7gY`<~SEGj3^=NUzo|)<}}u!(4>zg!!}u zntpZ2)}4^JLwYZ-RHEQ=5jn_|Y0@ zO;595Z{nA+RQF4&x70p>eS38sYbJcK-+;}{g@z;BDx058qd6{JnmwhHs|%s*rcM&d zZt5h&YU*Sq`JF!&)wEC_0GTzpjTP`e`R$~S9E{<*h9Y9#_DFWQax2YcbiK+goaH3xf0|JaFjXJCSQ?!U)+1H zf78&B61ir}T$^IcBRIPP&a@V&0m0qjVr;-?(eK%8!mr(6C^oa`yi@z)MTER=h(~zQ z*|j+1L?=~S{H+y|=u|S6>7vuN%1LyFr`Dfh-NTM!dx9SmeeIy=G56bv)5ZZer`Q&aXp8pG|QsZIA$vqn0Ja z2mKOt9R=<&0%|J@zC+Y@cpYlD+A)Fgy|< zgihkOJ!$U$E26r^2^ zxi(teg4k4aw$=C$=SR~PvxL(eI~uG|)&fxrF(^!!Zs2YV0Z$%3oJUA2P_}V_VJJHI zL=Iy#LIzMWYR!jaW{af?<2WzO8re7`6_U2N8zl!84Es~MWYFkTrB%f&$3-If>bWw< z@#Im|cvLB&oU2`2xm8%8Y1=cDGP{NFVEME1rfnzyS*;MwYZ#;>tKpQfJ#u3Cf{mrq z>zY{YeJ!GytxRbXY>t)rdX+ZMnnOS+ta6M-Y~9(ARYgY-2O#ELKb?p0O?inkQnN9? z=e@`s9ekZj9AlkBfH8}Iy_KNeEGp~`Jx=uw3AIWAii&xi# z+DxhnC*1I;W;EB)z>L!um+R*wbKD@F=LTVtZsVLn@Wwa;-ZtY() zoGzdeD(ORVT`ge_9NEt3brY(9I-R8J(o^MbDDb^Vy2l&onjz+B2svY^j1&269R;D2 zfB{lu6Y_eKEvx2lOwj8Mf<8O95i~J@qPb$UeF)-g zd$hf=+HU70rDT>u75vU=du3hFM+-MM=Vot&W74Wk?BU=4f)?^^*c2rBHP#uZZj8MT zda}a#lUam<3R&|93%wp*vOQ97C3fBvaeIFSzgz?M^ICpd*X`H)_+`DdUmxL@_0WE~ z#YXD`7MkOUW*n$HyP+zaCZesqmJ)-Tec|TybgMBb9=O~2Sfvt@-p-=PT+pI~qUSu0 zzfpK9N|SnZfzFGw_V_ERB#EwT{z2Wil~l*GTzrGT+*5yb?c6S0AkdcckX;ai)DuG! z)F5ObS?x^b7x84bc!;c&C)miO=ThMnxPt?%4S$lU+Sj%1+zirT-B z+*Oo;?Kf{`?ZIgd-oxMYAc?egN;fzqC+qQBVD?$r~sq(BD3MXZB zIB(Ry>Rw8)^jPD)tq*N1zricP|0*4LNZgomo5*Z5)(UR8~i!& zc#pPzb$Ya`@@N|i=Bn5p&B2tvBIB5a_9U44&G6%RXrwvBuI=_*kj-tQb;Fh_8H1K8 zwWvsY*(B>%+jXN~9j+TO)I>0r5v#W`L3jM%|H&iq5U^8=+9$rAXRJ)Dr<|X9X)&&` zj(J9~$(`dG?sx;O%Ajza$le(9D?or_o1IRX?eF#wkpHI(0@|t2Tx3eB88Sei@T(00 zZ{#r9Osv}5ZxGNrj20R?AwU4BLk2%7ZvI2`RprOgOfct4q_@$}gjgIMQD~%UwiV<( z26MwV2mWldUTWJ6IW*~bLtQORkzTctG+WgXVmtFI|7e0m9wt09A{Jq4*!YZ|FMV(#fbSLd>hB99J5iJ6e)1~V$FM13IdM4bLjfu8obHwwXU z9nHVd8_&R8k2~HN8oO_@Db&6Lp)hzcC4R#FHtzRGKiLmIWr&XNm@zxc?O5H0vD(I9 zolV-NxEuJDYbwbEzuHLzCi&IgrF=WT>aDDU5;t3f(SC!7_Bdwt?-T^KHN$r9cWO?y zSZt$GP~p&R+)}P>9!P$C?JZghUx@8?HoAjm+I$H4STbzRTEzjuAOWmojCdRxk~Js`*3S^?34-Wds?F`;O6nd7ZadpzIt%m_QoalwNS z)4f1Q5vI_$h=Fz*Bji1m+|>OgkhYyt56P=3O9h3ez^r+v3N?$n%Wn_T!FzfJs>UJM z>O9&zzwHr{US>{M{p&@9TKEOENAS=c zk#kaY286+d9+wLmAzJ2V<>OP9T<0usZnrtoKC4|G0?V-Nwf710>I*DX>qhGH)Dc*< zsV%cM=w~U=BZNVP0PVMP_EJG zna`lc(!JrNwsHt3{~u}}7U~BEWqb1k^8-vcx&9J>iTN=IUf@#4^)vXPjZtQOyhJ^< zldLGF)3S6nRc%xK34}fKgHOF@)}4eRjA(%UvKWF>9H-HHZHUZsL{8odin;xePS`q5)0HFA7!6RST1w@NhRTf57{i(B!Sqrz zNBZoa^(<^LTuM8{bt(fL&e^$GVP}Y0qZd(U@~tzugu|`^Hi}ke!bUwerfb+ZC*Mt~ zrlh)LWa&@;>F!(8QCB^n8(zin!6+x$=%Fez6l|6X!6?MSNsZ_ZMuB>};>jMtX^!e^ zrjW$bBem6+42_b|8kB^d2W!s|CsYVVwTA27+sP-$>gB}0mm?@aKd@glms%aEM^wT@ zA(N*whyf?YymRA*P5`ipPJmRGP$-H5fURi~yTf6oTFDZOhVLcM4L7JpNKDCsQNOo7`r|lgc|?J{cItZfY0v zRcl^WpdtG_H0*W;C5g+ex|LIsr+9)E9uSUm57DIh&|yYfyPZzj0B6vY0XvaNQ_A!@ zC$w`LYtC1>uK!unZ24hko@YPJeo?xP_ex4=dm-8)ouw6-K5d2-dY$d@6NQ_UlR0a& zt>ruezg{_31dfqH4%ow(bxSV{@r+?pXTAhOJ}ARspz4KP`2xa~9F~*AKHKA@%)L3d z3z>U8xS4yw!uo47EO0A7RVTbD1fUJzI~AUD3BFlKZ4A~T`rxv>aM4A^)7n8H zF2E?C1}Ab{j8Vq~R9Y@t$@nX?P)Xj2MxChxQj_iBd-8`)cd&;a${*(Q33r+vwSbW;6f80ISeo8nh{8fRuQLg?rC z7Hc_PtH`>@DIt!rnwvxt5~9RW19*Dqoh4 zk8>BxizS1P{diL57>Sf(^sZ+JzzDjH`+7zT(yxB9)*LmSKypDpN~VY+Fz zyVrT*F*yud&CB74plzE9=F%IcOmi%sKv5$J?<-&9_aX7@fcuab3XI1#Qv6@u-UL3% z>iQd>=b6m&JV_?WWKT!}lMo;YTi8+A9u@`EDvJAxh$0{Y?sb`{RB=a9FYZ|D)`G^0 z9aL&ju|;ctVrwf_tJK;StqWFE+~4o_+~>|b6N0tx`}_ZgPk6R-w{y=u_ndRjJy#B9 zsVPO>SY}o%>JsV_Ruv*#Z*l^KL01#e8Pwq22jrmFC&W27<|=gPI@S`F_M&n4ETRGC zFR~X9rU-o{A)#;E(-8V_(3Nhz?|~9!I_VTAqOec`3GSdnAQ1nFMGSCl^bRsQ> z?At(346pibf>?}ZhZ`-EV`%XgnnSKI$Z|Q&$*dtfD-a6T2~mq(gQ{IfEaVrNiupdI zr0~5=5q!U^F1`+{D|U*@t%+ou>k|mTKx`zY6&=TWt}$?Zg0aQ1-8iEl94D#_mnQ%w zhb0Dbi}WzkQ$gUlj&^pzSWan%h5)*^HS|~#Yr-!KTpDN&RHcWwRbXtoJpmJy`9;6e zO~5D?=gq8mq(`q*pEFH%p9eXl2s9W*+N2?j5>X67M`LYyD>$t5woiDIiWK@cU`M%} zU)uSL;AT_i#(aAF#%DClR`Y3t$taY0_7?q$S(py6oGrk3%q{#3#I1SR15aU2-Y$a0 zGWZtaokKWF-;JN!DZsI8QVH+7ToOlWvdz90h*F6x%}i@8;ID zE4Xs5+TB6BXbb3_U*Z4!-&FSd)isQa?kj65higjLGP!GQO%Iq)LC+vYY@SrTo0Ej= zgIvmY$qftCo}_~7X%1TAK!!n?qy9Y5=_$58*g#2zT{sUp73`+QD=fr&goo)Bitf43 zcJXi$TMi~ovLBo52V7%XQ6ukpur|3!Q40L0D8zpn$$!Lm3~=N>flPoCpdt2j<2uIW zQR+{!bS>w!1}Vf_9x9^DXPDc;_2Is%g{KT(+79Cac#en`Vy~44@LMBB2!|4rH(66) z5n_*0J2Q?um`^hE(RcXm6cZu#1g(vd*Tbo(+Jy9BC5-z{GO0tiq;NwV1U_9buE0kU z=0pmB0sAf1%`b*HK`&pC7)57*m8{bXZwNi+LVZGGGd9bA%))kX0{+_oXf zsiXhp_V}+YQyPyHMl_Yth7J0GWcIzzN`o)0YKZwg`rl_FaDQJHv=6UTv`7!lM}5Xp7E*6Cmz z4)Barxr$CE8&FH2=%kWeG#!|WPvJ)q#rm(4*tiqBm1jGM8foi!<;lqLXvYZe+9ZwSauHPFV1;vORn^+ zZK|X&8Yc7*eZk3{!{D6DIjltHuo6sRsqh?D#W_qIE~^BEVsS%mFg0O~2NE()$#J1y z;sN=9%y{&;6JqGVYXD{@F^L)j+rTEiFx-Qw17#LrePHckX2Mjs#WG{R$(h%(n-FM7 z48(948N(KLn%qR|0hUo3uoW`6lkFJYD{F8+aGw9aXmN*G;s4Iq&f0>rV)sozKD54O z)W+~My&JWWtl#kEoq1z3^AFGog&Em%Fnrfy0o}9$wNaWdvs)c8XYSdZiYWB28$b&X zrX8aKs3D_afPjfugu5=gil8t-e!}3&Migz+Lnp9xhiApzhhfW|AG5A?875bxxiAM% zW_znx0^uVf)FWRs{Q!c8Q$PUT8(w}cU2T9SvSJ!1#T*HHd?{El7FtU2C;OCOQ3?Xf zCGI2l1jFLqL=MdJ!J=_Fr*6%}Na8K#wHY5%Fl`*K0rjAsxMAs70Q`*rI9!|mgQOV* zB6?s`8FxLx^2MYY9Ix_c;%)v6tlHK!m12G^OX4OUn_x9VSVWfe!d*|1C1IloItA$i zygC!7YxfvR9YE|a0493{@m(x2n%9tPaNJS7U_~@)(PN}p&5&~UJcaQX_KilPWWx`S zV-6%z;5}@j*tHVfmTgMKm7I|awo(5@SkF?K-LC#`@d&v9bq-iA&1QUh1Rt>3hPP?l zVy6vnpTI5lzVh}N+(Jg+?Qd|44Y0hWON8`B*w#U>3H?$l8(LjlnRy#x)DSYn?#aqU!>a9=1?*VAK-L)GU|B%(5YHmk~w5#WD^G;jPD8qE+-!)w3WiLsXLJ zL7*;j-SSj5rrDf1KsGkvEhTo^YGKooNgjNj{+xP86XsZ2sIgW-ttGFqm?9UUF-c%z zgqaYli5f*P5^P1)1J?$9vY5~ZMM9{u!RUcyjqILh3FlN6_Dfcl+ocl+&_Y6G4wA*R zq8c6zp3%UlfYIKAx2!o5!SO{h(%p-Tf(QL2!bwwj!vfm{ni z7ddPo)MZZ3;zx@HmgojT)yXz6SZ2ghH5!P2Ctpym z$e%LriHj))J?A}6WWmVAb{QGDjMM|&G&mPNrcZ*;%=HTF{_EM1&PH-VY^bJ91&(=)|765n;ct~Jvbcx*S+}Ei%qco zmv!ZM@CUX}Nq3}%CA!#=dxCzoRQwntBvM#{8!fTp5j$|l)7U{5&164m?0l@V9*C?N zaFHZ1BWEpvGZwTQ&M!UXBB3kroD($x&p0)f6Ti*V5}GgnoPsHAAnSl*=k&+}k@s(Hy8)&kMCGk8KsOOE?41n``*j8AG;Blv|L!3rQ>!=&e zlvG&QzZ?kIp%B@J))GjTG~_0=)d-(8Y%uh?g@u_#O#2~V^#AU1hJqD_wgdAKO76Bg za1PBwe=Xgxf$C5>cz}e_twuB_U+I?#yu`9mMZBD{Z4vjoo(rgJp`?1Ftk*KvNL_*O2s#hsuwv;1Is1x29(g6b6NkSUfEe-5r83Io@W`M~=$ zu4V5AaZT9ZLF2j$EOGrkfKxhW;yMIvaJ{=C&}bXVrkyNAMRF0h`xX#!v_J~Y2;z_j zLIpHpKUsl}LeIq$fs$vsE))rV$bW)mAyUh(W;KHe%^hT@Yo66a$6lrhX=|EyVVXgI za8X+SgWa-%b~Q}wv|3e6E6V3R?O|M+E`;D-8(JEIOZ$CIsO(gNag-JYY7=0wIR!~! zN~=g#BntyEo}-v@J4`YajkUaGiWD?0+=_IG(P+a!vqZefu-^Y^t>4D8l-P{9te?l;}x5NTP)VH#8gL5K8S_DF4jO%QcSzW zA{G@D3Ah*IC6EDAt^<{lmTsJGu`2hDKJh&#*qpKC7IDK)tvR_gPJ-&(H*TMzhZV#y+zX(;`hc`vW0F zfCXg0POGHdIp{R3M6suW_F{x1iKKvu7@D%64I`E^i?|f1^`AtGQnf*cKyRTVy(oI+ zN$mfoA5S^ELl^`$ZbvBU;zB27TcZw_dI!f*X)M=3E_^hh`@lEC8%ylBBd2D&$dp z03^VOPlE&A)`3XM=VMj@m)f^3Sv^f?ltCbBbYUIY+Cb~)aRICXR~L0{k~nBmyg{n8 z&jek%#Kr?_c;Ilz;5;A+Q5T`K(Bm)@OD^PbNSgz|ut=C)aHCZSD}xYT!tOwTd0qC0 z&=!J`6gm_Kp?5J2=Od7ym8>Z$fB}%a3>z#38-d?pmwwZJhh6$j`yJ{{;hJP1>vioj zQd20lnenDYBQv@&&lJq#9x`&@kUK5y;8{zyU^QTGFok6r45(b)cn6oW(0*)sB=`>}!}udvk$Ax+W{Eol8s7PE|N-5B@9fmjV zl4FYIaqbgk1XjiaiVBDU5IqzT3SsgP=;ILJ5pMtvK>(v4jji4|GghtscxJ3Dh0#S< znLv)QA*rK)7%vRFD!~yLCIJQxh@PefkYlAx2IvmTBy$OuiD#WxI1^|cu<&B_y-555 zfrFGTA<1=GY6oC2X7`mK2QqH~5K$iJ3y^X!6rE&ZJ{V)yJrc=s^6~;IgE;F6|HB+i zLx3zzL#AXNF*L;A^u<${<*-ycJ#uQHzlBd+-z8aR$r<(6W-D>AkvzcJ81zGHOCs$+ zZ-RHce0-%}mzheGZ#Q#Jsi>r$dbq4o?4CXQX zB?4OP!#kXa(nPgAvBnbh9daIa%ay1thdQmL(7JgDx;HQJbDKsmN0lAs^efJSQu6KqG_Wp1k(Yoqn*)x(@BE3UR5<_z@Ucue79tLk&OGsgSf$7nI! zj?^iKJ8LaR^*qAqX(8C)p?UqR;cCti&J@pdqdK6%tya$+;f%Gvw3K(G^Nck}y>O&+ zR(%w5w{8#Uk=b)IPIIKBF!7b8jy=kGqV&xVc*c;IjNp)X;J`0dZAUxJ<+uHtUZ4rQ zhLyVlmmQC)Sw}mqsnz&EhtGewww>a@oQS+M$nj-=K01j)2z?P;$oOi}}IR0fH zZiqBS{nkdYT3`i`bFqg_<8WMCbOF>%Y}7wAS#;o%rb4WYd7x!T;1R!5C+n?~iAe=( z<&f2(TKV7N=VGc>jmILK&X*R2cIZWN{uxFGMP({Ui9yK%d1v7r3|8O+{Dv#Kn)oP4 z7PLldP%5Q*jKPsM!ZH(-Z2Z_gbS1%*lui4HacokA?b85(HkCCLlcta*^sNV^#*tDmRgt5d*dK?@F?AwFAd zPjka4sK@_jZ)@|&cTBq|VTg51H;3`z+`GpGm-cw|(X{*uuID*l%f zojp+T>N(D|nX(vRVKE|HS7OQ4blHRowkKnUBA?MxLzpwcTau2p>C19~h3zd&?)Ri` zN8&Lx?e=BS*2>-Jf{dD z-ii^gP9czdiG>jU=r0QRqhz2f35>?Icq?2)QuBEYVg zptHPd0#2(cQ{#NQnI)X)+rvt3x!B*!lyE&#-Rs+@Smi1)QNxU!2$-LQU~U7 zdlJB>9s-WK+*V5tv4`?{?;$|NWcB(Xb|<8fs}HsJuA7qdFi~)bwAd9gd-xbIg~+s1 zeQ>CKa3K#Y&xv-6g>UHt=GeWgp}|M+C478~l97w5n|K*1hNU_ME zCGy#a=~XA$WtLT>9y!^*wxp3LxXo^qH9o&q&6sP~LL!_$*FGH}Z_c%s;BwF@_Fr)s zKF^-jYXwPSc@#|Bcd&`vW8ftGzZJWu;`0&%)Y^IWs;aLsvG{qMvVc-dS3LM5QKII} zxA(Shu+`7!qrV2K+6DGFXVWjq5Y#aX?8BTFel7QpFR+K9xDOWCbyh+ZoNDihrvnz+ zBh(L1wO`ivM^p z6tp9muUZy3huGUKm0I8|v_G=aA1-jtx2%iP3l=(aE%3)bp5_d+KeklfBIiW=6HCoo zDq;R6iQs=p1sY2dPlE_Qm3{s^D^We^sU!r1dB+6M(t?ej2c zCL>8mX%Rhr0CE+v3PE?NTD{nr$O&-!Vy6;7q>BO1NR@=HQ{n6P@Mb!T61LdCQ4BM^j>;|&4Dp_Pt%YW-) zQ0u+-j5?d@gZd^L1>>W}P27QkO}t*Z2km)b-4 zU@fz^S*_`Jm)Z5!=rHEsdQO=o2XB1W9p2QqE9{HyuPycT753y*xaj|_dxL_Y3uEtu58zv0hKzNS2 zkSVE6kci+)8yTRkz1ALJtyJr;wO_IxSJy1JM=bc?YFs!U)2vMUOkWSa&VC53dGk7Z ze9v%#@O{wHW3IQWthVrn-Q9P5Nyaw}eslNUM%zJx;vlF&v z-|1S_>Fsl)_n6#k)1C99iKw+uoqwLQC%M47^PE>K>*nugLjrjsgcLXxHi~N{2;0K!eIlI-=lM!|3Ql~QYn_Y4!AmhMl9~`1cYVycEd!a`t zg(blwFYQp_IM;%um*TPoBa*5-SB@kDzQC|Grg9B|F^d>w>fNPI!9ndWOEK2aPG(HBje-4PCMY#7P~g z3_7GJR)H}E%0&cbl0f^4(3Vn_DnPc-y1E)v+QSBwcCM9*w#hQ3TSMxtE*Yot7?Vmn z6=I-7+f-Nphg7AXDunVK7NeA~cj-vEI_p6!6s(;jR$DIylDLq|gzgG>tSqAgi# z%v3yOjWJM~gS=^tIh?rH|7d^_)fp`#3UNva9B~9QG|fn_e`9F`c)BZqlz5|+R3BgF z)TMygOgTg@YPk$OLaOXw&#VTrjlo-*u~uG$OjGOSgR#r!Mz>+m=q&I*MtK6Fk&YVlOq6+F^;YM%rk`2W&uO z;2F$VVgm}*nROK#5GrVFK%gHa5c;Q?5cfJ`!=ZtRWx{`6wlXAj7aH*7mdAo$LYzzR!_ogQTS^EW^y&UzKz!qSR#;K#;l2zJ0T(Lv6yjsYzhef7U)M8s*6sI)~c^oI-a{6>xf11wEE%I(K@Wi7?2Cp zgqxj~vgHor{ov#tj;w0={KK1Jp<1qfe6uq+b)B=9^(0o|21b@U;9GV}WCdecfz2of zSjY8FMlQzt`?#o&>(9943HXN`bQf0l1|xk_bT5n5OX9j7P`o}K^P`Q?_#-fg+Qh4_ zJ{ASBmInpxcA^)Oq_BHP~2fFOEg(YI;;dy0f`$1X*9n#@bsU z`vKbD9%V;MgQMG`Y_Pu^Rkac~+rG_q6F*IPYR9$FHmvgWS{`ky!fuK)mcWog-_2|T zO-0y0@X|xD0iARTGz@Xsq*WhWz*pv+8R9vBVA4&FyHLMSviIkl~&**v{d4t z1lUC#TBFCqH&WF5Oy`-lp|^UC8ETL`1<^ryepeAj)$4?Xrow(~-=c+*p%WR{e?Z$H$&uoYCOG)v0Txy=l%3kI=wi5)PANJx z8H0@pZacS9sRnmUykYlXbirBRY2K!Pt|gu3_}Q9St=R6;f8hG=uYsm#RAlJ7DbL7+gh@xHsQ8|V@eL_nCn zw=bT6j=bXh$cUlChKw9Nd=J40qU;!ytb=6ABsg-yZYm{KI&eVK6vX!_MYX_y?!e<3 z5UK?wr4jwzSQec?2MPEMpne$&;+Sf&)sI#=70FAmF3h%Y`5ZhOq{t-&dPbd~5w~uY z({m7@Fl^4isbY*+Q4V*`7|rdMpvJ5-XI*v-mfJ70lI6<2%W1YQRsHUA2G?O9(md?O zEQPyReAezMIkm_T1`UY9C-KH#3GXq(CRTy~_zoKmIYclBTcfLDGTi8IW+iw=Rg1k$ zgSBFhpp03%r3EzAp+7f6jO3~4Xj2h`h1`Vo0yYNV=I;Pv6x>1;mG56 zx}p*D&@0^|=&Spt6g`0C(2vzucjG{w0EW=Ib3m$~&=$KB812WKwJ|;H&*P}yM~DlA zektfXGwP?Zf4Z9=$j7C!;N!ro@Nr-^%g2xWFBm!2`Z5GKfvOy~5oee+K0-brF$#O1 z3PJbpE2F&zLJgNti*QQ7Hd!sXjE3Ve1-b~NqGYkY+l0(Z)SmY^ebfc_IMq@33aidv zMC-Kxao2rLzY;bO!;`&*gOXhJ{ykX3cd##VSL#A{3w3ecpx}V05h6Gs5QR{gP#*+` z5S0bgl^0MKu0mZny(iP?tr#Ik0ef&fF%3;cx8=#u+AMH-*lpHu*o%U#uz<$_rDoV| z(x0$V4dIShrRMDExO>IPZ0*e}zKQ+IfkmAD1X z@5;l~^!uD1W1p0v66YzmVgk=l;W7(k*hDH^Zs`+TfC+e7l?n|D_;N*@L&hV{)#gs8 zmwNv`#~nxcEHj8nsFcsj1N3$s#6Z6cVu}OohJ3YsRkUIsk;p79=Mn9Y*YLCf&`De$ zhoiU*HEcy=m2lV(>QA`G1y1BTz^zkP-|zIQ6o*=&u2POVY@@_39re`x&Ja~~d$e+# zMnYknrwwBo%XY;EAf9w$Z)8_MjI(^qgY-iOs~Cw%ktkME9&kpSjG<11uL{w^Dx@a& z>D07-EQ17=(SfiMBoWqen?vbM z72X-0P>L-CQfbN(;08@mb@ZLlMzz<^oV{x|#55ZKyAY3C>B%HKPSopnMvsRO{^ieP zKIy&M8JtUl|Mf&7Gz6_8D2n$&JcDx12iD& zf%;;#)1x66cZmEbWE(tQ6^yH3W;|j|pzRPq_)#_RPD;N$^)i_D@Rez zOc!W3p-Jv6AvaK2`MiM4Ajg<_ZqJ}Hpc@Xk4KlSM0R&@AeKIaJrr57>#P1Zat>6mF zo%m(a#8p}BtpfIB68ni-{Gd~5RK}|wbb43|)O`;+4Jj>jV*nsK_``*>JAjy$QPM4w z+f`8Q19%V@{)a5vRZu-WBd2m1O8@~Z!nthHDxa~nw%OYSU5YS9ik$kYk3n$N@jbM6$G_)Ak_3E>SoUtiL5)q73 zBRSv>V;~T2k_>2%T$;5wa5%+*mSms=ED7lVt*iqEQjiYro|BlaUZ*>Z=~}x>*H#F1 zjW(Kq_5G^TX-`e$hz9@j&^#+XDBB}@Fi+~BQxFA7YkM9VYQ+Z<22*@c{AdJ0CFq!@ z$~E9UH5WDs6&20Ic+)kS$r`ok8Wr`2*eSsQK6WfRBBrL_ z8?8&}(ZyLppLwY14$fXWNpws!F?Fd~}Sx75JmBlzSsw}CXiz>^Be7kh4*3`G7 zXOVA;F9XR(#PFTAF#2s-8rUX~I6P8>rP3r0WP%`R!BdCwM~nTQjiFUM(OU-5srbIe zJaC(e_?g7wmTV?lkjWB4zi!hj>?}--dE7OHh!vprEZkPWEhgOC8MqkWgf5qdnAUPK zEvOJY1qR(Bg=0p@^Ya1Cap-T(X1W=f;%Eg(9zZibg>ak{I|PvofUI1ZL25o`X}Cjr z>cRV?11IH=vNsa9o3eRtGI_sXQ$+P)sWPOqK|X1wQ=W`#p+Lpg!eTY@foQK38Kb?? zUeg$#2ptH-R}o*#nlF=fip;bOGLz`eS49ol+{TK+_(H;kn!#2GsVva63?dbjh{&v| zC+I!X$fh{PhV)~YRKf%lSV&+82VRqL^tSJzic<8dP*<#CSIlQu+@ISO1+3|O))el` z1}U3heZnh9kUbe-0SL=}+hD$JM2KNE;%9;*ZK7iKomLa7QU&^w@Fs|EolUwENx^w= zLPW->RR}PVhPvPhzR!DOvyedq=O>P;5SG}Fy7ehN+My}sPfP$?oI^ZZu{F*NFw#R{ zLDCYR=>b+1aq!_0B#5r&1`G&c**dR6ol#T^?99dx$72;_656i8QvAFfaHt-3b!Fi4 zk*{vtW&zZ4(q_uVz$qkmBNtawPO9=jLgEd)6bFGZ(`@G-GL` ztzlZxbXAu|EE+ut*7yaDu;s0ZHmKQYXJ+p*EzrU$Un(oF$;v$=t;t9d(|j8QUHCRs zs7KaBN7m)R!(Q*((Bia+16mDLPpyeosU2&g<$K3);Dm2A!n##TqX#B4N}b|TS%wJ? ze=ue^m=B?J%Ugs2oL00)GDg0gyfo=8MOV9O&99uAW&kt%PAR;q#Q75%DSW=6)t5p- zIu<2hrc*Djb4C?FoSjxQ4y`RyiN~Dd_48QsT&q?*=Io*3K`Z1?zrbOmt9U-S; zmqQfO2o=U)Ucq7_)bAF1xSmAXY?@y%k!bTv*_5K;$+C=s46jYAv8)hvD0;%_QG_~C z?ncP0X+?w7Ess0BCLlotTMAmcG?~9t1bHAnD6C})(x9*b-4=$%k5HdK?u;lvkdA3Z zgOd(A=8nf5cyc}AG>#d7UWdV`0-}S9{lIl=n&O-WWf~|NK!;6iKbTrHKw2O=o(pXd zn<_>jn+Kn8TCI_4%M(stI6;1kCy)DcVScJq?dzRU0|EmAD3rkoMSRjzA|_I}y8j?} zw;V#o<7&lvXT~wRkX5-RE77oWv@s`7%U5%cQV|~Fk&Y{$VWz%*n1pm zSvlKKftKM9Eps^zVE^IU>ZHqYP@cq1AO#9WTnd8HYe>W4fPMJ=KbXU+cv;m<8 z)bb~t>O(8nOsu(dDY}33GE!LSnu*_9mtbP^E?tW7c9{R@5DwFZ=}1c75XM{|A^GDJ zw!Qm`#>5ea9ODjb5pBVxO#S;wXNel~NVK56%h>L&w?Oo4lZ@>l>Sw=ldZf^o*}+UJ zYEb#0_-y~_ek@(Hl#vUBDMvBuy76Jy@)A^r6%!)ViFdVzft>OZ3t`XY9wWKpAh6sQ z|2xkK`i0TC*%Sy%s)X7BlalhH$qKoGa-wnrjVQ5D-MYc)eG1SMyo&J(Yj+TQ8jA

4Nf2UzJ!bTViV34KRB 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 delta 169784 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К_L*e&;9Jn}21+1#>!+2eR}`k7Uf1`1=0# z8S&n~4wg(QBu@Et(BGdjAW%$n-&_8oH_FbP_=ukcgWcIFLJbfAx|yibV%0grt#{_PXNJu|=Mvv6YW&t=A)y;bpdp9~hh zIK^t91V1%ihw?Ncq9aS#Vn2jYVs`4S%uF#SmR~8-SAnJAU#b-1CI21t?}If>sSsR) zpwke|tcnJ9WesUIq=+1XN@tZX_d>38-Rf9k8k{%}O(Z-Cj?uuAw04p4q%;KC6{J1 z>xs-=B}Vl8sX0;Gj0b<^bx3%%vv8%wt9-41D_Tof6My~hV8FZJACHYUy&%ZPLr(>} zakjigI8^d+&)oLe%Y22)Xe%YrHtB9_KN>F>hI`TMRI0gWr8RN*=0bmMCv(FWCHHom zBZ#8*Q?+HP808Ny-6HU+2E@{&aOD?v27#6z=ZHpI;?6D^l;71!- z;v&F>8A*CXF@+&vdXO^}#8DyFuf;VNZ{%K;bXa2AJxN}D6#7eZJM-)p=T2xgP8h~o z7Eq+kl%7X%Euu5(V%7>gQRtC6kbN;p2ABmdSd|;ug3d}dDWa)!ZTkv;d$P$^F>$K) zY<#GslkpUaWgW2~P(ON{Cu!F@mbX2jZUxKR{-7&e9V;A|+iCZUsd7czpY1-nz;@0b z(DpkY?VIhf*Ot!rx-I|#vBj$nMd8_XuceREjp zc4r>hRc*O_RLzZDe;z$d`m&3SwP+mV)U}>7n@MlD8j3VTSAL$ZEdB>(=%|v)Pc!mq zI-?yZnm*LKhOxt&6%C)XnK1j>v-aXP^@2_)5Tym^PbwBl87qMkaG0{idRuZl@jt<% zg#5jtVf-)FTq)aTD*$L3D68?X`}AW=M|NEY)`)e3@711!SXn)RST7#Wr4(p$4M zhd$)^KvaJ3yG66npi!^;?` z7l25bS}iKs)6D2*5IW?ZT1tm#>EbXh3W{NV zY=5FdZU7mU4sQFirurGEx-=TDJIL4oVPkAtG+O(WuH7rz9@VuM8q~E64RWo89S7#1 zWp=wq<@X)X#xBK_*));McpJyg$^MR5DFL2b8Kma(Sc0uc$wV?;bhDCvm9%;BCDFI&7#ZtJL>e3- zUO7gfDGaqIUiGw6f#5Keek#BzU}UA;$ye;AO95(@KaNSyC3$ERO=B5o*i^}>*cPB5 zEMfy0wJ6MF#GWbp+Fo|2{in<9PLaniu)BWlHm`OqD?rz95IFz@T@SU=&>(vp`{AJ0 zCh4Q6aQb%1p8WF)w$XvQ4Hrs1c@P}m~FOvNtCew zHl}MY`LT3m@r(3%emK+8=Yd?;Ryi+*j74rnYl3SwfJ}rWf=bBY1_79ii`cBv`@!Um zlbflW8Yl5;DyOz`vIYp@PjDJZ^A)*T+ zFHw-Hb#h8|xuCI9qp;Fr>teOfJ$AA=>&+5E^{Tc#HeozaT;n)NQkD|mWI)xZq^`JW)A>xG_@1zkux zB2=}f=(@SiWI7WLVqmEYNaI(grnG^c#;-D-3CF~81$)Zqe7*%wDRC%j}}Y&3#$%j)7YY^Hx6PEkgzP}{PkEvrp)RA!b=S|JwwQ0d|Q!xd{P5a_^4d>^Poj;{2S~{3)}1L19NhLpSh8{F zuYkgkVcYGx!oBa(wQG6XcXgeyyzP6scEYrUkYDD9>1|Y;)X7sZ^N_lYzb9fsjNb$U zRW}I+sy4weqvj-oNY_KIPdAC(?hdrN&J zS~VDZ2`|ty^vYZ`udWj2mbRg+?i5?ISx{MjXa3@w^Rw~Dy>mu>ehr3}NMK22BhLm2 zEFiln5-qri(cHRy&`57h5%ZYI;-K0qjyOv=T_9z;>1Ag=r zG1#Ic(Y0+Q@S~@Bl5!lNd7(mU3D<~qmG%u+LsjOUlRijhdYRovze_m%1zH^yT9gs< z30er1bz(*fT2RqWLkH&WUj-t~k*1yLHw7BBFohY#`fR;N=zmn#AVG`Y2`v(QtD}XG zB}`c_RsT@GsoF4(s+%yb19UKyqi&&`sw-;|XfdbvniK0=k|#KmMB$^eS9s@$(j^hj z*$7>8#4kUcjlrf~%*Az9Hv3?0dzA(AyY+z+(sDE4(ivfz$P$5f@)KUy#~m3% zo{0C}I4b1(Wax?}2*2aH*P4CW+7xjo-Dhc=6rdi_y6MWIHm6ic$ysJ9l6dL@W0y{C zQmdj*I4*ZmzFfjT>1K81t4nn{V#ViRv@7c`A?7KmmWWNMWa@09<7shm1FS1kg`>;$ z>tF_A+G85&b1qN2l}Ol+F5)(c1X|Cn0)Uj#_*2|FYubqaGx{0*E}t>EaHbP$Ql^CT zu-djW?P{v@+3hV7vg{Q7NfL5-oe`{{1?Dd7s6~bMm1Cn9aI7PG(WzDMh|Ek2QY zlTahX6Z7xIwv|2uSCZ{!WzYk}IgxCQPsxOUBSQ0#JWYJ|J6WO^R@`doaXZR2+@+3n z;E3-`RSDxIIDB=4t7}Qj1wNl1wqn$#}O0XIxlFz9>J4WOQhq-(CVa7cvgkh zM&Mx}iN6@0RzV2!;16sQ)b$A;fkSB85nUfKR23?(lq7L;?z*Cf%k{KBV#p%*)K1`4Dm#WjH7=Gik&M@Rg}U-DGY_jeo3Nj948Eu;B}jppHGG~3;1W~QUzIwKj;)+rQ;@l=r*PLrZbCyw`? zksl~;m8=shfvG5+YJ=7g|MM_RY&uQOu^e%hR)xWoxg1Hp8We_%@vvV+>H-0njx>xn zyG~bU!MdE+?t4TIsgGu@RCS(`Qyw13ozEYRI@C zjjHfnUD0{|T~{>730=`bzM?BC#9g|gLVQctpq8j1xA4m>mL~1=7U@OwN&?sF)>U=u zs=9Sm-MXr7T~#+%NqccYuSpY#e(^Ij4voTD5;Z5Y;ZIYzwJ5b!fNIeM_TxF5G?RMG zmr!o{RZM@W$e2cE)o>jHeM32`V8$3qw{gsar?ac%4KujHd`0al2Ln!7=r}*Y2-T!F zW{NmYr8kNHS8vQ$_<^7>@+^rj^lzUmlL^bx#Wz? zklxH`^~|`hIbGba6GM&E6>d2OuG{F*gD^c*n9P|6{wG2vwGrgvF}80`97p^BPBwzM z?NB$&jLWwT&gq|x1!t}~!k}lQG}1{8CSXkGaN3THUFR*7HR8O5G95=-jTQ8K*t!RM z;Yw2aSpvycufnMcBi3zZ#mb`Xlp4d&1HqkaM#nORPCf2NRG_0CEoUgW(aWqL04R~f7TT!Kcj1n zDLh-u50}wLb)9oS+j+Xe*2l!wRS1j49D1`7hhD#P=tWy$98IkyA8i%ukoLyQflPKe zCV@vSWlnlf!)Q-W6|+Xi8{|@x-;R!$;KPgn3Q6_VY@{Xw;6aI*|oiFT0``r1RYkx>J1Ta##Rw z%xZ4+*0CkM?yalgL{zP2YNzfx=dNsY*ICS}4ExTyK9729%J^i7YKvaGX4fAM0OiP9mGCIb^23X5h2%3?a5DB4H zr+7V}GS^arq}6kTSd-Jht(-=K<(j!U?qKk8b4bM<9bAELf@&oEHcX&&44Rumtc$Mk zM&}=8OZ_ZtY8$Wtk-wB`c5~RdGkjtjuru8zh2-dKQ8cy-R3h0HA8AvMTh}V>PI9-iTRw5JwNppp3mXoH;x;ROvS&e#l#sq zlz7IxL_wdEDClqkQ_y=70-BZhVv7>6<-`{&On~TC?XgH$a!0y^P6l)sm{ z&3#DS<}Re}&!_-(Ut6fN6VWE9ia(%Hz^2}TgLvEM9hgqQs!W4`bs51j0`6pPr*#iB z30MJ>39AcOJ!lfJdXT7#nSf2b1DSPSlX>4E^Zr#~2T2Q`5$P(|HTg4aenmRUrofJR zXR>tGO%|~xsmYTW>@J%uwx*WZEdT$TEVU+^#VLLOEz{;D@R}*R#bkLtFxcv+W=Z0s zNevh`1r27Btuv<8kBK4K7+WJond*XQ3#L#i z&L+{AEVf4XPS^V#x5h~r3OQ!F%M;3x?7Ee>Q!Igl%G6i@HwTNDuw&9lXg|8TJ@a}c zUv{~2+dUxG6AogXRZLTGD@QnHO?fDWGfMx|^)9)yb_uLlaY@5}Ke)b|8nwPt2dfzN z)L^X%t_crvi#@>AxU~qAm?h)b4zA+z30$c#?0Yu2?kZRhL1Y^IpA)X-(tEnzt9`k} z7SA(lv+>d;M7s<|BT2**enciflORtVyO=9w{^9qM!=0JKhr!WdmwR1T;B52|#jF4j zc;c~mw;y*p_SqJ+FmF=rL7Kv|2hGIi%PS{}>36OM=NZ!j82HRgxU*iItcg3H7>F~T zU*7g5h(qLoW@f&yu!yODVB1%DXs(l{O2?d3XsUEf^i{)*ijB}*t>^3B)pW5vb`4ym z9m7)Rbpm;!LI@EhJ?ZT15ThIwLRwF{j7t{#RD)9K+g{`KrOXV$zJ6 z?kDrkxY(K3dIk8%TY6gFoI}OWay<&wyPhIS9k!fs=&nCB{X|n>op;RZI-d>euGCBJ z&{yYWzwPJh^sRnzcGlvq!$e3O8NDz!^mK~5x@*Uul>3WTW=+uxrq%;B~7w``co#RnmpJ0xr0VrEFrv|7_K?k7V%ijV} z>EJDqagzY*Fpv&%L?s{^YuE8)(z#h*l&F(T6fwELF*pe+4%%(mdXp`P7>X|zh~XI@ z!Iy*w>>P49_|duTH9NeLr(!2CmGbwkjZJJSJ}SEYMj>T17h%e}`=dDko$GoOWE0Yz ztF<7xj?QL&73`sThI7dZI!n$sSeN!c`y;utIJxbmB`>90>3He7eNBX$E!=1M>KFoR z+EZi3Xai=Dwx$^~9AfD4A*Fvz5#z4u5aSedtY)l89Ium>N^z8$v)K3)>&SEvcPX$o zH)>yWa|}*v&!m>f<%O0TL%!+E$1U@`K^xwhk1pmLbR23%E4IMKac9P}e41*y)&MS_ zamjbRPJ@rg%tZq(cB`e{Br#`N?X%XV}izuu>j1_>DuUEZQDogV#_3CX>)A;x>!@JERmULSNzg zJ91sWX2M9!vhG@>YI85h*&}f}0JEqd-feSoM>OzGJ|!igzbbz7tGwCqrKht0Ac#(4 zsZ6`FD44(2oe-&=BZeXAW(;)G!)Y?~y7Rxx>Hi(MH~o?_bu~eK`em-`SFH~Z(bHcT zYRMwNS(TY|a#hz{z=&SqxpJ?Z&SV;jo)3c_h=WGwpYvqk0~<@(2V5x0eC~*a+yY-G zEtU%**jmVrC#40Ob7Po5jZ900gZ0+tf=Z$r|d?gL17g{5GMm1|vSL!MH7?Nj>A%Pl|@K zZjjiUbHh1dzulF&Gewa!K)qyToLjyIF|`EEzuI3q8YE2jIw=-|XdMByCNQfN=bW{B zJ{8yEFLJj0asAw4N3ENYey_U?*ha+&ls@9W8e@FtHi>R0h< zEqbD+e{KRMt)nG`@xP;sUPl)_jdam_2zx9ty3j6A=%QvPOJ#&%$A&X1kJMTz%A3J; zEJNvSqzirjY;@6MbkPG{96KZWB!QzSynPjN^2&VsL(Yu6FHLN!>3KhE7rz&7OT)ij z#F^OoQl6bJpJ}_07usoNralJuW%|vuenwYj?^<2am(3^O^yLeJu5HxooXq*U*)IcC z#4>+P%@p)%K3j@+Zi-~305kr79JQTP*}4>;n)y`img2#`rloi-9)m3!k<7qoYEJUw zugMg5uT8~8)qM^|(&A)(A!Jlu@p=o3r5?Udgo#+Yv3VDv%Ax~C%8jVs!k5G@a*Kvt z2b->!ns+TqK!>S%D;Hw%?TTmWFF9LIcXNey6rZsqzelYj?7P-Potv(||7?lJ;gqS* zmPIjvMiQ*JmI#s34b!y?VN6-z)eC@@;5c>Q#H)F`YwJ3&2e|0}Anfz+w623|560Ej z9JX271~TkQEU1{CVnJnZDi+iNCx``|-L)m7N}c4AIOBxvjnj;ytS0S%$@t$>Wirq8 zp!ueGo^G0J@R=#Y)#^mjxR*lHPV6zxU71~C<+_ze0GEOipR(ai4g2P6%7)yl&E{B%hYK!&)QCNNmYJaPgaXxwS1!Prni|^5c+czaV zyz7C)v`byj&C0){``UtCr29YSy8e`5LyK#+1snbrWMC2cS$5VieGRTyc(lp()Y$?y zTqao$(VNZyi#DABSW9P+&@oj37A;jFWzk7~Q;USyj$$(nkCwYFRf{I8do5fVca%;j z)7}LdsxxUsubaGV8v)byIWg%So-ygA=JsR1MMu{Qot>1cbfzxV|6&5Cm^9gqG?Tek zrWQS$BzlzfjMuv;dMGT2ONX7@a)Y%QzkZ*5C!G+&r#_ykJFydNjHF%tPdZ^v$gavH z7`UFquihu$Q^RzfZ#HPx_nI`5n}|aCJE$ddOgd;iYlENUM+#NspDr_!$X3n1r_H}IWbsik6q9~LwDFSI5Ok9VVYNaubmJqT3bs+7SnMP?Kt$qifHQhDy@&4|wW0~CZ#%;|!Pvf>@g*F{;u z2M;g<2LNL0b`7Z~)J%g-om6Ak>$#oFQ^2)eW z1LEze)0JpUG6G<7aGcZ`4jL6U%X$sNqpjp5E$a$x;XF_AL7%t=>rFLnR1aaJAfkb%O0#Z)Pkyi{Kn;e{$a<1#! zVj>ZVY)CVKZWHwbf;Q&qIh#2^h9qNC{+#>SP9uiP#u*b=4?keaoFP`za* zx*c(p`T6A7mENf?@R#CR%2eKPL3zZx%@@BN!F3|1Qv<4Qr)g8DoNSs7zGWi}W0B&t z@rxf0W=_t+L0%q58o?2z6Vx2*H)Y8Jb^$ugEa^XhoEgqZDZ+*XG<(DTK^Qb!=}nVfSKw*`)ef#OyA+XSRarA z1Mpquw2wrT?7k}BYtn)_8==-t7?BAI$yh{1o;`&N+&1rYv)PWh6rOzf>z#I`{A9kx* zr!_G4;f5vdEfQ}!%#=U{Ad~T@skt~+!@kuagYJljqXTVH%)QL2_Drr3I4J@d%^gkF z9sq8FhG+)I2?oQWI6>d&i`Fq)vqy6uX_+j{Z*@eC816{U5L9jR@8%>-=>lH?>p-Dp zWwKT@n;=$4GLNW@$uwHxIS_=oQ}4=}z|%FAnnhtj^CZp)nU!m}DAGSsS zR+_vP#Dl8E3Pq*G|Btpe0g$UI^S&jg=u30(7#nbPt+9Xe4FI+Y?`8GOAICC5?+XZL@==_gN~ISE~{iG zXSlR!{~BU&L~a;X+)mWeBt_*|Fqw*X=9hATfVdHE5>=s|!_*+(GASdZWpw6S!o(nG zial`#m%24;;9`WB&rK69kxtO84J7db9hQJoc{rvG3i&AaoG(0Oh_cycEwS%9V`(({ zoZQZ)Nn0o=+uXp}KG<|LMBQczJY&M-^eH>LfL#i@ zTT1!vHfI2B!+OUdS@U*qcp;n9#Ou>=l3gRORAX%NSk_e`{*EypocN+Vf|tnj92o70aeTr-@+5zpspU$E;p0JL>tn}4mr)}SXmXSGd2v1 zZ<=JUN$NFv`E?0y5E#sN6KB_%AZHVi>LB=vrEILFRLWnoBu;d#X2Jt(fm~s{IRyg| zTQ~IuG(I&;2KoZ@5kffxGu!#gMi!iiky&T3Z{1E$c1)x?1Kpfoxr(H63wh-$UHIBW zJWdaMfEuroN^8@FrrbBw2rm$8i5VpPD#_GT<3m(oJ6M^IylI~rn6Ixv^Cp6#cd_h{ z3Cqb2$kOu&2T|r&7jNLgO-r+I#`;E!6U+BqxJSUz7DKU~YKvuSPCjQ(C3M);xj_mW z)37sc<$`V#k-d5o`@{6HW3g(meFLslpDQ-mZ_R;QOzzdtmN~fsee-3W%<{LVn|Mmw zcBJ-rHN#v~WNbgX7omoH;i!$9$cS_`&8f2fO!>BIVzIWP3ZvA;F~%-*xP`gU*>|O3 zR$W2)D=Tr8tBF_AtbDmS5&xs!Okm}jkN5{UaB}@KM934S_!Gv6o3FUQ`BE)lo|rv3 zfLmk6xGNz3AX8s$jQnQXpmY?z5ezDP-AY8;hSg5CBgf7BQaC_qP>suoHAzi(Z7&Ve zapP47Kf}THQzFTP2CFcL=u(dmjVLwjHc3b=s%zoc>sBW?RuG_Bj$>VP3; z1Ttj-RR9n`a7#Bt*v!DqyOby>=1uUBIPC*aYEaq2(Uek6QBf)bsx9WV+H!~Ql?nuG zB_??@(uZs;;80pE0%d9fdpq_p7b`yzRx~z#Buk4MzLw^Xv&~FZz+x6aoDDo})~!?3 z@X*v&vpQX^hvSp|_>JA$JtOLuvT6aU7TcBqRb>pD>~N5&bFE?T>n6RRy_?sZpiPcN z?d&4U!wQ^Tis5cWUueC5-aDyFY_-GPdd=9Kp;niNHGv^dbqG&AowP zzR-X%_XIYEPC{KNuu-V z?5hVsDC2y#JRAZ+pgDgY7bp>;GPdwIh#vMH5)*`?*msu*YRL z+2JFcSOyOUDvt?mkN-Ztxl`hCr49Y-@!wEY!%RU_J;24BR%;RqJ zFfAB4@-S5jJ8=@DY)++=H{#=j^kJp(%8XNW$Phw;iD)stn8hbI{U?fr9M}!+wZUDi z8b()TJ0g?%*^^??wS_}3UDehVv%(3=^j<9UVi034!Y7e3A-v1yrH;g?w%`Z;6|FiQ z0bcAjW^;*7d9g%o=Vp_kqFbfVA434qfyUKwS(J;;q&b7PuwlAY9h=teN3`~(nDpxd zS$y-H6srQ0J#@oY-o=|BZ82)Iv+xJC*(bI|nS&*#HdPnxqemJr{(wc+N zLlAUc8I*^)ULet{vlGJ-POLlBi(%@835+(IDcWuc&n|{gw}j`;*br<5%`DOpW7nWn z^8EHa@$%RT9tJJzdlIBmWMZGH_j_P^cZ3?9D{L`xQAhsnF%;9G4P z!5|ue;H$jUjo__S?#dfcLsB_7P94SI#prZ{2Vv#?s>w9-tD4!Kwy~w*kuNbL5(`|I z)9=`YY>;gktzKMdBc;4|_X2f;@ght9ocZl*gThyN4a(X7Wv$uhQBYW`9P`^F+46}A zI8=u-po#j3^<8(xu3y7xAJt;kSTSD-1U@js*)DK{^xVwc(vWEJ!fdHxo}(_c*=q-~ zA2l5A5#{%>4AS{TT*R@<)T%d%-nNWVDu!s3$OK5}+)5v%^py#N(Y84(uktCfDZXt( zOap(2O`=($PgWC0)e;}9CbrfRsRlC>u-QT5v_WlK%^2*yz|);O#D7+0$`m)>V{ zfPI;b#zZ#pua@S!eo`a!`>@4GakJjeU;CfyTG6^TjIN>94^jVY>+iH8Xb~#fx$c4z zQN0%=doF-nAb1omAS}I9oPSRH`B)B>pm08PKfnEops)&n6<~Ub4H{uW*E@xc?Wn#w z{p8Z1a4rKxRz-J_FTC_QCYC;UT!c)iP%<16qL_K0So%1_-o%fSQuX4eel3v~KQ-QI z3*LMU>AD)qf4>x_DdmR-BrB-1{X1O^F^5tU6pf&BRgQ}%wMlb(!HD80O$10hpBSQM(dZc+vSBf?7^cAt<&07?2 zN?9mP8!fVcbs(dr{bS_Dq~qiC3RpeSDKXp5gIZ!E@~EvuRu(vyIrjD)4foMO(=j?6 zm@9SoK!A}&UPQr*90o6^uGJ$%!fb1X-Z?D>aKJknBZ7qW)qoPi$~&+deH<0DIui(6 zorBZI#l@eOq=HeJ*~EcL*jz60fLvaCP88~ST!eHAj%B+$tu$u$0Re} zp|x855f>2y#UCv;Negt{nyv$any$TMOQlxicO5L4uRYS5VWFdZsL)Xx2wh8KsM=G_ zt;8sxogU)a3r4fC4uA2dCF)XrX#MO{+|!~OH9>qZY3vnpu(CVQOW9F@2`7{_)`d;z z&Gs0Om~)K)dd{IHHmU)b#DLV#1`J4@@*5Lwa~Lo@@ug_S**R{nFZWc#Kx{TOVqlxC zZ)u7Fby75~tHHm8$ul6KjhqE@O_d)RzZ6@eZ3^m@LTVAcl5h~Gru9S&2?*&8G%7f( z<{;$$1H#UV>^4V1l;gUy-UzBk4RAfHdqV+QjG;FP5bGN%RVa|_vHwO5(<*)ol;*w~ z1LqJ~VQ!_WtolJTq8jmriSG+?im%2|u`Y@B6iY+ul4!_~(lDQ-7AP1*IM%)5=ioQ3 zwk3y=!Julm1joeq&*H(F7~*bRC#rWWrdGK_LandjRVX8#1&Q>H(It3XC8o$)HP%Ev zw83G7%;|E&aY?vsAiA@;*Yd^ybvW?zg2I51>nNbwk$7MT(~bfXZ!DbCn66&M zyh${@-dL3pL4s@fH!%@7h*XQyH!%_DO^xyzQ6Q#=cMWZ~BFW@br}Z|RtEi_5Hj0xJ z;D+ANYK5y^LX9Alz}TyigA!nXb;KYa)p}TuS~bORlm(7?(__>W+rkVh#fG+{YcXi{ z0`5OM+nE(3UmqQ@O1m;xavj{ZxWUuL8`rvOWA(<5K5J&(8{lR`(c0_Z7%jkLwo#|< zS98Bb^`i;UE!GIR5lcLOsnhK{zK+`(4HJ%6qbvpK)jUn*O+3}yd0Tj@#+jC1;i)?E zBuvb`m~|GRc0x0^qpaX|8@Vs9!}KSWjdEf#Y@>Y< zX*DLp+XMKEP^jM9C@03Q!6>ij8yBsi^?#Tew*HT^9%wZ66p3%JHFvtd4wFz*i*6Ei zLmYj!-nRZUh7T`KZdtgMrlV+?FfeUs3#37}YiLnyM!m~O+L(o(nZ04o8qCKtMbU*b zr4q_RgM@DxgPno)#|;XhOk8e;$!|7zX}35Cm?*WKj>&$~Qhd0r<+)378n>4FD@(hJ zDBSss1rJqDClc$hb~v~U7+#dpPR|h{T^M)~AFaKU5Q|ai-{8A-hrMi6*p6Y}zaq}d zy;_MU3xlAnt2D%|$*c#Y+fy8%Eh_{!SJiXjp_%r&26VF((cj$7cVYtw-Qa2|qLJ2r z{|9}qg^);R5Q1XuDbfhfqRRkrYplu(U0#*1e1P~=xS+_@mf@g&;9BB|1+eDuTWxHJ zx<$P;zG{-&hKSM=;#m1@h$ub3w7QsEEj5m3+GvYlt6B8B(H2nmfq78C2+qjS$V7sX z^Z!rvOL9>W4VBA7_)BY20BTu8q&4>|kV*x4_;DQ#H4m`0l$W%$Aj5=gI&ZdsU4pUs zVT?*1_%wF^7R)XY)nH^|A+{8<>e@CNMrieR_PK2rDZ-NbvxVSYR4FcbG$}4c#H?SF zWb-vG0zR?6DWn7%cM3X%JEoveSTTu?cz}G}!u)L&__o1Of+K9`L2ONt4!QcXmTitKpnJ9CF!B*#`tyF%8Iqy zFsrqSt=e33*AI2$n0Cc&^bx2AA!{{nOv^Esy8Ob2wI8Iu!NVJZ`l+U2Ay3ocUaRWY zw2A+Sh(<}LacZlp*t_a?RC7m}wa6SwZ2r)W!l&WTj0_@73iz~QoBIe^&}|C3$A~5Z z&^*HpgH#!OutzcW&*CJ^5V^A|6jL|Pt_t%M32V-uor;-)$i zAV=476F19obSNDte3Jny`(q2 zB@3k(vzD_{x(C*VYmHT9+bDy7LftVrdfC<#vCox|_gJwI9So}*UV=VlxUrRPP@Llk zYR3amPKKDWF;uED-XAH@1>MJx7W^k_BL#u*e-z~L1bh1;T8i#ln^d>;tQr_%#m=Ic z1jdZY^k^bdRVr|eL*@V3kAFAhPc?c&onuR;Z(vW?&>@X^X^@qT3ywQrz zqN<`daTZmKUT`GXS0{XA{cMk3@>D=9h!J8T{+3?rg`oJHCIF1xT68Qtm+r+;Tl6a7 zcXxqX)vh|3L zV6e@6V4;~z$8j6)yR44Ah{u=NSur%czZLn*Q<~j};jyEe&FtHbBII?$3q>8EF9vac zKoc}O4=AO}zvan{JbQYLCtCrbCm|cJL;7eC=Fd-Jk6%d`szB$6(OV|SXKC?Sf!g>* zL9yu!FdUkwyJ<*Sp$1M3UBv{P-y6tuZIM6Ba3X&e>q6Wpr!{96v>#VZ)gEdm^`Cdir(1&CWrh_PXNfEk$uY`D;YQUWdN6ujOzDHQF(SwO1{M3Jsc zIO{L~FjEcy+!Er&wNHvaNlS4pR6YqdN@;bPDT&ivzvs8-VvUwzTx!9?Z{kOcN8?%= zyG3VXKvQo?AE#wDV7$N!P|m;c`bHUk>;tYjfm4LO=Ptq>o2UWyFH zWf-x>rZ8Ti-Ff)XlImJ=VtOlWXr@|LU4Ft%y#c0KK@E4e`qP+RtYfY>Bgh<^qP&C| zq&Lkx1xh#Bt^C_N3f9{kLV7Otx^_!q#tm-3R+mE-v6UbXn%~gm2*>92yGBcKB zf{@K3^-a^^*l0~=JA(m792A|H(MI8sVmAa%2dhZCFAf!n%kYMJj7(ehQe?Vu0fUh} zIJLz3DD}hAoJwN-i_>i9@|uq2I0A)Bsah4*R!52NZmtRxi{B9Y{nViH-QR&UD!Uc; zNyYc?b-Vd1Pa*Xg%?Fa32t|$D>UG_dE^xcN;f46-@4ty}?qm0{;z8tn?ZNow?dr{q zq*U~7%Z=Z6nXdg-oT=XzWQ}~UhSf4aNoWU(g_eYaRr=dZ938zDQzD*Qdz11_C?EtG zHYUqfuhnbgpEed8?=mT0H4sBZ@v+_o;6FU~R@2bWh!zIzzEkdUHnrO)A?Ydp+lIkb@B$1D@w!zy> z$%@Bpyi(TElVjGWa~@>Aq*#+P{zeIJLBGL&wp2j(kx87fNhEcr^SIS z46vm875IY`1z4!SfeQ%^ToMPiC_wUw1IJnwA*3=(_%?O|`4B)&PRr!9Sb>6W<1e&0 zNk+9veY7KlZmU!osh?H0ymHUbab4+FRTd2OdPR(QSM)H?h+{39tBCNP zuJc0?KML$No!i_Ebe@vqFg@;S;dmw>YG%Eeb@3()nruj7)HByO(Gh?py7;*YyNL)g zN~#9XN$jU%C+Dy^DJI|JI65qws>?o(aW!!M_v7d)#QK=JLLi-)&$xR;$FcU4^n`(Y zK;+(`O5##c!!^fi!rAGN0jgH4L2_M`w(Bj^spo#QQkc_-gLFsZgEH=4rp}SD1Ow$l!RaTR=QiNRBt(79!+BS_M z*xL4*BiQ;s)d|1Jlnc84HA&`kaXSBR&EiVWEoJ=C;i>YQ&gj?~ukUev;^=YL({(y} zO(}YRHQm_`s>P}6ag@#nSxt(L2$~zCbVj-;oguIyW@3gAV1fOF5;{h_t4k9t*1b~e z={-YbPz{4$&(*%6Lv0?0z|MboXyjAZL=Ea~!-S3hMynhPWhQZG z%#ik6A(Rzt1}6tXRSixb+QV1%24}SxSQrc3`KMedHCUW@`Ryg;o5#N(n^d)B6rWru z(+PXj8cuLZAyVN7l}38?1r*EbD1UM5M%k^3KQ#(k?RT)T4a{OwyT{D|1IO(}qS%C5 zyuC=Qv7bi%B9Z9aMQ+^Rn5!3ya#^MJDvFISbd$us6mNraLO@x(ld@d2l{CiajgfZ=~|qQp(+{v&L% zH;KXR_~ceJB35>Zq@wSBCOgvU0y{9ro!`RYy=sm-Yy1Pv@>t^=t?_zZ&u#|5+_+(K zPWio=z3Fj|*-JE8Y+=5DXD6XMdyShjCQPNomv1U%bpe}OzjgxB0kw?*SX;=}>xP$n zAPurhY?Izv{ zSTu*8v&xF*TT_7NZM=Lxa@d{|YmLgG5yAw>_)gF>T+4rPRF>b-^psjdQpeGxb{xr6 z{g|Fk+r^ig4mN&*tf+IXMtS))7hb_aBrrn(0_PDLstJJyJb$QT3$*5y_eKGN3fUO< zNkVoI1yOCP!*MZyT3h;(1ZFaDp1$_tTJ3J54bpV5BLV(y!b7LR&_lu zcnT|#gU!wHk1iFRh2wIz%Djs+dofls?<6`6LQF2ID5mcX_iTkP1&od7ox5mbec#qP z-r%PzjTW}+A=WD5tfw{Zpk^w;PpdkJWiGL80n_x)BCAPF_D_?&Evy=)8B*RX`oRZR z*L9FE2Tro5lkSUlv?!C&)=7+t^=8)*KwHoZs+LK{os4;GGR%mHC@|~{KjR7V|2U?Q z3^i&p^{d{wy{@D=$@EFH@rmwZf2|C~HV4eS*0CGkcSAM5RQrnv?hI~i6wq3gCY1*7 zqjyC3YwY3>#h8R);zDKz5CI5q1MP}jejZ(|$|rQ7h3%0H9~j`RpwVpaTenNy?P1GGg<)Imjgyn>wN9pd*ZuF$tN< z`#{EG(6yee9x}EU7JRNmmT?fSq4{Ki?!*&YKSPf(} zj*EIGl!hOTKH6Ct%S!h9FX|!o_-GWK&LhW2<#_j^czs#ud%cH5yd*J^zaRI$$jRTq%1jy&QY7 z9vvNw5glmrE-}t=vGx;dL(MwzUVW&GVBF5kl7`6nSc0JV2rw_MPHQJesczsVSJ?rLNBxWrpwyiK$ zp|NfHM>0}Zq^PsRxDH7eVbUnX#!&ri&m(<-_Fw4IR3(zV6035?Vo<__Qh5ck_>D#_ zKwh-smcn1IXyNX(nt&Gy532J($@>Lsmmf*~RT)Gwc17bXYjInip_R%5U2>BQymomt zs(7e0&5SR{rX(73H_g1YK65&DQORT8tT}`hw*bcbH*6I9stjX%+Yuonfk}CzOD&Sf zv{z?gnDpd=7I9YLK>w?qMt1D5(+YkWCQzyCngoFp2vfrtVR|JscSJc9Y*7lMX|$)#yfsu-9kM8wRRU3c=JZF{L)_AE*+m>we@5KmnJ zswRFq-%K|`z)L_9GXe#B(nPn*s>5 zi$yLmePz+sh@yqcCKDi@{80bd+lx=}&5h(_n_}#nBdW;seLVUjyK@!Y$DeR#S}7wj z4V@U7s0b5jVoXK(+q@^P2pe*0y}d!U+6g~AjG*P+Bhth|XmAhJ&Y;?&ZD^TDCmY#` z=;%r!JQ_>We18hiM0bRtxv0#%3y;oA+16x~LODS?T&5K|?&==R^7WDO$ohGbYh66S zP{k9JhKa$%Mm?e04hvPIoGE%C72`?^Erg)$Q70>)3F;D(}f$=ne|x$TiKo@8>k z<<%777onRV)ZU(z@Ca1AR9P+z@W!S_r4gqih#08S6n4r%&&Dky z<()q8?|QtiKQPZ0RMuKXa{%4ykIPYRIR_8eX1}SUBh8+n-j%Dh)98xMmCwthaadg( z88eppb)-%|c95$U@2Z6^;u;};!?oz0*1Oey5|V}!dE-QK6%-pB}2Ds#-=f9ZUwPMnY`B96G^HDoBdy#!C;&viG1Z2E+(*8BBtE8@R zjmY@#Pu2d;3H7!a848GeV+S@1(f^|A}%vQ|65KCqqpkklM zrjQ|tUNJgTh9u9c&!}Az>D6a>HN-z%erdH-&qfPN+36K+LIK=8+7uX{2@0-npl=d5 z^-V$zaSw5mcy@&)3&D`V0gc*Fuy{~F^) z8@|U=h$_&^fPh!Cg^jbnOsBHFad_QE#J!!aA=C!lb-^dL+z*Aubt~rb4WxSS_4rI; zr((=S-HQ08Gz*}O{J9!SF6LAxPtJC4DEnvH{zb&-M%D)@kwBtyH^4HBUH_PgGt}8R zJQj5~B>LD5+39TbbnOk^S`=&u_l_=DlP%;uYNNw9gd?Ln*JSrg ze>ENbdQJBGL2vYpD0?0|QH)!g9hJT*9nD^weQd~Ee^Q`ozLYBW>R9CRsOZ@#!Ng&I z->RV1BFU%)om}3&H(L4oY+vQtH(Yq?hPHI3lD=f8RC!}?dQaQLlmOG!4UsS)#P;H8 z51SD$m9Kb^_7Aa_V7`qVF_ft~=h3Dq<`PqNL`o$Fmm&GSq2Yt3VQ8)MD2zt*a1qf}@^ zqgXA#YjyW9;*!)&ch<(0ftEq$=5fMLUnZ~3`!8l2e>U1`WR-I?-E-E0L&XKXf~alR0iIH>$CzffL=fCq~caS(*EwBKLxt7!$Iq)LOpkFEk0 zIlGn?dksReY}(+K!bgles8Q7CyIquF>`P=>n2oP`kWoJNA<-j=Y{5*&Nid~gl*kBWBTNhN~L zXMoH6Ug>>#%2-(ol}l zZ@SQ}Kpltn-t?fZ>WgBu?B?v;3P9qsJ=3RBKU|&NfXZOS-#Y4K|mCcRXM zAaJteE)W-8(?)n_0G%nonUkkgX>p`RP;a_32C(E8GAkpQ^}ijVPwci%yHiEF(eEBs)(p}NnU&~GxpS|O2@b7H&`q#23 z7My@0w8WNFt6`+>a=+HD>YMKK!gYK^R> zM04K1HEGS(wa**g-9f|3HaGYGr8yOKdWXmjt&(C-!Hjq*p&0 zb>ETg8}ub<_;8Tom($V4{_N@zs~?rLcp928Mw{1(RK@=2)3;}*QN&kn&wj!cF`+%? zg>ts;ptM7x{yVaZc2wlMcVvIv*CKqb=#gZ>7{nz#{Qh~bRJYp3_s6E!B7&Bv?XK*Y zAdGgtE4xdO8#w%~Y&IBtJN&5Fg-C6&RU^>}FK3TQe=!}s@?y)G>Fd)2J+EXh3WD1P zZu{r#sR4>${?+W%^q11nUaw|9mA)YzeeKokt-&49zOQ9x55EDYxO`NE17kgwIix}` zx$3p-cuI=yc`Z9;3_EM4N{DeMDdipQ&n%so8a$|Yd-VEi*?Cmopr7{E^wVCkVJ~m%_0!%Dpr005R?D!6l@w&4 zNp3dlk$T-kKkb!%iqYWoQ*=AaDES`iO}g}!pOustVK0--^Gbjud?s$*NhS=XFEq*u z8fB%`H)=cmwAbmU-!%O+3opyo>!;B@J-NQh3-C0j%dJlvrMQ+e_2XNv9y4j+?EpQ} zuffTFp=^Y%Q!)*-c{Kj=YNss0&!Cvz=eC#DR&o+A^e683CNvaRZd_Y^El#@vv#Ldq zsjJ06l`utOUCTDCOI9LH%3K}j9rG$O;H7}9#Ea;fUcz_epH*h_RaERTa6Ip+7uEandFakege=Gp4pn)WAy!4PZ_0bHFPs~isW}(%Z@OK13Ms9jp8CE5U<%}Mh(3|c>BPB50!P7ASVwwbv zB)s(kRwBybMFKf`VMJGlM{xzvpiWxLj3!$?eh!a(P`r(C3ke~f7hpBFmDiflM6gfH ztc9>{qf*ltG|ZtV#*q7-e;M>e^b1$qmvKFI7ozsw+@6)|{t|P=-t>x?RF|6>V!X@` z59S*rz^KLnB`tQ9pY3&6P5R@Nolj+b}2QJ4Q-2fq89|%z{{o-Fi zuRl7iFV`2Y475-&8;#!u`h*%x1NKr=QjqMuLU9i~-?97{l4c4wn7hVkY!sTgYYk+? z3!P5PV1nvF9d_WvZ(lWSqiK_KxymL67My;t+$A-7mBHIv5;*y)CA7o=;1a+49}UygJ_p&P2~C zRUc!!xzcQkby2D#<>Dn(@eGWKqOugupz{3*emSu5XSo-HVEVv~FXx`il>V{-4P(4? zY;j(xg@9rC|kiL87W*F z!_#}xI0Vz`HCw`?Oy+Lr-+Sy0|8e_81K*gQ8yZCG^DSX!YN|ilJOiE0<%y1*nHwH_ zHkvUiH)`7a_JKfKwD;%cx3}A2Y^ky~mAyk>tQSQf*9)p z4sE0M==PbpT~LyLJTo`Fa(ix{U^C$xD!ZFHdQ*35S4buk?$%OHuHV$Ik)#jgpcJl; z<+|y_)YSKKkP*7{biVJ&>=UTjC9Y4COV?+z?1Ihq!*!Sd_r(a}jW zbGhJx=#p8vi8SfXS-I{R7$T*hI73=`KN9XR-P{#m9^}vK4kAOoABcm;Q zST?}Un=1Cvu~frscx${0di)~8a3_H%?RI__qv zXu6E36P!Ch8qMp=oXSr5W^`3Yg70<}ce~7rI|tDgMYIRA#b;Kh5%8jh^IR0Xoa;<~ zA&9ol$&DQkUgPh|!P&&K5;Bs=+*nCFl=iDVa$Tbx($|?m=*YjkO_Obmk>Z}Y5xX+s zqFz)dr?m}~tzG{TQ3}#&6oi3SIbGfo9mxlEL)VDf5#*9(zEfpR$6S^sY?Z??r|vps z@-!HW#oojOk4u`oz3H(%*>dGjc9{eW$Dm7Ct!oq@k9;WpDm}VzY|}2r7)jqf%+Z8^u!{bv;#KuMZ+a#`XxRWKkKa1>%4z}jc@{=RrM+Qf?)x(9w4q;G8%C4wNRvJlyb&w{&hT5^GIZ(=B$b=$u7ZXTlX{Zqh)OINA55*IiY`$Ca)jGj)cQxv1 znzC6^GG}KWHWBHv20INYs5}gydnf^~D+?c1-x!Xppw-u_02>^hAZlot^=^Q57u`G_ zqv|}NYJp*jA#tf@wLL#sC`|203R=SvGCDTAI_rN)J_ zln0|DI@#g287{rs4LoITvr|*h1O*8i{U}gc z$5x|C6enQPE5(W4^s)Sl<0%@c6RpyhQr-;LgnuQArAWw??K_Q7RELzb@|y@7KbYTy zcN|aJJ1tJg3QF79n1G~LESnq4uefZ4;R@QH8v{?TB=&S>bNkj+ab~Qb=$|OYmQp?zK!t~chCPCwj zNl5>Zo?BxQLChq$njXtlfOn1U;Yp}2aeXEm4{SCdr&*&BWB4sC<1<-hG^`YBAXwGpYoHlaxXJpusfM&oAPutUO>b^- zDsfOo`BN}+TJAViYr|L}SN0dJT$r192F*sDHr2koED2{jK4UUR{ln$vdm3VD} ziq^VpoN3i!(!y#gw@9sXOapG&qd6Nm=ium@W$f3%FvLt%VroM}_7_oI)($v|g(Er^ z#!xnGSvnP1G*w^IlVsXtBqv(tP`wOf0jO9Inu)1``HQ=|a|Qw?lK`TJ6!!B*8ZCK| ze!2>(ETA%ouB^fUy|#s7L7g@Pk98B(v5FG~OmnA=@8qPznhb_V3XM)LH0O&uu*I6-sVD@dVuvVDH)A)aa*V#X_DAUhbB6_6qQwX1x{s@p zhJf8ryDL!X)w-)bytrVB%RzG6S&Z0#2ig$&^MU_!ayCKxi6P{qAWKxhR$;C%h3)R; z?|M|WX(tJZ!q&rSGOa~0<5)W__0YQotzKo}Q8m&OAFh0tpXd&kNFl&-=h0AM}1<<6G! zU@XvqPn1~LC+^}lL_>eBaD{bIM_ab`C$jH*f3j`u*-1hr^~1xF&;|u(QEi_qWkVB zeb?(%<>YsLgV4g|Ib^8PiD<>b+zb|;!5HA$EOWtQFg3;oW$&gk<)fJ2K9@Z5J>=AWA7*>wpK7)aChBN&OUNk^zjeXdFEld&9ZH^0Kg6vU1# zqVkx=V}ZRzM4=bYnDlPOSDG7)_;Nmq^MKB z9CU4J>yUVtT%A}aMYT8mw&t-q=H*wR1mXs1fvXKGoFlAktrfDBLe5g|-=^skeyt%4 zw_#4;y;;jvd6Rr+D&HTf`Lg6QI$xV$j%&pnaU4J_Vvbfha5!mZL)XXo+>!4Fxq$sUOtt+Tktmj z&P@F^H?Mfb=IemXO6QZ~rGC<`_p=7ne(3IiT=(DE_DmP|4NwKnlZesvJSGkAh-1=M3M`D>0}rjl8%pYb)qFxavT_khD(7jU zRlP2O=5<2zsp`}EdNfzs)YMbeR83ICyk`p|jwJMZ?VbQAYp*u>SDORV;nv$LjRne< z@~xr>@^b2sbG_=_hMMo9eqEaBem&U zy1cFih;;yhs(RD+RXxmE+H3-ieULmT-ys{w?M?r^nyr;$UEf||Q5+eaj{1tA2edJ` zyyY@dIx5R(eYu)(^4Z^1cE|z!uOWM0g|Goj9a_pQYTvz-m3S*%QOaKqF@<>27B9|?7)N&P_A`WF$B%2)9Ipp4+}$wH zA>A#})r)g`wPB|$YM%ov2d_CMHzImtaqdGdZSQK@AxHYO+10d1j?7Iu+JZJE%P>Jw z-9vFCrU{wzL^GS!*`k?!ouJ)0Esr0H6=D&gx8wtW%@+6OqBNFG5Y1; zcqTgh=-iQgtfY~740R51)CrM_I-SCiAjatbS)AKt$Y68b0w<8T2gu=cY4H9LoQc9a z>q0bH1mq4Df~n}FV{)Bi z%i=aQv9tlU$AHJnmhK)Lt%isW8djJ`$Rs0sZs7pom4)=f64Wejv-yMZ343Y=FG|I? z=sMD=jttiUGGtO;IPzHRKue^hAkl`Wo!=;3b`GS3Vs3*E>#IgBP)&Z-ygY<6Z}t_X zVfWALy5e#$J$setsGt`^?w|K=aM|T-nz|o5I*a*WWAxwNm$-L1OrH;#WjB9lG zV&plQ)n`I<)D&uNpHY~p0jxcqkl&b4-C56 zS?^guahEtE(N~Da-8LVD1mkJqVRrS?$F#V3N_5h3xt;ceW7(@5)WwW4(<$*@*!XMW z7lXIIM*T~J&I!QQKCXQfm%@mq;^+^@<;Fzs9+%7GJM6SV{MNs|fsA}h_s?28C83Cf zmKV~KRh639xav-*4NnEGGRLjuxbDwk-f|*`(*t>ooh9k=-AsR`IO8_;pK?0Dp-}VU zAzg5HvQIkPE!>h|A-%?Xk#m#uZH@)t*CmWzukh=#Hc@vIOzOL}=@^!!JeMc)|x?xVTBK~Aihzc?Cod~PNSkPbOMxA({Ey(`UN0P}Hu zRwzNe8ztsov9vRgNZ}E`a$N1+<8w2p>9yl?<0^66=|#-k*nWBvMZ)dOEUL0O4R7D9 zCN;*$Vsa>L_H%k^6Pks1v8^BzLmKm|B!O!SnM_S?abKxuk=LVc{KO!Oy`)}g6KBRlhByEezmbL6VE zvl|8-qStpuFPxtn7u*wV8P>r2Nph(dm-5W&1wR?Ab!Z%%EVXn2Cr)J!M(9!b5_Vl26C&? zBdyfdIIF$2?*{(*?cBe#>~0AG>v`1*LXV37#1+0TMo_kwsGwGh$|>_7tsC~e+!-zJ z-GQ6GpZi-&(++gh+B`bhfzc)R#wzWw4*YaeZfkaj9eDY9S`qDbdpN!Q@85h5LkqkZlOr;mR$T?$=f7E!#c#_)Sq#l@|< z1Az5M_uLWox36-$S;cRTy)&F#!i31eb1l}US-4U3uNQ`UcT_hKBl3YJ&iq_Bl`^#f zUbOtOaC$W53t?+?@8`n4ood8~(qe2bGmqWt#r4#Lb_sXypjyL|Sw6jzEdMS{b52n6EF&%rKR)!^;sbeGpiXEdg7cQ>3zvrfmDOGWE2Ej0 z=Y~Z$e?HtJ|CDgq)mYR%ml?J_W{wzE!$%dn(N8Z64-TG-MqM5r73#3C3@|xoSU9cY z5f^{Xid?~N&G2wS^xUv;m;?EV9WkBOUXPR2hR{vDE zPUo8Y;=~56Y5NTiFHS?ij}H&`NI!6C^w#ijQH{u&W$%gZ84(^5+#3DIh;Y|{#UCTX zaW$kh|Ki?};j-=XjM1qY)@ZI<)%apA`fyh`_oODUf{nai>K8}1rHPL#^2fP|79ZD2 zjGR`Eu_VDo$e{xS#i=)3w9ka-$!~AgI zVh2Zy3-sV9B`wa^=^E&X!%b%&V$m{e@hJzJn^ho6mcabZ=%IDth9Xn5eW~vS*ypIO z_{yT^*M;MvwfBTGf{_D1z9-x-=wlYxvapo`M(4=x(a!a;!OZxXY6or+Y7V36_l8eq z#uReVTla?h1f9|J`@%1<5aW^i!YMrc`aW1ySNE9GD10uXyC)Q~(c=5V6N60jOA`uh7QKoh1$%v1Ix3k%&V| zorgIET8#x7ihAkEO3%(-9_?{&cztx)x^UQNX$cC{K>;uk{w>_;xLSsGkBR0#5S~t> z9(*7i;BwkG!zcG1vuFBo&Dl?IlTOmM%7CHx4N95HUOxmj=(*gpw5L=W#3fb>I-^gn z509sm@2(GzED#>Sf1R>5M@C~F40p<5N4H`!9`s%s?5&m8kqYsA@{P5<}&(A_Gu}-a&zPQ9uYZvQ|9Sn;vYG;MgcH+ji z^NfCXb=cSTCjny==1w8%x&~_NkB+`3oF6X3YwyGo+QD&PJyrg}El)CC%i>LU z0+j{9{>XxPIae_H_iMtb!)s;X*T#b=Wju_wULTHbwPUYALoPb%+Hl|eDhex)hMlgt zHvH${u7Ty(g`Y~(t)E>V_8|k_y*?ZhOpL~?4yOk%Mu)5pN7uy8ven_9QU4?1^jaY= zKN8-|?8|2!4X@7Mp^`!F4%hV0uN7s>`9E<^xO=Uro6iY1(2kF+K=ido=YJ;btChI! zGvNdAyAkaS4)eieoVrL)Q^hBu>sN#~(d2W(8R?sX=ws)G(~u~Henm@Ggk2Q8 z?%eRC=wvn+=(ywCw6_zj5Ag#IRzD3H{CGonHi+mxD$^Mq@$K;Bjz^nhdi~pBE1CY~ z+u=dMQ_-~VgnM+nUZ3sk?}WRNAMOzrEw7h0*DcBh=rjum17JLrEati;2;=C&IqQ{*q}z^z4SPExPy#>yOVqDcbl% z80I!vt_pt|@RQMev2|z8mgUtnVW*U*D4NjDGQ0I4Iegfhpe$ zFHd(|`5nMNwjTU3Wan-PXAX>bD*UgY5wM1&1D-Z@<*=t|(w!;=HME9A>6B)Iy!bSv zJT3au)8Pq6CZJinWj&`md!jvp%rPL{aU>o*}@`Xdj>aRVJc4);$7KaLK2 z)`sE5&qA&ZBxaC^;q`CNh8yYWeVfDG8Y`#h2@%=y6FDI==hSCgTDvw~u9mo#6$~)o zQZ9P(Cuq8dJ_mgJqvM}5>K*%&@X%W2mNh!>Cn282Qo6ppSJf-rWC{_bylCZ5!r=u* zt98@(t>NXZpMaNH(ctI9DIN8nM2ntB{cVqyKOc^695B|Af#<`)2~rvty`!8B)L+_S z3>qT(P}`M{)1<-0mhw-d8@Gh}bv*GH&%>*LHy}R0$+|1@9~l1vcnrQXaNSQyJKm%B z11LxDLrbLwN*j3l#c*Lh_)fInYvI2HPYvwy%doE{*mvN_H^MIkTz~WHaMv`~!M_Vn z@4&PAxwpdIJ1$q_>!`+1D_->bx5C-Mw1Ek4hs$!o&j+siKj956`9BIDBVfqA?}jsx zi^snk&Vq|x_b%{hAGrVB@QWFE{Jxp|==!2JN1w{%_vl!o>PA#yWe9+bTchVQ`TPVN z90}~N49fQ@J1+m2reiFOXvtsJ(eTO-VpkGE=jSc?&s6%qV`D38cIW!!!)iTD!|R3d zTeb%d9MS{(OsCBimM-<0MeN5Zx}a_E9+$~@<;%ECd%$+?)tB-Dx-oy6om|IAccPIE9dTWG(K4k@#w~BSJs}y$m%v}EF zFz*j$h+b;XKL%P>cM#ItKk#5j{?3*fWBJ&y{0Rw12d%Ig%+c}4x1ue>@?+EMz8{_a z*Ua#s&a*LU%a5Ki9U+AlQkHYdc}H$>-jVdiXQQ(^^9>)RuYE3htTVqL2nI64^G^lA zvVk9t$R8TyHoW^JtJ|ZluKc)GxgNANz$pX!cjfo3zFRpezjNZ9c;1UR|SG*f^9qy^nwh1RIp z3WJ;b%iR70WB(=h*KiP0=w2nTSN93QU#-_K*WtIXEa_;b&H)7|1~=LQZDQa zMn!-Ab#7#3G>x{-8QYy9)L(K(Om&lo<;iG@`=s!U z2~?DjQUT1Zj1dTxUS`ulwo&>^Zm$owxddhyhk(SqOQhD87J zPNooD-xeOeTbryETmLgXXj4e}^c0h`N^G@|T_UWpWVG3hrl_C9&dWx{LE%pDn%xJ5 z2ZgLhVP#V$>TV4WkDeP8UK_MU#}~qJL3ZGRLilbjwDI-p{xwGhW4pHg)DI;5h;nT= z@gt7v$LAwbveBkHH`;z1`yw~KoG4>Z^D?I0^-G`0kJ#H7Ikp5Xb$U<0fM9j6e5&(HPwtp{$sA$%mbEb2WzI4ih3T6=u3s-surBg|k# z7kdY$oe{7_>*{cU%$D98@B`(dMK^>WiRQhO z+cxmyu5d;^yy_+jz3Qel-MCv~MU&&>ot}Rv>R54hn2#>%M(@oHT+tm)NGHB1MVogD zD~W{e=ra?;OVUw#;H`-$!-+St%Q>yF7i<3lS^MeogEvM0drG)G`q|FmEBfM_yYNMt z)CYGBr$!_D!u4L4+O9n#itGo>o=3lYGR5BMXI0CyFZY|wFsKUj?=8nKd295>ZkUaQ zXx#4M&XbDW+4Nj(!p=CBVT6g)R=(_4R@Sm)S+DP~0iha@=ai>sri5c?^8h_r$X+7p zftl07;{vb#Z`bhX@#z9&^uy`lWUq{EpDBj+)EVK$L4MV%;D=LBqV0PU6r%%Yp&G`T zePcn=cJ7*mT0AX!X;wJL>lSs{`gadoqFeVdvqPs&MeiN~&M(|8ocTT#AGCWo-RnKR z#7lQaYjUSoxpIEDdpNon>tb;x4r~3=sR$OxO6{AvhqdqHdxU>V|LyI8!}kn>ps}If zn-h+Rnl`jh(oFIusA*97XVJ#J!bv;AnCcomJNzcFcxHAuWlU^%_(rjZHGUza)-YT% zL-s)HrfGZAw5id@_YRMtX%S7kE-KFnmp4{H^SX18L#q5_^!qvCl!C_?UX2ZFcEzLp z;|1vAw?^eN@GPIS54^PyU3x~dK7Dte@aXM7pS|yUeZH^3aoxV*C)LXK{laIkL0{P~ zd}ZX@zYs~6JG)tgMNm}O{!s!1%HN58w12o~aQnc2?H}%&8T@;r`|?!AALR1D(;WCz)NMZAzmP4>sHM!hJ$dh1&dURZNR-Mhes{y#6Up+9_~xeE(<>&SyBHtV9+KHqOR%q0AXn1&VL-f%@ z@sq?hsmI6aLv8%m&^9Z2>(Fpgur3;PShxt=?URRvEkW>Pbn4+@rRC@8^0U#u9Ud;L zahj8kFzf5fM})I*bGC?6jEsJDL|6dJo;w{A{31GLaac+J<@JG|FAk4r$^SH6#)(|M zI+}V+I9^YKdFmhd@G;?1LG^jMzW*^P0Vlj=i#Tv%;WA-3# zNtyrbVSAj&_DYgYbm=GX+a7xoEI2mPJqlKx3j1Dvl8r)7>Jy?rpA^n6ynvgvH%*{c zP#%c(Si-llv6=X`)GpEJxS=L+JkZBQTb6{A3tp;{V_Wpi1+ca)GmSUR_^0qRxY|ws z#DL5V{NSI$KLy@UcBOBQp86C%sMt{UH9{~>!I-2H;lTJ_3nOg%t7fzv9dU9vrY$xP zTktHcI62&>u@_cmQ)v;6`7~1Z_1EAbI{YZXwqmw);itociVyJ~t~mvUIEF1YUyXk9 z>2TzPuUKkfWD*OBCOVE-#}+VC4-Jz%q{_;!I0Z%L>S*IBVLAPOUW+oPhKEAai%+F- z^|CSoo0A7iUpCsX)0EQD3lxhO`^~B0v%$}!Z=M!j^S*33?%x-ehA#v!MJJuk49tt1 znH~-geir@g^l;CDpE(rjO=Q(%&H+wZ$&r8i8R5s$fBsAK?iu08-4j&$fp4P^EemHB z{A_NuvRFPoxGYpMa8f7pBs%wo*%Rhx zFD~VnI(anOa$z_&`psu@d(;|PTEV*NTci0aa`Itau!4X^E3Y$p_}tvs==l}7-3kem zbw6wus z(op7`e@&B26Z>3i*gQ+>ftGi%FiB=`W?rIC^|SY*qW@gwyE6%A?_O6CFHoh$YA2G} z#zwDQWy-v7%=GBC%fe!`&(&eE>BRquS3~P=;=j#J{I3p{PK^5R4EL_V>y0}@QB>|O zBm44Q7ErL{>mcgQi?bckZFhweYgm5vuJAwx>)@}42|}`{r}l4z2|^-xNrXf(x7BFK z=i3RZ2EeM1{xCkjTg~=6?B^Mo$tV6IGb;MTg#0-0e6cS5 z(ajU`SJqlQxs)Fpd^K87%8%>Xh9nkREEKAfyCyD-j!p0SOpJ!s=%=Opt?gCj&uN{T zql>%qGX{Gu1L`p?($NtQg(GRtOWm>A-Wt6zsm09pNj>?#!3nz|nf=_Js+F(oJ$5Jn z(EvE(WW8qm)TzlubW!Bu?|bs|Ydr3NUwAOcTfp8v(USu-B;G@ON_6W>nZ0+8r;8IZ z4Q@s8X?Os;-bPKA-<|F8ah*^WD*}7UqXU^AF1RMVB0s z?`@xV##x^{eZi8?9D3Ta(^f=ZJ0#yV@5~kFEcxV$5{Zk?Iqj1tA9UI&Cx2$eq7^4E zE1h}PiqgqvpS$FY1J8;x9k%3xgHB$);?())oqXnsqfc8#&Lzv1NBzt52eckU&pt^} zpN(E$o?n z*DLvJ<*%9^J#$a~<^4)$7fG!B)?QLf1+~Z2oLn(AIDT%-%ic5pD}QHC*N2L!PO^-r z_$=2~T8pU>T>r?moom;JqC4-+KN^$`x=r2md=J>Uc9hva%sjkIMZUb#?BtveM0@D;4Ms+O(-ZsgfFP|pX_01=6PxA4y2>-lM( zlTcYmUSIA@$#SSa^;$B4=fz|mq*D0RW#;*}4S81_TPyev4VC^qk+*b_gXkeK6^!5A zb*^&ECmcR59bHU)lnQ)CpTR@N=kwPz`R9@UAg=py_4!|*@iTe8h3g)PbYIR1q?bvL z2X7_y3kp!igZLA8j~P=;u{TKSxv|C6@m&8ee*$e6>8i-5r^&4J#{9)N-RBz_KNl}9 zrgkEKeSN2-Qp>4mAurZ2=sUPBA6HC`;<}ov(tkh!%uJ+Kmx`&q6X~Ntu+ry}u6(Qc zUL#w-ACup$H4>s!`@KlkxhJ;l@n>ibrFy^*W<-WgnbxjsNK zCvq+Dd=l47c%H%ac&-z*OSHqOv-N!SK&~UB&{*wuM5@HD9P4U^vdat#Q+59x`;)Nr4VYn*jkldL1jnk?0!aOZcLWSvA- z-#`^UYhrZU&+{X8PTjD53-%^&aumdQC*_;uolo8*6~(PBHpzM{S-pCoCb-s4>S~hp zWU_j^SF?7V)FkIwTjRO~DIY5c7f$Uh^aKYkC!*9_&q zC+jeuua>nL#{WiEuczpX7>$b)4e$jGnp9t^%i4EbBCBufc(Nuj-plh)vC~R3tk2=C z7>WNniGnkbw|-EZ+N7p(TvM}ez3f#7mb-6Dy02Dr2p=bh(Q%WC(dw7-!z&jgYSIV$ z_Z3rsPtLW-F;B+{`9n64!mXzDY|Z%~x<;!S#5qelVO$l!{tR_OWgMdbI`-`J4<6`p-Q z&#SK>zea_AZ|Z$gY;>)u^}s8|Hzhu36eKgq?;Gx+^1yrKpPk4rV?n>lQ+(hD(A-1@ zy-f0B55}L7-xE@!q&kl8eUCj9e@%YTg?^3YpSq@4srEn;>wzgw276GS&ol8X_PcY} zns(te{{`=nzsx(|%g0V}ri%*NgLE$>Za=l+9yU<8)Xcwgl_sZOvkH~|5P3YfJ*N&y zJC=98;UDMuV4mNY>?(eQ>lA&=FDa65-{Vx*fN^9vf|qA-UBvZofK6J6e!rr{o`Cdx z!#U1~^pz>i)4?0$^{ATNU!xD@N#@tHeo4)y5bZd>FF(=v3Js}&@=YrCBVlnvLC5jz z>Eg7h&V>03`H!Ii3wZ9arZD8W_jJ?P*o_TkUNjZd`3k$9sc-qFMCPX{RQ%%#uKULo z{fc`}8#C6`e|z-W`sd%0*R$o1@y>U|G`=&E2^5~xKrU){cWt8Jm!~~`CR?`K8!S>^)EE$5U#S3Dq^dHr#qu+F89Kb_k7Ha(@$09T>qPjLk=@+^L_m8*<{ZCs^Hy~|a6XXq^V+|AW<#+BTA z9zzxW^Z|rxh`+&Yc;TY7mH^jjn`jM&RoiWl&iSLWnAULdvrILs1j!2 z^jXN&dn#7)EdKKt_>j@;pTEnqTri%^Y$f0BJooS?TzmG=nEvu!#nf2dU%IEO_*2{q zbq`f|F){JtjQGVe(j_qc2jAfSQ2zEHUD~2gzl;0H{I!#=j`;Mib3co}SE*1}pT3!U zRs1mNyKw!ufAJCzLd8dUku2yJr0Iih{<`>69`$x7{?zbE{OPx3@0uQ^=M_9VJ0MBk zdZXVJdh2de>u#$bZyOt)m2EBg3vvEU4ez(|tQP9$$J<@xkEyScdZ*!oVnQzfpZ5D- zeBh;ASK_^1&PY7_iZ+lx?>KTg@`CGhWWFsGVzIj|CgUVQ*c+SR!eh!zuA8(&O z!QC$*&6@%TbMN)mk8-cZoQJdHNUlHPdNkKDr0*JYxYSuBHWqj^Y2H(ODEGedBe_>k z+qoXVRlkJhlkyFEhfaAk{+@gP{l9T9rtmD+iYoBq#ZOf11)`+z`t&{bb>rfTq$S5u zWBP^U+m$@)4s{jy_qUKH%G}6%Ijy#GUC0#=WyNH@uc&uFr{EsXOMz_ETsJWN{KlW? zwpzaB0H=q32?80%^IY<&z{hFbPKoCy;%A@#Zr;t|&p$t)Q9FZ#b!FG`7rBb{oXnqE zT;f?8_eoq;f%lzqn__3UD%Inkjr9py`i&y5rw2X9K7+Mn^;!IN3RyiV zDr@Y0>Ti;DFS4qY{^wh;u1Vf~$m@rP^1BxFt#6XGamK}b?{XTPyrD^Mue$j5dr!S8 zSwf{^NBV6{eCtx+^t>0L`QNoXJGQhbky|AXKFAH4PjZ#b^~8b2)KOe-=BgS#!u24o z6S)e3|Cf^bxW2}90@qu)dj0w)%J4#Q<6Sjmku9~2XTao#rIJ#qyZOKm&ivPFDAT)A z;@N}X0rLB9_3}Q6qg9Fgp1lo_-wV>!_C8Vny2J+_f&c56nwWMUs44EZp8URGU-5aL ztBwBQ+?V3KFCSc^HE)GZChZW_e=awNaea!b_nhv;y@!M^=&$pOHi%W`)7*Q|4h7^s z?+c{+GW>VS|9jHCPzV*JKb)-p5>vtvhew6qbvW27_z`Gv;&W~^%$Ftax zeyt1Y$-g?U(6{0nHH3Nu4kx!SU0+vo?|e~{+$C~*bSrl}3sJeeA@7yso5=fPxz6O; z$91Yc;J1N$kKM-;-|5{;Jc}D9e`hYLi=(L zR{~#EarHCzMR~)T5FlYsAS{7E-o8M9uo?CQ2@uwB-+T9wK*$av(mrk76$Md_RqMXs zhG=U+0Y$~4Eecqyezk6`wzaiYKW$4t6~F(v_f6jA@!IeA-QO>qJLml8%*>gYGiT;q z?!63j71Hm4mZgAMJ)l5GdOIllXXWkGFG!_xtcorJ<=!$tRb}nJJQkj{S;ZI{eHH^t zDKe^-r0;A)Y1qxcs^L=snJN(FXVs=*6Tqs~ty3?LVZPR+fiM3Lm8iF2l_Og`*9tz= zE_Wc(yoe~d;;Y^8*U(=GdE#x{49Cs&pjc-*m(wT|aMU*we>~#U>ZcZ;$|PTftLb>f zPscxvWtSJTBtK#HJx`)bAs7v+)@7BE&xBa+gPbd<`26#WIr*xr)vp57zWVK5V5QYB zj~_tJarhZfu0RN_a%3&S9jOs!{}jv;N8QM2dVmTrL5?rb+BJ(kPRS7t!p$GV_X^_8ic3&HgmWLD>( zOj}+{ihvh#9*XK}q@K??3yN(>rS&Z!?G{bOYaJP&84r2#N7g=nZc9IgR<+J^9llyf zLw|=~3%6!a>%f7EeNjnb6PIVeb_bSs?W*=)*~%FNS!uGt*W2(kp};YQUF>A`p-o<<`(ujP!6|SK{@mo4!QvJ z3+QE!dE~-`wG!P9MhO^OK#M^6vY!&&{6s1UV%ZU-RV6vi*H#p+CgZU*xgD?anNI^* z?Z@*hX$ADzn<`L6Uss|4?iRj^ZE{Z6AgvUum2DUB>Xc}uP0sj^WZEp>^vz(}PlN2I zM47_9V+a{}4dBb3?^*EGCh;IDpvK(GxaSiEzHH%UqVut%Vq~m^a4YC|6Lz*@dxa!0 zYC7fPo}KNxC_o*lW-9n0$T?(Gj%NN6wlLaXjvF@97qFXJ^sB&AeR=v#X(?IcdVtaYkyWMaq2(RSouN~k=);C znO*q_N4zyW^QSpt>ez*1{|?o7*YU@5)7-#MUYB>1E7 z#{-b3Enn-FrMhekUFLI+6=RtU?eRcu%8sR$WSk}0XOoP#BxRQ5FeECHaG4VNbfUAc z$8qpgXL~GuZn<+HZTC6P>+!Bl=(B|PoIs|(+KLI7d=X?a^t^v?4jOXOIf^xOr-dg0 z?~0bF(LKR}Pqg48A?Zc0cf!RRfKLKbRduojpJKu1vxL6?hNay}J5D)^&#MEo8$I%d zb5Y_BTfOW?Vsq}X$&{ItgVEYjB`QOyQU40Jh!x;c#!?RH*ESh!l`w(I`Fvz6P#H{3 z$NqIGrKZWCTusk!k&ov;U&?Z-0tINRvZQG{V3eu+%i#M}LfKGFx0yDZnpR}xTmr7e zkg0pqnBb{+qXjb6psV+%?m6F|kXBaWw0S7dfefl8r_(ajK9d@^%Jgm6ZL0$8k#8m! z&1KZANaDBhm<6<&A*yAW!{HH`!r^h82fq$(T9R zKzYh_fQ|=U0LmduA5cE|*&DIkS~sM5@H8Vm6|@Yrg4c;>^_;9aF#3bRCvx{9&B64Q zpzP5ngR$wJxsAzKsDg;dh5SZJAZPr05ys z3oQ?x?+2xx`)%r zxM{}Gl#$dFF9KAZR@k8PGC;kVwbo>SRsgEHs#9x0aR%hvOvwC^u?)~9X;8h*T*nfP z8L%zDvhz{R)R9&Ph4w?ZjtqIPPL`wc+GCP@$kcki6?xG}?xj>gcO?t@zcQafW;N&( zb`SDq=nLN~=XTrSjL<}R8g$mh)~Q|}P#*;e%1dSNj#PvK|Lktwg6_QTrUvel^t@jOFWT;LXv_exf@7YPn=# zjV*)fX!{=aPsm)tKwO#ju#>Q>^IPJxRxf+LTwr(+G5wU?`THSIEm8c#D3JSJ9W~tt zj0fp0_)`^p6FfD{Pp35~=ND&N;C*0|&L)wS?rRIv!1g`rXvoykhqAL~*|5rOMz&hh zqzRNGno7`tpi1sSI=?f0K}w+ZsfvDuT9yK++~zs0{>|4SoBva`IQccr{-?7ex0kWG zqpsb+Uq^GBzSihMAD(vh$!;<(a#Hze=b-U2-$dw5u}Jggx`rnFPw1wO2ED`R+WTz5 zrsnlVx1HB%LlWJ)v!vr9;N6~3k6cbg8x6fp71FZ@vs&63nmX$0jm^DsOifk=>e`x{ zJ913j#^#3hj&_wPwoyr}4e^Wf`T;{9pLXW#d-pV6 zjZ7uqICHdt8);#o97#_IIf|OUb{5br|Kr>(!gO+`98RmharP5K>BDcFey#8UD!M=p zp?6}kH_iIixk(hUU<7^iE%Xelq`MuE_BrD$(T0~>iB)It%D-aTdd68QMlcyfFP{N; z5~IldowG$7-N`DXPrq~Kh>}}gkPB~FAaleR^KLKh#^O#FrKD@JhAtA| zjHBv8R2;RRhu6!P{AvySGQN)qSEsm~N*v(3EzAvk?=kOlLt&RMU<7r;6$|RFK-6nN zYO?|HS@(x4P{0!loM596wTzQp=!63%`}=t^M+LG8a{cPAMEu6;5r-NOfZ$dgdH|mPS;(9o4 zcq8tZ$7f8WX--)t%BjsMTeL~#^l2}N4^25`k(iA4V9H8u%2ei!q8(BW&?+)l5bcT> zfuP~{g*{Fh?q;Q^Dq|c zmZ9nub7d}_=pjqRJo>hWT&2xlVP?MNa~OGdPuWW>p#42%NL0}mJ@KK6YHIBzCu$3m zL+@BGIYeAYf9ZvmFPh6W8c&fNIat)tr8%-rET#`~WR13DHXR=?3u#HNED=lT(p>2h zwe)1J+}dYZZrjFoOe$k-LsQ+xri&VyV#{f2Z&@r>P(`&IN>}to16IC;N#yTG2-~&`Y@2)+A_UA6ZY+`^bEuvml{Ge3aWy_NTx1kpo4Pa{J1F zh*@(b))xgBw6U+8DdKdXudESkDW{(dih4H56uPRP9HKRp;`1X=aJV1(U>%+6C(F97 zpITQuuckO!uhZuRvV;Qp(9}qk`LOi{+MO>aizZevmi89N^C-VSj>8w5XBJ4mXrW6A zRjD1btg9 zb|`Fkyqv=ycSQqw@Dh{V8?)67Y}6Z#`u&lpduz&FoliRl$XxXN$yS+1X9mbA+V|&m zCWcVUK$tl}+Xl+z+NHu&mlueJqF!&v?~R82VV54iOhh_!NP2OQyZ~=Xm4jiGA5z_5 znDBBs%;X9x8X^tHmFO?Cv_zdO!e^)O&wE2KKCdEt#JNLU%_K&z43#;KYhXLL+xeEK z{iF!JaxG0Nl0F(g4C3oxXww^iS|~@;-J0y17Y^yss7v>ULm>n0bzOfBgeK#CY>sVW zQ)gBZ7m*l_Y4XT044Lip-7vY;u|r(a$t^kG2oTq#If+ zS7h%LKNO4~M7I^owb?g|8&b*cG;V~9J8rQwmePwOWR=*puWA$~D@`7SMiD26YvRGYWm{!iL#M~MrBU+?RMT)aR(iriD~|0CZnlz z7IfUH)~D}>Wk1JVa7u+UWij`7IkeCQPUgxpX5C_ri0#-Cmb3 zaxYa)lhd>B6KMBk4YCh?vRp2)`eaiK`tKKOsM}x|aK1pz%vG^(0Q?8A-dwgw<_$77 z8_|s&22}e4UL)>vM~z6x(DktQK|z-;lH+;@LY}xQ=rz3Ym^x zpu!p%?j4Evqq;j3()C!(70^QuoBXk~t48+B^Lt#eKwOU-Mlj~`hk}pbGqOcBa?AjJ zj|xf-d*XT^=!t|e17ny4kHRUld|(uBT`}txbQ?bC@PuOSa3rFK9}`ruSo(U0BYMQ` z0pINodE;UCv2?)_R5$MO_(Fy!;xv)MA9~6VIa97&?AOt$Yw)2TG3qVmX)&j+Ir}&j|Pi zbM&J?Nxo9K0+m@jaIc~A@tE+3=(X{(GW$94Bf+amK0Q|^ ze~|sWxGtH&S0vvKu|| z=zK3&KNnv5-Wlguyz73v#~lon9JTPzLMUG0`?a*!C(oyl4~$nk8U66Vft1kahwzsv zMs6q)HDWNLmpdpL^BuFxVnKJr6A!s#ahJ~%iM(c$87@!M6Gl+v4*DW~f9&;?jBX5~ zkmEK+j}RJgLTsfMT+*N`LNY)5q(DEkPQt9abG^h%(L(a->^H;{f)-AOXL>X&?{NG| zRML%27$L0_WTE4fSjhO%bZ`Pb0`w-v8|HEePax(d(=D$VZi(J^dvaj59qwfa<=%8swT^Y;&*h< zWVy)kdjunBWgc~%B4=lRB>rZaGmq9yk?%M@7PBl9v{c|LgnytN6*6A(N6`g)gZ75z zray^pw&s2!un93e9QG7=S=67YaH_mp{DoeainZ`lCMD#ahG^=qv~!w#$niHUxMs)1 zrpvM7Gul2~{!05?&<#!Ko^3PaK7d*Wc zab#t?tQ24I>Y7i9W;t8?yC8Q9qCrR}IR1ekPc5`g^3_Sd_D?~--vF0z8q;IyFihy> zgJgIWB8GU_6*UZZSdaQ*u78P~h9-2R-q_G?SWWsL(MxY>X}q`&n)~v!e>OUXuT0#k6oVyY5z`iYr{^kc>}hLM(k3p&nD-0{L8pUaigPL^<&?R#}#Pjds1TY*$@{ zpkU1`+32`dn`KR()3fBz?CZ`!Tu9qyV;6C~Mi0-H!R&3?RcR^~(4mEJoGa#FwYx#1 z59Z1QeaeX&HTq(n+)SJ1q8Zz@#azr7+P_xzq8I1NLD~)ze51IDo?L>7UNB#l@-AQy zy+04Rcbd7c7B{C$Kba4=ev5WZS~V`D<^?j}u}iDBoaguavM24SlcVyCfZvBn8uu7s z4_3hlX)~-A53Z5}vv1YzPiflj_>s1PF3XWKX>>KB_}es&|I4)7HEOMvRh97|V$+yE z;75?A`$C~RG*^4uhDNM-)*I6%OyJ2hVS+gf;zk?%L)?YcJ%S)Pqz83hJo;npu2gw# zY`gy1cWU>fc$>H(U1kD)9{YBKQ_qSj%P4|UG*5wqt{}4xMLlBgAZLi5Q9JAk2b&?y@^R@ zdhKTh$im!MEaJkR&W$)4BQK!;np`b%iQ_HHm6ciU@6{I6?rqD9m2uO%Q+_L)$Lp=q zLr=8Ip?E9t@m5(a-r;iQiQjTvm*ion#QZV%Wmhl|^2L1bs_AYTuWP%^*>^*`^osul D0(O>- diff --git a/substrate/srml/contract/COMPLEXITY.md b/substrate/srml/contract/COMPLEXITY.md index f805eb45f0..a6f1c3dca7 100644 --- a/substrate/srml/contract/COMPLEXITY.md +++ b/substrate/srml/contract/COMPLEXITY.md @@ -132,53 +132,48 @@ Consists of dropping (in the Rust sense) of the `AccountDb`. This function performs the following steps: 1. Querying source and destination balances from an overlay (see `get_balance`), -2. Querying fee for the case. (This hits DB unless pre-loaded) -2. Querying `existential_deposit`. (This hits DB unless pre-loaded) +2. Querying `existential_deposit`. 3. Executing `ensure_account_liquid` hook. 4. Updating source and destination balance in the overlay (see `set_balance`). **Note** that the complexity of executing `ensure_account_liquid` hook should be considered separately. -In the course of the execution this function can perform up to 4 DB reads: 2x `get_balance`, fee and `existential_deposit`. The last two can be pre-loaded pushing the cost of loading to a higher level and making it a one time. It can also induce up to 2 DB writes via `set_balance` if flushed to the storage. +In the course of the execution this function can perform up to 2 DB reads to `get_balance` of source and destination accounts. It can also induce up to 2 DB writes via `set_balance` if flushed to the storage. Moreover, if the source balance goes below `existential_deposit` then the account will be deleted along with all its storage which requires time proportional to the number of storage entries of that account. Assuming marshaled size of a balance value is of the constant size we can neglect its effect on the performance. -**complexity**: up to 4 DB reads and up to 2 DB writes (if flushed to the storage) in the standard case. If removal of the source account takes place then it will additionally perform a DB write per one storage entry that the account has. For the current `AccountDb` implementation computing complexity also depends on the depth of the `AccountDb` cascade. Memorywise it can be assumed to be constant. +**complexity**: up to 2 DB reads and up to 2 DB writes (if flushed to the storage) in the standard case. If removal of the source account takes place then it will additionally perform a DB write per one storage entry that the account has. For the current `AccountDb` implementation computing complexity also depends on the depth of the `AccountDb` cascade. Memorywise it can be assumed to be constant. ## Call This function receives input data for the contract execution. The execution consists of the following steps: -1. Querying `MaxDepth` and `call_base_fee`. (These hit DB unless pre-loaded) -2. Loading code from the DB. -3. `transfer`-ing funds between the caller and the destination account. -4. Executing the code of the destination account. -5. Committing overlayed changed to the underlying `AccountDb`. +1. Loading code from the DB. +2. `transfer`-ing funds between the caller and the destination account. +3. Executing the code of the destination account. +4. Committing overlayed changed to the underlying `AccountDb`. **Note** that the complexity of executing the contract code should be considered separately. -The execution of this function will involve 2 DB reads for querying `MaxDepth` and `MaxDepth` constants. These values can be pre-loaded pushing the cost of loading to a higher level and making it a one time. - Loading code most probably will trigger a DB read, since the code is immutable and therefore will not get into the cache (unless a suicide removes it). -Also, `transfer` can make up to 4 DB reads and up to 2 DB writes (if flushed to the storage) in the standard case. If removal of the source account takes place then it will additionally perform a DB write per one storage entry that the account has. +Also, `transfer` can make up to 2 DB reads and up to 2 DB writes (if flushed to the storage) in the standard case. If removal of the source account takes place then it will additionally perform a DB write per one storage entry that the account has. Finally, all changes are `commit`-ted into the underlying overlay. The complexity of this depends on the number of changes performed by the code. Thus, the pricing of storage modification should account for that. -**complexity**: Up to 7 DB reads. DB read of the code is of dynamic size. There can also be up to 2 DB writes (if flushed to the storage). Additionally, if the source account removal takes place a DB write will be performed per one storage entry that the account has. +**complexity**: Up to 3 DB reads. DB read of the code is of dynamic size. There can also be up to 2 DB writes (if flushed to the storage). Additionally, if the source account removal takes place a DB write will be performed per one storage entry that the account has. ## Create This function takes the code of the constructor and input data. Creation of a contract consists of the following steps: -1. Querying `MaxDepth` and `create_base_fee`. (These hit DB unless pre-loaded) -2. Calling `DetermineContractAddress` hook to determine an address for the contract, -3. `transfer`-ing funds between self and the newly created contract. -4. Executing the constructor code. This will yield the final code of the code. -5. Storing the code for the newly created contract in the overlay. -6. Committing overlayed changed to the underlying `AccountDb`. +1. Calling `DetermineContractAddress` hook to determine an address for the contract, +2. `transfer`-ing funds between self and the newly created contract. +3. Executing the constructor code. This will yield the final code of the code. +4. Storing the code for the newly created contract in the overlay. +5. Committing overlayed changed to the underlying `AccountDb`. **Note** that the complexity of executing the constructor code should be considered separately. @@ -186,15 +181,13 @@ This function takes the code of the constructor and input data. Creation of a co **Note** that the constructor returns code in the owned form and it's obtained via return facilities, which should have take fee for the return value. -The execution of this function involves 2 DB reads for querying `create_base_fee` and `MaxDepth` constants. These values can be pre-loaded pushing the cost of loading to a higher level and making it a one time. - -Also, `transfer` can make up to 4 DB reads and up to 2 DB writes (if flushed to the storage) in the standard case. If removal of the source account takes place then it will additionally perform a DB write per one storage entry that the account has. +Also, `transfer` can make up to 2 DB reads and up to 2 DB writes (if flushed to the storage) in the standard case. If removal of the source account takes place then it will additionally perform a DB write per one storage entry that the account has. Storing the code in the overlay may induce another DB write (if flushed to the storage) with the size proportional to the size of the constructor code. Finally, all changes are `commit`-ted into the underlying overlay. The complexity of this depends on the number of changes performed by the constructor code. Thus, the pricing of storage modification should account for that. -**complexity**: Up to 6 DB reads and induces up to 3 DB writes (if flushed to the storage), one of which is dependent on the size of the code. Additionally, if the source account removal takes place a DB write will be performed per one storage entry that the account has. +**complexity**: Up to 2 DB reads and induces up to 3 DB writes (if flushed to the storage), one of which is dependent on the size of the code. Additionally, if the source account removal takes place a DB write will be performed per one storage entry that the account has. # Externalities diff --git a/substrate/srml/contract/src/exec.rs b/substrate/srml/contract/src/exec.rs index cc74142947..f3cc2139bf 100644 --- a/substrate/srml/contract/src/exec.rs +++ b/substrate/srml/contract/src/exec.rs @@ -14,14 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use super::{MaxDepth, ContractAddressFor, Module, Trait, Event, RawEvent}; +use super::{ContractAddressFor, Trait, Event, RawEvent, Config}; use account_db::{AccountDb, OverlayAccountDb}; use gas::GasMeter; use vm; use rstd::prelude::*; use runtime_primitives::traits::{Zero, CheckedAdd, CheckedSub}; -use runtime_support::StorageValue; use balances::{self, EnsureAccountLiquid}; // TODO: Add logs @@ -38,6 +37,7 @@ pub struct ExecutionContext<'a, T: Trait + 'a> { pub overlay: OverlayAccountDb<'a, T>, pub depth: usize, pub events: Vec>, + pub config: &'a Config, } impl<'a, T: Trait> ExecutionContext<'a, T> { @@ -51,12 +51,11 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { data: &[u8], output_data: &mut Vec, ) -> Result { - if self.depth == >::get() as usize { + if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot make a call"); } - let call_base_fee = >::call_base_fee(); - if gas_meter.charge(call_base_fee).is_out_of_gas() { + if gas_meter.charge(self.config.call_base_fee).is_out_of_gas() { return Err("not enough gas to pay base call fee"); } @@ -70,6 +69,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { self_account: dest.clone(), depth: self.depth + 1, events: Vec::new(), + config: self.config, }; if value > T::Balance::zero() { @@ -92,7 +92,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { ctx: &mut nested, _caller: caller, }, - &::vm::Config::default(), + &self.config.schedule, gas_meter, ).map_err(|_| "vm execute returned error while call")?; } @@ -114,12 +114,11 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { init_code: &[u8], data: &[u8], ) -> Result, &'static str> { - if self.depth == >::get() as usize { + if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot create"); } - let create_base_fee = >::create_base_fee(); - if gas_meter.charge(create_base_fee).is_out_of_gas() { + if gas_meter.charge(self.config.create_base_fee).is_out_of_gas() { return Err("not enough gas to pay base create fee"); } @@ -138,6 +137,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { self_account: dest.clone(), depth: self.depth + 1, events: Vec::new(), + config: self.config, }; if endowment > T::Balance::zero() { @@ -160,7 +160,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { ctx: &mut nested, _caller: caller, }, - &::vm::Config::default(), + &self.config.schedule, gas_meter, ).map_err(|_| "vm execute returned error while create")?; @@ -213,14 +213,15 @@ fn transfer<'a, T: Trait>( // `contract_create` will be `false` but `would_create` will be `true`. let would_create = to_balance.is_zero(); - let fee: T::Balance = if contract_create { - >::contract_fee() - } else { - if would_create { - >::creation_fee() - } else { - >::transfer_fee() - } + let fee: T::Balance = match (contract_create, would_create) { + // If this function is called from `CREATE` routine, then we always + // charge contract account creation fee. + (true, _) => ctx.config.contract_account_create_fee, + + // Otherwise the fee depends on whether we create a new account or transfer + // to an existing one. + (false, true) => ctx.config.account_create_fee, + (false, false) => ctx.config.transfer_fee, }; if gas_meter.charge_by_balance(fee).is_out_of_gas() { @@ -233,7 +234,7 @@ fn transfer<'a, T: Trait>( Some(b) => b, None => return Err("balance too low to send value"), }; - if would_create && value < >::existential_deposit() { + if would_create && value < ctx.config.existential_deposit { return Err("value too low to create account"); } ::EnsureAccountLiquid::ensure_account_liquid(transactor)?; diff --git a/substrate/srml/contract/src/lib.rs b/substrate/srml/contract/src/lib.rs index e3f6a600b3..e87c289ed8 100644 --- a/substrate/srml/contract/src/lib.rs +++ b/substrate/srml/contract/src/lib.rs @@ -168,11 +168,13 @@ decl_module! { // paying for the gas. let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; + let cfg = Config::preload(); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), events: Vec::new(), + config: &cfg, }; let mut output_data = Vec::new(); @@ -221,11 +223,13 @@ decl_module! { // paying for the gas. let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; + let cfg = Config::preload(); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), events: Vec::new(), + config: &cfg, }; let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &ctor_code, &data); @@ -284,7 +288,8 @@ decl_storage! { BlockGasLimit get(block_gas_limit) config(): T::Gas = T::Gas::sa(1_000_000); /// Gas spent so far in this block. GasSpent get(gas_spent): T::Gas; - + /// Current cost schedule for contracts. + CurrentSchedule get(current_schedule) config(): Schedule = Schedule::default(); /// The code associated with an account. pub CodeOf: map T::AccountId => Vec; // TODO Vec values should be optimised to not do a length prefix. } @@ -310,3 +315,77 @@ impl balances::OnFreeBalanceZero for Module { >::remove_prefix(who.clone()); } } + +/// In-memory cache of configuration values. +/// +/// We assume that these values can't be changed in the +/// course of transaction execution. +pub struct Config { + pub schedule: Schedule, + pub existential_deposit: T::Balance, + pub max_depth: u32, + pub contract_account_create_fee: T::Balance, + pub account_create_fee: T::Balance, + pub transfer_fee: T::Balance, + pub call_base_fee: T::Gas, + pub create_base_fee: T::Gas, +} + +impl Config { + fn preload() -> Config { + Config { + schedule: >::current_schedule(), + existential_deposit: >::existential_deposit(), + max_depth: >::max_depth(), + contract_account_create_fee: >::contract_fee(), + account_create_fee: >::creation_fee(), + transfer_fee: >::transfer_fee(), + call_base_fee: >::call_base_fee(), + create_base_fee: >::create_base_fee(), + } + } +} + +/// Definition of the cost schedule and other parameterizations for wasm vm. +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[derive(Clone, Encode, Decode)] +pub struct Schedule { + /// Gas cost of a growing memory by single page. + pub grow_mem_cost: Gas, + + /// Gas cost of a regular operation. + pub regular_op_cost: Gas, + + /// Gas cost per one byte returned. + pub return_data_per_byte_cost: Gas, + + /// Gas cost per one byte read from the sandbox memory. + sandbox_data_read_cost: Gas, + + /// Gas cost per one byte written to the sandbox memory. + sandbox_data_write_cost: Gas, + + /// How tall the stack is allowed to grow? + /// + /// See https://wiki.parity.io/WebAssembly-StackHeight to find out + /// how the stack frame cost is calculated. + pub max_stack_height: u32, + + //// What is the maximal memory pages amount is allowed to have for + /// a contract. + pub max_memory_pages: u32, +} + +impl> Default for Schedule { + fn default() -> Schedule { + Schedule { + grow_mem_cost: Gas::sa(1), + regular_op_cost: Gas::sa(1), + return_data_per_byte_cost: Gas::sa(1), + sandbox_data_read_cost: Gas::sa(1), + sandbox_data_write_cost: Gas::sa(1), + max_stack_height: 64 * 1024, + max_memory_pages: 16, + } + } +} diff --git a/substrate/srml/contract/src/tests.rs b/substrate/srml/contract/src/tests.rs index 62683e0a95..27d6e59a95 100644 --- a/substrate/srml/contract/src/tests.rs +++ b/substrate/srml/contract/src/tests.rs @@ -142,6 +142,7 @@ impl ExtBuilder { gas_price: self.gas_price, max_depth: 100, block_gas_limit: self.block_gas_limit, + current_schedule: Default::default(), }.build_storage() .unwrap().0, ); diff --git a/substrate/srml/contract/src/vm/env_def/macros.rs b/substrate/srml/contract/src/vm/env_def/macros.rs index 16ba669daf..c751bd0c12 100644 --- a/substrate/srml/contract/src/vm/env_def/macros.rs +++ b/substrate/srml/contract/src/vm/env_def/macros.rs @@ -219,7 +219,7 @@ mod tests { #[test] fn macro_define_func() { define_func!( ext_gas (_ctx, amount: u32) => { - let amount = <<::T as Trait>::Gas as As>::sa(amount); + let amount = <::Gas as As>::sa(amount); if !amount.is_zero() { Ok(()) } else { @@ -269,7 +269,7 @@ mod tests { fn macro_define_env() { define_env!(init_env, , ext_gas( _ctx, amount: u32 ) => { - let amount = <<::T as Trait>::Gas as As>::sa(amount); + let amount = <::Gas as As>::sa(amount); if !amount.is_zero() { Ok(()) } else { diff --git a/substrate/srml/contract/src/vm/mod.rs b/substrate/srml/contract/src/vm/mod.rs index 63cdc5861d..dc59154266 100644 --- a/substrate/srml/contract/src/vm/mod.rs +++ b/substrate/srml/contract/src/vm/mod.rs @@ -20,8 +20,7 @@ use exec::CreateReceipt; use gas::GasMeter; use rstd::prelude::*; -use runtime_primitives::traits::As; -use Trait; +use {Trait, Schedule}; use {balances, sandbox, system}; type BalanceOf = ::Balance; @@ -118,7 +117,7 @@ pub fn execute<'a, E: Ext>( input_data: &[u8], output_data: &mut Vec, ext: &'a mut E, - config: &Config, + schedule: &Schedule<::Gas>, gas_meter: &mut GasMeter, ) -> Result<(), Error> { let env = runtime::init_env(); @@ -126,7 +125,7 @@ pub fn execute<'a, E: Ext>( let PreparedContract { instrumented_code, memory, - } = prepare_contract(code, &config, &env)?; + } = prepare_contract(code, &schedule, &env)?; let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); for (func_name, ext_func) in &env.funcs { @@ -134,7 +133,7 @@ pub fn execute<'a, E: Ext>( } imports.add_memory("env", "memory", memory.clone()); - let mut runtime = Runtime::new(ext, input_data, output_data, &config, memory, gas_meter); + let mut runtime = Runtime::new(ext, input_data, output_data, &schedule, memory, gas_meter); // Instantiate the instance from the instrumented module code. match sandbox::Instance::new(&instrumented_code, &imports, &mut runtime) { @@ -152,49 +151,6 @@ pub fn execute<'a, E: Ext>( } } -// TODO: Extract it to the root of the crate -#[derive(Clone)] -pub struct Config { - /// Gas cost of a growing memory by single page. - grow_mem_cost: T::Gas, - - /// Gas cost of a regular operation. - regular_op_cost: T::Gas, - - /// Gas cost per one byte returned. - return_data_per_byte_cost: T::Gas, - - /// Gas cost per one byte read from the sandbox memory. - sandbox_data_read_cost: T::Gas, - - /// Gas cost per one byte written to the sandbox memory. - sandbox_data_write_cost: T::Gas, - - /// How tall the stack is allowed to grow? - /// - /// See https://wiki.parity.io/WebAssembly-StackHeight to find out - /// how the stack frame cost is calculated. - max_stack_height: u32, - - //// What is the maximal memory pages amount is allowed to have for - /// a contract. - max_memory_pages: u32, -} - -impl Default for Config { - fn default() -> Config { - Config { - grow_mem_cost: T::Gas::sa(1), - regular_op_cost: T::Gas::sa(1), - return_data_per_byte_cost: T::Gas::sa(1), - sandbox_data_read_cost: T::Gas::sa(1), - sandbox_data_write_cost: T::Gas::sa(1), - max_stack_height: 64 * 1024, - max_memory_pages: 16, - } - } -} - #[cfg(test)] mod tests { use super::*; @@ -318,7 +274,7 @@ mod tests { &[], &mut Vec::new(), &mut mock_ext, - &::vm::Config::default(), + &Schedule::::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); @@ -381,7 +337,7 @@ mod tests { &[], &mut Vec::new(), &mut mock_ext, - &::vm::Config::default(), + &Schedule::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); @@ -421,7 +377,7 @@ mod tests { &[], &mut Vec::new(), &mut mock_ext, - &::vm::Config::default(), + &Schedule::default(), &mut GasMeter::with_limit(100_000, 1) ), Err(_) @@ -475,7 +431,7 @@ mod tests { &[], &mut Vec::new(), &mut mock_ext, - &::vm::Config::default(), + &Schedule::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); @@ -568,7 +524,7 @@ mod tests { &[], &mut return_buf, &mut mock_ext, - &Config::default(), + &Schedule::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); diff --git a/substrate/srml/contract/src/vm/prepare.rs b/substrate/srml/contract/src/vm/prepare.rs index b79ce8336d..8ec056dfc7 100644 --- a/substrate/srml/contract/src/vm/prepare.rs +++ b/substrate/srml/contract/src/vm/prepare.rs @@ -18,30 +18,30 @@ //! wasm module before execution. use super::env_def::HostFunctionSet; -use super::{Config, Error, Ext}; +use super::{Error, Ext}; use rstd::prelude::*; use parity_wasm::elements::{self, External, MemoryType, Type}; use pwasm_utils; use pwasm_utils::rules; use runtime_primitives::traits::As; use sandbox; -use Trait; +use {Trait, Schedule}; -struct ContractModule<'a, T: Trait + 'a> { +struct ContractModule<'a, Gas: 'a> { // An `Option` is used here for loaning (`take()`-ing) the module. // Invariant: Can't be `None` (i.e. on enter and on exit from the function // the value *must* be `Some`). module: Option, - config: &'a Config, + schedule: &'a Schedule, } -impl<'a, T: Trait> ContractModule<'a, T> { - fn new(original_code: &[u8], config: &'a Config) -> Result, Error> { +impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { + fn new(original_code: &[u8], schedule: &'a Schedule) -> Result, Error> { let module = elements::deserialize_buffer(original_code).map_err(|_| Error::Deserialization)?; Ok(ContractModule { module: Some(module), - config, + schedule, }) } @@ -65,8 +65,8 @@ impl<'a, T: Trait> ContractModule<'a, T> { } fn inject_gas_metering(&mut self) -> Result<(), Error> { - let gas_rules = rules::Set::new(self.config.regular_op_cost.as_(), Default::default()) - .with_grow_cost(self.config.grow_mem_cost.as_()) + let gas_rules = rules::Set::new(self.schedule.regular_op_cost.clone().as_(), Default::default()) + .with_grow_cost(self.schedule.grow_mem_cost.clone().as_()) .with_forbidden_floats(); let module = self @@ -88,7 +88,7 @@ impl<'a, T: Trait> ContractModule<'a, T> { .expect("On entry to the function `module` can't be `None`; qed"); let contract_module = - pwasm_utils::stack_height::inject_limiter(module, self.config.max_stack_height) + pwasm_utils::stack_height::inject_limiter(module, self.schedule.max_stack_height) .map_err(|_| Error::StackHeightInstrumentation)?; self.module = Some(contract_module); @@ -167,16 +167,16 @@ pub(super) struct PreparedContract { /// The checks are: /// /// - module doesn't define an internal memory instance, -/// - imported memory (if any) doesn't reserve more memory than permitted by the `config`, +/// - imported memory (if any) doesn't reserve more memory than permitted by the `schedule`, /// - all imported functions from the external environment matches defined by `env` module, /// /// The preprocessing includes injecting code for gas metering and metering the height of stack. pub(super) fn prepare_contract( original_code: &[u8], - config: &Config, + schedule: &Schedule<::Gas>, env: &HostFunctionSet, ) -> Result { - let mut contract_module = ContractModule::new(original_code, config)?; + let mut contract_module = ContractModule::new(original_code, schedule)?; contract_module.ensure_no_internal_memory()?; contract_module.inject_gas_metering()?; contract_module.inject_stack_height_metering()?; @@ -189,7 +189,7 @@ pub(super) fn prepare_contract( // Requested initial number of pages should not exceed the requested maximum. return Err(Error::Memory); } - (_, Some(maximum)) if maximum > config.max_memory_pages => { + (_, Some(maximum)) if maximum > schedule.max_memory_pages => { // Maximum number of pages should not exceed the configured maximum. return Err(Error::Memory); } @@ -218,7 +218,6 @@ pub(super) fn prepare_contract( mod tests { use super::*; use std::fmt; - use tests::Test; use vm::tests::MockExt; use wabt; @@ -230,9 +229,9 @@ mod tests { fn parse_and_prepare_wat(wat: &str) -> Result { let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); - let config = Config::::default(); + let schedule = Schedule::::default(); let env = ::vm::runtime::init_env(); - prepare_contract::(wasm.as_ref(), &config, &env) + prepare_contract::(wasm.as_ref(), &schedule, &env) } #[test] @@ -244,7 +243,7 @@ mod tests { #[test] fn memory() { // This test assumes that maximum page number is configured to a certain number. - assert_eq!(Config::::default().max_memory_pages, 16); + assert_eq!(Schedule::::default().max_memory_pages, 16); let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 1)))"#); assert_matches!(r, Ok(_)); diff --git a/substrate/srml/contract/src/vm/runtime.rs b/substrate/srml/contract/src/vm/runtime.rs index 3bdc9bf12a..c56953fcdb 100644 --- a/substrate/srml/contract/src/vm/runtime.rs +++ b/substrate/srml/contract/src/vm/runtime.rs @@ -16,7 +16,7 @@ //! Environment definition of the wasm smart-contract runtime. -use super::{BalanceOf, Config, CreateReceipt, Error, Ext}; +use super::{BalanceOf, Schedule, CreateReceipt, Error, Ext}; use rstd::prelude::*; use codec::{Decode, Encode}; use gas::{GasMeter, GasMeterResult}; @@ -41,7 +41,7 @@ pub(crate) struct Runtime<'a, 'data, E: Ext + 'a> { input_data: &'data [u8], output_data: &'data mut Vec, scratch_buf: Vec, - config: &'a Config, + schedule: &'a Schedule<::Gas>, memory: sandbox::Memory, gas_meter: &'a mut GasMeter, special_trap: Option, @@ -51,7 +51,7 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { ext: &'a mut E, input_data: &'data [u8], output_data: &'data mut Vec, - config: &'a Config, + schedule: &'a Schedule<::Gas>, memory: sandbox::Memory, gas_meter: &'a mut GasMeter, ) -> Self { @@ -60,7 +60,7 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { input_data, output_data, scratch_buf: Vec::new(), - config, + schedule, memory, gas_meter, special_trap: None, @@ -117,7 +117,7 @@ fn read_sandbox_memory( ptr: u32, len: u32, ) -> Result, sandbox::HostError> { - let price = (ctx.config.sandbox_data_read_cost) + let price = (ctx.schedule.sandbox_data_read_cost) .checked_mul(& as As>::sa(len)) .ok_or(sandbox::HostError)?; charge_gas(ctx.gas_meter, price)?; @@ -169,7 +169,7 @@ define_env!(init_env, , // // - amount: How much gas is used. gas(ctx, amount: u32) => { - let amount = <<::T as Trait>::Gas as As>::sa(amount); + let amount = <::Gas as As>::sa(amount); charge_gas(&mut ctx.gas_meter, amount)?; Ok(()) @@ -257,7 +257,7 @@ define_env!(init_env, , let nested_gas_limit = if gas == 0 { ctx.gas_meter.gas_left() } else { - <<::T as Trait>::Gas as As>::sa(gas) + <::Gas as As>::sa(gas) }; let ext = &mut ctx.ext; let scratch_buf = &mut ctx.scratch_buf; @@ -316,7 +316,7 @@ define_env!(init_env, , let nested_gas_limit = if gas == 0 { ctx.gas_meter.gas_left() } else { - <<::T as Trait>::Gas as As>::sa(gas) + <::Gas as As>::sa(gas) }; let ext = &mut ctx.ext; let create_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { @@ -339,8 +339,8 @@ define_env!(init_env, , // Save a data buffer as a result of the execution, terminate the execution and return a // successful result to the caller. ext_return(ctx, data_ptr: u32, data_len: u32) => { - let data_len_in_gas = <<::T as Trait>::Gas as As>::sa(data_len as u64); - let price = (ctx.config.return_data_per_byte_cost) + let data_len_in_gas = <::Gas as As>::sa(data_len as u64); + let price = (ctx.schedule.return_data_per_byte_cost) .checked_mul(&data_len_in_gas) .ok_or(sandbox::HostError)?; @@ -382,7 +382,7 @@ define_env!(init_env, , // Finally, perform the write. write_sandbox_memory( - ctx.config.sandbox_data_write_cost, + ctx.schedule.sandbox_data_write_cost, ctx.gas_meter, &ctx.memory, dest_ptr, @@ -414,7 +414,7 @@ define_env!(init_env, , // Finally, perform the write. write_sandbox_memory( - ctx.config.sandbox_data_write_cost, + ctx.schedule.sandbox_data_write_cost, ctx.gas_meter, &ctx.memory, dest_ptr, From 037f9dde1087e8fe3ea944344782ca24ce1f6b88 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Mon, 12 Nov 2018 21:18:06 +0100 Subject: [PATCH 20/26] docs: Extends #999. Remove disused package readmes. Rename to sr-metadata. Fix Readme Rustdoc names (#1016) * docs: Remove safe-mix since is no longer local dependency * docs: Fix existing packages link. Still only includes Substrate Core * docs: Remove empty package Readmes. Remove old docs links. Rename to Readme * docs: Remove link to old docs * misc: Merge latest from master. Renaem to sr-metadata. Fix list of RustDoc package names * Rename substrate-metadata to sr-metadata, since it is in the "srml" subdirectory * Change example to use package name that opens all packages in RustDocs * Fix list of packages names that are available to open in RustDocs * fix typo * fix ordering of CLI options and add missing backslash --- substrate/Cargo.lock | 492 +++++++++--------- substrate/README.adoc | 48 +- substrate/core/cli/README.adoc | 7 - substrate/core/cli/src/lib.rs | 2 - substrate/core/client/README.adoc | 13 - substrate/core/client/db/README.adoc | 13 - substrate/core/client/db/src/lib.rs | 3 - substrate/core/client/src/lib.rs | 2 - substrate/core/consensus/common/README.adoc | 12 - substrate/core/consensus/common/src/lib.rs | 4 +- substrate/core/consensus/rhd/README.adoc | 12 - substrate/core/consensus/rhd/src/lib.rs | 2 - substrate/core/executor/README.adoc | 13 - substrate/core/executor/src/lib.rs | 2 - substrate/core/finality-grandpa/README.adoc | 12 - substrate/core/finality-grandpa/src/lib.rs | 2 - substrate/core/keyring/README.adoc | 13 - substrate/core/keyring/src/lib.rs | 2 - substrate/core/keystore/README.adoc | 13 - substrate/core/keystore/src/lib.rs | 2 - substrate/core/network-libp2p/README.adoc | 13 - substrate/core/network-libp2p/src/lib.rs | 4 +- substrate/core/network/README.adoc | 13 - substrate/core/network/src/lib.rs | 2 - substrate/core/primitives/README.adoc | 13 - substrate/core/primitives/src/lib.rs | 2 - substrate/core/rpc-servers/README.adoc | 14 - substrate/core/rpc-servers/src/lib.rs | 2 - substrate/core/rpc/README.adoc | 13 - substrate/core/rpc/src/lib.rs | 2 - substrate/core/serializer/README.adoc | 14 - substrate/core/serializer/src/lib.rs | 2 - substrate/core/service/README.adoc | 14 - substrate/core/service/src/lib.rs | 2 - substrate/core/sr-api/README.adoc | 12 - substrate/core/sr-api/src/lib.rs | 2 - substrate/core/sr-io/README.adoc | 13 - substrate/core/sr-io/src/lib.rs | 2 - substrate/core/sr-primitives/README.adoc | 12 - substrate/core/sr-primitives/src/lib.rs | 2 - substrate/core/sr-sandbox/README.adoc | 13 - substrate/core/sr-sandbox/src/lib.rs | 5 +- substrate/core/sr-std/README.adoc | 14 - substrate/core/sr-std/src/lib.rs | 2 - substrate/core/sr-version/README.adoc | 13 - substrate/core/sr-version/src/lib.rs | 2 - substrate/core/state-db/README.adoc | 13 - substrate/core/state-db/src/lib.rs | 3 - substrate/core/state-machine/README.adoc | 13 - substrate/core/state-machine/src/lib.rs | 2 - substrate/core/telemetry/README.adoc | 13 - substrate/core/telemetry/src/lib.rs | 2 - substrate/core/test-client/README.adoc | 13 - substrate/core/test-client/src/lib.rs | 2 - substrate/core/test-runtime/README.adoc | 13 - substrate/core/test-runtime/src/lib.rs | 2 - substrate/core/test-runtime/wasm/Cargo.lock | 22 +- .../substrate_test_runtime.compact.wasm | Bin 44864 -> 44927 bytes substrate/core/transaction-pool/README.adoc | 13 - .../core/transaction-pool/graph/README.adoc | 13 - .../core/transaction-pool/graph/src/lib.rs | 2 - substrate/core/transaction-pool/src/lib.rs | 2 - substrate/core/trie/README.adoc | 12 - substrate/core/trie/src/lib.rs | 2 - substrate/doc/packages/misc.adoc | 8 - substrate/doc/packages/packages.adoc | 4 - substrate/doc/packages/substrate.adoc | 66 --- substrate/node/runtime/wasm/Cargo.lock | 22 +- .../release/node_runtime.compact.wasm | Bin 619713 -> 620632 bytes substrate/node/src/main.rs | 2 +- substrate/srml/README.adoc | 2 - substrate/srml/balances/src/lib.rs | 8 +- .../contract/{COMPLEXITY.md => README.md} | 2 + substrate/srml/metadata/Cargo.toml | 2 +- substrate/srml/metadata/README.adoc | 13 - substrate/srml/support/Cargo.toml | 4 +- substrate/srml/support/README.adoc | 14 - substrate/srml/support/src/dispatch.rs | 2 +- substrate/srml/support/src/event.rs | 2 +- substrate/srml/support/src/lib.rs | 4 +- substrate/srml/support/src/metadata.rs | 4 +- .../srml/support/src/storage/generator.rs | 2 +- substrate/srml/timestamp/src/lib.rs | 1 - 83 files changed, 320 insertions(+), 855 deletions(-) delete mode 100644 substrate/core/client/README.adoc delete mode 100644 substrate/core/client/db/README.adoc delete mode 100644 substrate/core/consensus/common/README.adoc delete mode 100644 substrate/core/consensus/rhd/README.adoc delete mode 100644 substrate/core/executor/README.adoc delete mode 100644 substrate/core/finality-grandpa/README.adoc delete mode 100644 substrate/core/keyring/README.adoc delete mode 100644 substrate/core/keystore/README.adoc delete mode 100644 substrate/core/network-libp2p/README.adoc delete mode 100644 substrate/core/network/README.adoc delete mode 100644 substrate/core/primitives/README.adoc delete mode 100644 substrate/core/rpc-servers/README.adoc delete mode 100644 substrate/core/rpc/README.adoc delete mode 100644 substrate/core/serializer/README.adoc delete mode 100644 substrate/core/service/README.adoc delete mode 100644 substrate/core/sr-api/README.adoc delete mode 100644 substrate/core/sr-io/README.adoc delete mode 100644 substrate/core/sr-primitives/README.adoc delete mode 100644 substrate/core/sr-sandbox/README.adoc delete mode 100644 substrate/core/sr-std/README.adoc delete mode 100644 substrate/core/sr-version/README.adoc delete mode 100644 substrate/core/state-db/README.adoc delete mode 100644 substrate/core/state-machine/README.adoc delete mode 100644 substrate/core/telemetry/README.adoc delete mode 100644 substrate/core/test-client/README.adoc delete mode 100644 substrate/core/test-runtime/README.adoc delete mode 100644 substrate/core/transaction-pool/README.adoc delete mode 100644 substrate/core/transaction-pool/graph/README.adoc delete mode 100644 substrate/core/trie/README.adoc delete mode 100644 substrate/doc/packages/misc.adoc delete mode 100644 substrate/doc/packages/packages.adoc delete mode 100644 substrate/doc/packages/substrate.adoc rename substrate/srml/contract/{COMPLEXITY.md => README.md} (99%) delete mode 100644 substrate/srml/metadata/README.adoc delete mode 100644 substrate/srml/support/README.adoc diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index cab6452706..c52e994004 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -31,23 +31,23 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "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#a7c0bd6944902b1c9fb2bcf4f8fe1412c824b5b9" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.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-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -117,7 +117,7 @@ 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.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -142,21 +142,12 @@ name = "base58" version = "0.1.0" source = "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.6 (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.6 (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)", ] @@ -165,7 +156,7 @@ name = "base64" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (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)", ] @@ -174,7 +165,7 @@ name = "bigint" version = "4.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.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.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -241,7 +232,7 @@ source = "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]] @@ -249,7 +240,7 @@ name = "bytes" version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (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)", ] @@ -265,7 +256,7 @@ 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]] @@ -356,8 +347,8 @@ dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "criterion-plot 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "criterion-stats 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "isatty 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -372,7 +363,7 @@ name = "criterion-plot" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "cast 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -418,7 +409,7 @@ 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)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -432,7 +423,7 @@ version = "0.5.2" 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.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -444,7 +435,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)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -503,7 +494,7 @@ name = "curve25519-dalek" version = "0.20.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)", + "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)", @@ -560,7 +551,7 @@ 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.2 (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)", ] @@ -594,7 +585,7 @@ 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.5 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -619,7 +610,7 @@ source = "git+https://github.com/paritytech/rust-secp256k1#ccc06e7480148b723eb44 dependencies = [ "arrayvec 0.4.7 (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.5 (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)", ] @@ -639,22 +630,22 @@ dependencies = [ [[package]] name = "failure" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure_derive" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (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)", - "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.16 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -676,7 +667,7 @@ version = "0.2.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.5 (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)", @@ -684,10 +675,10 @@ dependencies = [ [[package]] name = "fixed-hash" -version = "0.3.0-beta.3" +version = "0.3.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)", + "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.5.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -788,10 +779,10 @@ name = "globset" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.8 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.1.0 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -800,16 +791,16 @@ name = "h2" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (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.10 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -889,10 +880,10 @@ dependencies = [ [[package]] name = "hyper" -version = "0.10.13" +version = "0.10.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", @@ -907,7 +898,7 @@ dependencies = [ [[package]] name = "hyper" -version = "0.12.12" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -918,14 +909,15 @@ dependencies = [ "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)", "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", "time 0.1.40 (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.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)", "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)", ] @@ -942,7 +934,7 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -969,7 +961,7 @@ name = "isatty" version = "0.1.9" 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)", "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -996,10 +988,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "jsonrpc-core" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" +source = "git+https://github.com/paritytech/jsonrpc.git#a39139f92e7c92bddbd67372c556aad110f02e89" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1008,12 +1000,12 @@ dependencies = [ [[package]] name = "jsonrpc-http-server" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" +source = "git+https://github.com/paritytech/jsonrpc.git#a39139f92e7c92bddbd67372c556aad110f02e89" dependencies = [ - "hyper 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.13 (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.5 (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)", "unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1021,7 +1013,7 @@ dependencies = [ [[package]] name = "jsonrpc-macros" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" +source = "git+https://github.com/paritytech/jsonrpc.git#a39139f92e7c92bddbd67372c556aad110f02e89" dependencies = [ "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-pubsub 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", @@ -1031,23 +1023,23 @@ dependencies = [ [[package]] name = "jsonrpc-pubsub" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" +source = "git+https://github.com/paritytech/jsonrpc.git#a39139f92e7c92bddbd67372c556aad110f02e89" dependencies = [ "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.5 (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.6.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-server-utils" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" +source = "git+https://github.com/paritytech/jsonrpc.git#a39139f92e7c92bddbd67372c556aad110f02e89" dependencies = [ "bytes 0.4.10 (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.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", @@ -1057,12 +1049,12 @@ dependencies = [ [[package]] name = "jsonrpc-ws-server" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" +source = "git+https://github.com/paritytech/jsonrpc.git#a39139f92e7c92bddbd67372c556aad110f02e89" dependencies = [ "error-chain 0.12.0 (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.5 (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.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)", @@ -1186,7 +1178,7 @@ dependencies = [ "stdweb 0.1.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-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1198,17 +1190,17 @@ dependencies = [ "bytes 0.4.10 (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)", - "log 0.4.5 (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.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.2 (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=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "smallvec 0.6.5 (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.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-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)", ] @@ -1220,10 +1212,10 @@ source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371 dependencies = [ "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.5 (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)", "tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1232,18 +1224,18 @@ version = "0.1.0" source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.6 (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.10 (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)", "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", - "log 0.4.5 (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)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.5 (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.9 (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)", ] @@ -1257,12 +1249,12 @@ dependencies = [ "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.5 (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)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.2 (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.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-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)", @@ -1283,15 +1275,15 @@ dependencies = [ "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.5 (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)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.2 (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.5 (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.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-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)", ] @@ -1305,10 +1297,10 @@ dependencies = [ "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)", "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", - "log 0.4.5 (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.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.9 (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)", ] @@ -1336,13 +1328,13 @@ dependencies = [ "bytes 0.4.10 (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.5 (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)", "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.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.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-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)", ] @@ -1355,9 +1347,9 @@ dependencies = [ "aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)", "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.5 (registry+https://github.com/rust-lang/crates.io-index)", + "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.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1369,12 +1361,12 @@ dependencies = [ "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.5 (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)", - "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.2 (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.9 (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)", ] @@ -1392,14 +1384,14 @@ dependencies = [ "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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.1.2 (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)", "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.9 (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)", ] @@ -1411,10 +1403,10 @@ source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371 dependencies = [ "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.5 (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)", "tk-listen 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.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-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1425,7 +1417,7 @@ source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371 dependencies = [ "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.5 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", ] @@ -1436,9 +1428,9 @@ source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371 dependencies = [ "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.5 (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)", - "tokio-uds 0.2.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]] @@ -1448,11 +1440,11 @@ source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371 dependencies = [ "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.5 (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)", "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.9 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", ] @@ -1464,9 +1456,9 @@ dependencies = [ "bytes 0.4.10 (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.5 (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.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (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)", ] @@ -1499,15 +1491,15 @@ name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.5 (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.5" +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]] @@ -1535,10 +1527,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" -version = "2.1.0" +version = "2.1.1" 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)", "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1581,7 +1573,7 @@ dependencies = [ "kernel32-sys 0.2.2 (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.5 (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)", @@ -1594,7 +1586,7 @@ 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.5 (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)", ] @@ -1653,10 +1645,10 @@ source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371 dependencies = [ "bytes 0.4.10 (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.5 (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.5 (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.9 (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)", ] @@ -1675,12 +1667,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "native-tls" -version = "0.2.1" +version = "0.2.2" 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)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.14 (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)", @@ -1694,7 +1687,7 @@ 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.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1706,7 +1699,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.4 (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.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)", "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1717,7 +1710,7 @@ version = "0.1.0" dependencies = [ "exit-future 0.1.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.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "node-executor 0.1.0", "node-primitives 0.1.0", "node-runtime 0.1.0", @@ -1877,11 +1870,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "openssl" -version = "0.10.14" +version = "0.10.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.4 (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)", "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)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1937,7 +1930,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1987,7 +1980,7 @@ name = "parity-wasm" version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2109,7 +2102,7 @@ dependencies = [ [[package]] name = "protobuf" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2125,8 +2118,8 @@ name = "pwasm-utils" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2150,7 +2143,7 @@ dependencies = [ [[package]] name = "quote" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2248,11 +2241,11 @@ name = "regex" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.1.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.5.6 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2260,11 +2253,11 @@ name = "regex" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.1.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.2 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2272,7 +2265,7 @@ 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.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2280,7 +2273,7 @@ name = "regex-syntax" version = "0.6.2" 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.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2362,7 +2355,7 @@ source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371 dependencies = [ "bytes 0.4.10 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2451,8 +2444,8 @@ version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2602,7 +2595,7 @@ name = "sr-primitives" version = "0.1.0" dependencies = [ "integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", @@ -2788,6 +2781,16 @@ dependencies = [ "substrate-primitives 0.1.0", ] +[[package]] +name = "srml-metadata" +version = "0.1.0" +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)", +] + [[package]] name = "srml-session" version = "0.1.0" @@ -2843,7 +2846,7 @@ dependencies = [ "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", - "substrate-metadata 0.1.0", + "srml-metadata 0.1.0", ] [[package]] @@ -2946,10 +2949,10 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (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.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2959,12 +2962,12 @@ 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.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (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.32 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3025,7 +3028,7 @@ dependencies = [ "fdlimit 0.1.1 (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.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3053,7 +3056,7 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3077,7 +3080,7 @@ dependencies = [ "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb-rocksdb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", @@ -3139,7 +3142,7 @@ 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.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", @@ -3164,11 +3167,11 @@ name = "substrate-executor" version = "0.1.0" dependencies = [ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.6 (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)", "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)", - "log 0.4.5 (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)", @@ -3189,7 +3192,7 @@ version = "0.1.0" dependencies = [ "finality-grandpa 0.2.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.5 (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", @@ -3225,16 +3228,6 @@ dependencies = [ "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "substrate-metadata" -version = "0.1.0" -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)", -] - [[package]] name = "substrate-network" version = "0.1.0" @@ -3244,7 +3237,7 @@ 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)", "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", @@ -3271,7 +3264,7 @@ dependencies = [ "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=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", - "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.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)", "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3279,7 +3272,7 @@ dependencies = [ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (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.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-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)", ] @@ -3290,9 +3283,9 @@ version = "0.1.0" 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.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)", - "fixed-hash 0.3.0-beta.3 (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)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3307,7 +3300,7 @@ dependencies = [ "sr-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.5.0-beta.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.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3322,7 +3315,7 @@ dependencies = [ "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.5 (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)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3345,7 +3338,7 @@ dependencies = [ "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.5 (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)", "sr-primitives 0.1.0", "substrate-rpc 0.1.0", @@ -3367,7 +3360,7 @@ dependencies = [ "exit-future 0.1.2 (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.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.80 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3414,7 +3407,7 @@ name = "substrate-state-db" version = "0.1.0" dependencies = [ "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.5.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3428,7 +3421,7 @@ 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)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", "substrate-primitives 0.1.0", @@ -3442,7 +3435,7 @@ name = "substrate-telemetry" version = "0.3.0" dependencies = [ "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.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)", @@ -3470,7 +3463,7 @@ name = "substrate-test-runtime" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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)", @@ -3492,7 +3485,7 @@ dependencies = [ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "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.5 (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)", @@ -3506,7 +3499,7 @@ version = "0.1.0" 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.5 (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", @@ -3560,28 +3553,28 @@ version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (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.12" +version = "0.15.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.9 (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 = "synstructure" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (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)", + "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.16 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3590,7 +3583,7 @@ name = "sysinfo" 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.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3620,7 +3613,7 @@ name = "tempfile" version = "3.0.4" 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)", "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)", @@ -3710,9 +3703,9 @@ version = "0.2.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.5 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3726,14 +3719,14 @@ dependencies = [ "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.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (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.7 (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.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]] @@ -3743,7 +3736,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.10 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3754,12 +3747,12 @@ dependencies = [ "bytes 0.4.10 (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.5 (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.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.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)", "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3794,22 +3787,22 @@ dependencies = [ [[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.25 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 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)", + "tokio-threadpool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-io" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.10 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3820,13 +3813,13 @@ dependencies = [ "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.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3838,19 +3831,19 @@ dependencies = [ "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.16 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.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]] name = "tokio-threadpool" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.6.1 (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.5 (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.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)", @@ -3873,8 +3866,8 @@ version = "0.2.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)", - "native-tls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (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]] @@ -3884,26 +3877,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.10 (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.5 (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.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]] name = "tokio-uds" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.10 (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.5 (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.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)", ] @@ -3991,15 +3984,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ucd-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uint" -version = "0.5.0-beta.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)", + "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)", ] @@ -4085,7 +4078,7 @@ dependencies = [ [[package]] name = "utf8-ranges" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -4145,7 +4138,7 @@ version = "0.0.6" 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.5 (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)", ] @@ -4154,7 +4147,7 @@ name = "wasmi" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (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)", @@ -4167,15 +4160,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)", "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.6 (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.10 (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.13 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.1 (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.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-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)", @@ -4232,7 +4225,7 @@ name = "ws" version = "0.7.5" source = "git+https://github.com/tomusdrw/ws-rs#f12d19c4c19422fc79af28a3181f598bc07ecd1e" dependencies = [ - "byteorder 1.2.6 (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.10 (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)", @@ -4248,13 +4241,13 @@ name = "ws" version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (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.10 (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.5 (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.14 (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)", @@ -4283,23 +4276,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "yamux" version = "0.1.0" -source = "git+https://github.com/paritytech/yamux#5c0d19af3bc59a12c2e45d18798350dd00746481" +source = "git+https://github.com/paritytech/yamux#966f2730f7a32150f282eef29fd2aecb14d7b9fa" dependencies = [ "bytes 0.4.10 (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.5 (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.0 (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.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.9 (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 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.8 (registry+https://github.com/rust-lang/crates.io-index)" = "68f56c7353e5a9547cbd76ed90f7bb5ffc3ba09d4ea9bd1d8c06c8b1142eeb5a" +"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.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" @@ -4313,7 +4306,6 @@ dependencies = [ "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.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.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" @@ -4326,11 +4318,11 @@ dependencies = [ "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.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 bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ce55bd354b095246fc34caf4e9e242f5297a7fd938b090cadfea6eee614aa62" "checksum cast 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "011941fb53da1a8ac3e4132a1becc367c44fe13f630769f3143d8c66c91c6cb6" "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" -"checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3" +"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" @@ -4373,12 +4365,12 @@ dependencies = [ "checksum eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)" = "" "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.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9" -"checksum failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426" +"checksum failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6dd377bcc1b1b7ce911967e3ec24fa19c3224394ec05b54aa7b083d498341ac7" +"checksum failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "64c2d913fe8ed3b6c6518eedf4538255b989945c14c2a7d5cbff62a5e2120596" "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 finality-grandpa 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "20d8cf871510f0d57630e75f9e65f87cba29581ccab1f78666d8b2e422d0baa6" -"checksum fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" +"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" @@ -4403,10 +4395,10 @@ dependencies = [ "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.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" -"checksum hyper 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)" = "4aca412c241a2dd53af261efc7adf7736fdebd67dc0d1cc1ffdbcb9407e0e810" +"checksum hyper 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "df0caae6b71d266b91b4a83111a61d2b94ed2e2bea024c532b933dcff867e58c" +"checksum hyper 0.12.13 (registry+https://github.com/rust-lang/crates.io-index)" = "95ffee0d1d30de4313fdaaa485891ce924991d45bbc18adfc8ac5b1639e62fbb" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08173ba1e906efb6538785a8844dd496f5d34f0a2d88038e95195172fc667220" +"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" @@ -4452,11 +4444,11 @@ dependencies = [ "checksum local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1ceb20f39ff7ae42f3ff9795f3986b1daad821caaa1e1732a0944103a5a1a66" "checksum lock_api 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f" +"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.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4b3629fe9fdbff6daa6c33b90f7c08355c1aca05a3d01fa8063b822fcf185f3b" +"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" @@ -4470,7 +4462,7 @@ dependencies = [ "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.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8b0a7bd714e83db15676d31caf968ad7318e9cc35f93c85a90231c8f22867549" +"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 nix 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37e713a259ff641624b6cb20e3b12b2952313ba36b6823c0f16e6cfd9e5de17" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" @@ -4482,7 +4474,7 @@ dependencies = [ "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 opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d620c9c26834b34f039489ac0dfdb12c7ac15ccaf818350a64c9b5334a452ad7" -"checksum openssl 0.10.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6285ab297861546af7a2753593b3160bfc09f0ab9d1f5bb009e39d81a169b499" +"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" @@ -4509,13 +4501,13 @@ dependencies = [ "checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" "checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" "checksum proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "3d7b7eaaa90b4a90a932a9ea6666c95a389e424eff347f0f793979289429feee" -"checksum protobuf 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "56c363dfc36e450457f4fa05a91d8c3f0fed00fc21142b4ce2cb7b525675eaeb" +"checksum protobuf 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8e95ac45a1e122e1b62c3f23bbe51574c39d06d1c8c5a2a5676de497d0a84a34" "checksum pulldown-cmark 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8361e81576d2e02643b04950e487ec172b687180da65c731c03cf336784e6c07" "checksum pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "efd695333cfae6e9dbe2703a6d040e252b57a6fc3b9a65c712615ac042b2e0c5" "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.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" -"checksum quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dd636425967c33af890042c483632d33fa7a18f19ad1d7ea72e8998c6ef8dea5" +"checksum quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "63b5829244f52738cfee93b3a165c1911388675be000c888d2fae620dee8fa5b" "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" "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" @@ -4582,8 +4574,8 @@ dependencies = [ "checksum subtle 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" "checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" -"checksum syn 0.15.12 (registry+https://github.com/rust-lang/crates.io-index)" = "34ab9797e47d24cb76b8dc4d24ff36807018c7cc549c4cba050b068be0c586b0" -"checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7" +"checksum syn 0.15.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0b78d53b5e1b6e63129140b1336877c3bddbae398c7956150396bdad0e28676c" +"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" "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" @@ -4605,15 +4597,15 @@ dependencies = [ "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.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c117b6cf86bb730aab4834f10df96e4dd586eff2c3c27d3781348da49e255bde" -"checksum tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5cbe4ca6e71cb0b62a66e4e6f53a8c06a6eefe46cc5f665ad6f274c9906f135" -"checksum tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "8b8a85fffbec3c5ab1ab62324570230dcd37ee5996a7859da5caf7b9d45e3e8c" +"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.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bbd8a8b911301c60cbfaa2a6588fb210e5c1038375b8bdecc47aa09a94c3c05f" +"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.2 (registry+https://github.com/rust-lang/crates.io-index)" = "22e3aa6d1fcc19e635418dc0a30ab5bd65d347973d6f43f1a37bf8d9d1335fc9" +"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 trie-bench 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" @@ -4624,8 +4616,8 @@ dependencies = [ "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.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" +"checksum ucd-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d0f8bfa9ff0cadcd210129ad9d2c5f145c13e9ced3d3e5d948a6213487d52444" +"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.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" @@ -4637,7 +4629,7 @@ dependencies = [ "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd70f467df6810094968e2fce0ee1bd0e87157aceb026a8c083bcf5e25b9efe4" +"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 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "93fb2d57fbc535fcd45548c99b141d2d960995daaf04b864c4d9fe1ea011c819" diff --git a/substrate/README.adoc b/substrate/README.adoc index dc51bee6af..d832b58313 100644 --- a/substrate/README.adoc +++ b/substrate/README.adoc @@ -227,18 +227,36 @@ Or you can join the BBQ Birch Testnet with: [source, shell] cargo run -If you want to see the multi-node consensus algorithm in action locally, then -you can create a local testnet. You'll need two terminals open. In one, run: +Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`. + +If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain specification that have been endowed with a testnet DOTs. We'll give each node a name and expose them so they are listed on [Telemetry](https://telemetry.polkadot.io/#/Local%20Testnet). You'll need two terminals windows open. + +We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The Bootnode ID of her node is `QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN`, which is generated from the `--node-key` value that we specify below: [source, shell] -cargo run -- --chain=local --validator --key Alice -d /tmp/alice --node-key 0000000000000000000000000000000000000000000000000000000000000001 +cargo run -- \ + --base-path /tmp/alice \ + --chain=local \ + --key Alice \ + --name "ALICE" \ + --node-key 0000000000000000000000000000000000000000000000000000000000000001 \ + --telemetry-url ws://telemetry.polkadot.io:1024 \ + --validator -and in the other, run: +In the second terminal, we'll run the following to start Bob's substrate node on a different TCP port of 30334, and with his chain database stored locally at `/tmp/bob`. We'll specify a value for the `--bootnodes` option that will connect his node to Alice's Bootnode ID on TCP port 30333: [source, shell] -cargo run -- --chain=local --validator --key Bob -d /tmp/bob --port 30334 --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN +cargo run -- \ + --base-path /tmp/bob \ + --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \ + --chain=local \ + --key Bob \ + --name "BOB" \ + --port 30334 \ + --telemetry-url ws://telemetry.polkadot.io:1024 \ + --validator -include::doc/packages/packages.adoc[] +Additional Substate CLI usage options are available and may be shown by running `cargo run -- --help`. == Documentation @@ -251,13 +269,16 @@ You can generate documentation for a Substrate Rust package and have it automati cargo doc --package --open ``` -Replacing `` with one of the following (i.e. `cargo doc --package node-cli --open`): +Replacing `` with one of the following (i.e. `cargo doc --package substrate --open`): +* All Substrate Packages +[source, shell] +substrate * Substrate Core [source, shell] -substrate, substrate-bft, substrate-cli, substrate-client, substrate-client-db, -substrate-executor, substrate-finality-grandpa, substrate-keyring, substrate-keystore, -substrate-metadata, substrate-misbehavior-check, substrate-network, +substrate, substrate-cli, substrate-client, substrate-client-db, +substrate-consensus-common, substrate-consensus-rhd, +substrate-executor, substrate-finality-grandpa, substrate-keyring, substrate-keystore, substrate-network, substrate-network-libp2p, substrate-primitives, substrate-rpc, substrate-rpc-servers, substrate-serializer, substrate-service, substrate-service-test, substrate-state-db, substrate-state-machine, substrate-telemetry, substrate-test-client, @@ -268,17 +289,16 @@ substrate-trie sr-api, sr-io, sr-primitives, sr-sandbox, sr-std, sr-version * Substrate Runtime Module Library (SRML) [source, shell] -srml-balances, srml-consensus, srml-contract, srml-council, srml-democracy, srml-example, -srml-executive, srml-session, srml-staking, srml-support, srml-system, srml-timestamp, +srml-assets, srml-balances, srml-consensus, srml-contract, srml-council, srml-democracy, srml-example, +srml-executive, srml-metadata, srml-session, srml-staking, srml-support, srml-system, srml-timestamp, srml-treasury * Node [source, shell] -node-cli, node-consensus, node-executor, node-network, node-primitives, node-runtime, node-service +node-cli, node-consensus, node-executor, node-network, node-primitives, node-runtime * Subkey [source, shell] subkey - === Contributing to documentation for Substrate packages https://doc.rust-lang.org/1.9.0/book/documentation.html[Document source code] for Substrate packages by annotating the source code with documentation comments. diff --git a/substrate/core/cli/README.adoc b/substrate/core/cli/README.adoc index f847930dab..fc58908fdf 100644 --- a/substrate/core/cli/README.adoc +++ b/substrate/core/cli/README.adoc @@ -1,13 +1,6 @@ = Substrate CLI -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description Substrate CLI library include::doc/shell-completion.adoc[] diff --git a/substrate/core/cli/src/lib.rs b/substrate/core/cli/src/lib.rs index 59d653bfed..5b82133d80 100644 --- a/substrate/core/cli/src/lib.rs +++ b/substrate/core/cli/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate CLI library. -// end::description[] #![warn(missing_docs)] #![warn(unused_extern_crates)] diff --git a/substrate/core/client/README.adoc b/substrate/core/client/README.adoc deleted file mode 100644 index d644b1d039..0000000000 --- a/substrate/core/client/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Client - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/client/db/README.adoc b/substrate/core/client/db/README.adoc deleted file mode 100644 index c0b123392c..0000000000 --- a/substrate/core/client/db/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Client DB - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/client/db/src/lib.rs b/substrate/core/client/db/src/lib.rs index 1e37b61cfd..60196e4a32 100644 --- a/substrate/core/client/db/src/lib.rs +++ b/substrate/core/client/db/src/lib.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Client backend that uses RocksDB database as storage. //! //! # Canonicality vs. Finality @@ -24,8 +23,6 @@ //! having discarded heavy state that will allow a chain reorganization. //! //! Finality implies canonicality but not vice-versa. -//! -// end::description[] extern crate substrate_client as client; extern crate kvdb_rocksdb; diff --git a/substrate/core/client/src/lib.rs b/substrate/core/client/src/lib.rs index a033277905..255b068015 100644 --- a/substrate/core/client/src/lib.rs +++ b/substrate/core/client/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate Client and associated logic. -// end::description[] #![warn(missing_docs)] #![recursion_limit="128"] diff --git a/substrate/core/consensus/common/README.adoc b/substrate/core/consensus/common/README.adoc deleted file mode 100644 index d8f9e1daf2..0000000000 --- a/substrate/core/consensus/common/README.adoc +++ /dev/null @@ -1,12 +0,0 @@ -= Consensus Common - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/consensus/common/src/lib.rs b/substrate/core/consensus/common/src/lib.rs index 12d5cfa70d..4758a4abfe 100644 --- a/substrate/core/consensus/common/src/lib.rs +++ b/substrate/core/consensus/common/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate Consensus Common. If not, see . -// tag::description[] -//! Consensus basics and common features -// end::description[] +//! Tracks offline validators. // This provides "unused" building blocks to other crates #![allow(dead_code)] diff --git a/substrate/core/consensus/rhd/README.adoc b/substrate/core/consensus/rhd/README.adoc deleted file mode 100644 index ff7bde1714..0000000000 --- a/substrate/core/consensus/rhd/README.adoc +++ /dev/null @@ -1,12 +0,0 @@ -= Consensus Rhododendron (RHD) - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/consensus/rhd/src/lib.rs b/substrate/core/consensus/rhd/src/lib.rs index b99ea4a24c..4995592aaf 100644 --- a/substrate/core/consensus/rhd/src/lib.rs +++ b/substrate/core/consensus/rhd/src/lib.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! BFT Agreement based on a rotating proposer in different rounds. //! //! Where this crate refers to input stream, should never logically conclude. @@ -30,7 +29,6 @@ //! conclude without having witnessed the conclusion. //! In general, this future should be pre-empted by the import of a justification //! set for this block height. -// end::description[] #![cfg(feature="rhd")] // FIXME: doesn't compile - https://github.com/paritytech/substrate/issues/1020 diff --git a/substrate/core/executor/README.adoc b/substrate/core/executor/README.adoc deleted file mode 100644 index 6a0ee23565..0000000000 --- a/substrate/core/executor/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Executor - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/executor/src/lib.rs b/substrate/core/executor/src/lib.rs index 64442b7f8e..5f05b33f53 100644 --- a/substrate/core/executor/src/lib.rs +++ b/substrate/core/executor/src/lib.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Temporary crate for contracts implementations. //! //! This will be replaced with WASM contracts stored on-chain. @@ -25,7 +24,6 @@ //! - init_block(PrevBlock?) -> InProgressBlock //! - add_transaction(InProgressBlock) -> InProgressBlock //! It is left as is for now as it might be removed before this is ever done. -// end::description[] #![warn(missing_docs)] #![recursion_limit="128"] diff --git a/substrate/core/finality-grandpa/README.adoc b/substrate/core/finality-grandpa/README.adoc deleted file mode 100644 index 5338cf9e8c..0000000000 --- a/substrate/core/finality-grandpa/README.adoc +++ /dev/null @@ -1,12 +0,0 @@ -= Finality GRANDPA (aka SHAFT) - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/finality-grandpa/src/lib.rs b/substrate/core/finality-grandpa/src/lib.rs index d3fc1bf1ee..97c93acfe3 100644 --- a/substrate/core/finality-grandpa/src/lib.rs +++ b/substrate/core/finality-grandpa/src/lib.rs @@ -14,11 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Integration of the GRANDPA finality gadget into substrate. //! //! This is a long-running future that produces finality notifications. -// end::description[] extern crate finality_grandpa as grandpa; extern crate futures; diff --git a/substrate/core/keyring/README.adoc b/substrate/core/keyring/README.adoc deleted file mode 100644 index 0118fe883d..0000000000 --- a/substrate/core/keyring/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Keyring - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/keyring/src/lib.rs b/substrate/core/keyring/src/lib.rs index 6ba79d146c..d2970c54c6 100644 --- a/substrate/core/keyring/src/lib.rs +++ b/substrate/core/keyring/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Support code for the runtime. A set of test accounts. -// end::description[] #[macro_use] extern crate hex_literal; #[macro_use] extern crate lazy_static; diff --git a/substrate/core/keystore/README.adoc b/substrate/core/keystore/README.adoc deleted file mode 100644 index 5a66a882ff..0000000000 --- a/substrate/core/keystore/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Keystore - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/keystore/src/lib.rs b/substrate/core/keystore/src/lib.rs index 5a87fbcd7e..6d8e3b3ae9 100644 --- a/substrate/core/keystore/src/lib.rs +++ b/substrate/core/keystore/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Keystore (and session key management) for ed25519 based chains like Polkadot. -// end::description[] extern crate substrate_primitives; extern crate parity_crypto as crypto; diff --git a/substrate/core/network-libp2p/README.adoc b/substrate/core/network-libp2p/README.adoc deleted file mode 100644 index 2f340aa397..0000000000 --- a/substrate/core/network-libp2p/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Network libp2p - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/network-libp2p/src/lib.rs b/substrate/core/network-libp2p/src/lib.rs index 4852f65d84..2bf6a0d490 100644 --- a/substrate/core/network-libp2p/src/lib.rs +++ b/substrate/core/network-libp2p/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] -//! TODO: Missing doc -// end::description[] +//! Substrate libp2p implementation of the ethcore network library #![recursion_limit = "128"] diff --git a/substrate/core/network/README.adoc b/substrate/core/network/README.adoc deleted file mode 100644 index ac29b0cd0b..0000000000 --- a/substrate/core/network/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Network - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/network/src/lib.rs b/substrate/core/network/src/lib.rs index 4a441dcc6f..fa9232970f 100644 --- a/substrate/core/network/src/lib.rs +++ b/substrate/core/network/src/lib.rs @@ -17,10 +17,8 @@ #![warn(unused_extern_crates)] #![warn(missing_docs)] -// tag::description[] //! Substrate-specific P2P networking: synchronizing blocks, propagating BFT messages. //! Allows attachment of an optional subprotocol for chain-specific requests. -// end::description[] extern crate linked_hash_map; extern crate parking_lot; diff --git a/substrate/core/primitives/README.adoc b/substrate/core/primitives/README.adoc deleted file mode 100644 index ed98cf12ad..0000000000 --- a/substrate/core/primitives/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Primitives - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/primitives/src/lib.rs b/substrate/core/primitives/src/lib.rs index affa1c5c00..c5ddcb130d 100644 --- a/substrate/core/primitives/src/lib.rs +++ b/substrate/core/primitives/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Shareable Substrate types. -// end::description[] #![warn(missing_docs)] diff --git a/substrate/core/rpc-servers/README.adoc b/substrate/core/rpc-servers/README.adoc deleted file mode 100644 index 18840be421..0000000000 --- a/substrate/core/rpc-servers/README.adoc +++ /dev/null @@ -1,14 +0,0 @@ - -= RPC Server - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- - diff --git a/substrate/core/rpc-servers/src/lib.rs b/substrate/core/rpc-servers/src/lib.rs index faa6f2bf41..8cf763d1e1 100644 --- a/substrate/core/rpc-servers/src/lib.rs +++ b/substrate/core/rpc-servers/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate RPC servers. -// end::description[] #[warn(missing_docs)] diff --git a/substrate/core/rpc/README.adoc b/substrate/core/rpc/README.adoc deleted file mode 100644 index 5e4db49099..0000000000 --- a/substrate/core/rpc/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= RPC - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/rpc/src/lib.rs b/substrate/core/rpc/src/lib.rs index dbbc8e3a6a..cd9b50af79 100644 --- a/substrate/core/rpc/src/lib.rs +++ b/substrate/core/rpc/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate RPC interfaces. -// end::description[] #![warn(missing_docs)] diff --git a/substrate/core/serializer/README.adoc b/substrate/core/serializer/README.adoc deleted file mode 100644 index 7b780bae43..0000000000 --- a/substrate/core/serializer/README.adoc +++ /dev/null @@ -1,14 +0,0 @@ - -= Serializer - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- - diff --git a/substrate/core/serializer/src/lib.rs b/substrate/core/serializer/src/lib.rs index 2ef799ed8e..667c57eb87 100644 --- a/substrate/core/serializer/src/lib.rs +++ b/substrate/core/serializer/src/lib.rs @@ -14,12 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate customizable serde serializer. //! //! The idea is that we can later change the implementation //! to something more compact, but for now we're using JSON. -// end::description[] #![warn(missing_docs)] diff --git a/substrate/core/service/README.adoc b/substrate/core/service/README.adoc deleted file mode 100644 index 4d74c098b2..0000000000 --- a/substrate/core/service/README.adoc +++ /dev/null @@ -1,14 +0,0 @@ - -= Service - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- - diff --git a/substrate/core/service/src/lib.rs b/substrate/core/service/src/lib.rs index 6592bce75f..ec26826d83 100644 --- a/substrate/core/service/src/lib.rs +++ b/substrate/core/service/src/lib.rs @@ -14,10 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate service. Starts a thread that spins up the network, client, and extrinsic pool. //! Manages communication between them. -// end::description[] #![warn(unused_extern_crates)] diff --git a/substrate/core/sr-api/README.adoc b/substrate/core/sr-api/README.adoc deleted file mode 100644 index debd87e8eb..0000000000 --- a/substrate/core/sr-api/README.adoc +++ /dev/null @@ -1,12 +0,0 @@ -= Runtime API - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/sr-api/src/lib.rs b/substrate/core/sr-api/src/lib.rs index a80420a8d7..ee931f706e 100644 --- a/substrate/core/sr-api/src/lib.rs +++ b/substrate/core/sr-api/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! API's for interfacing with the runtime via native/wasm. -// end::description[] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/sr-io/README.adoc b/substrate/core/sr-io/README.adoc deleted file mode 100644 index c035be1461..0000000000 --- a/substrate/core/sr-io/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Runtime io - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/sr-io/src/lib.rs b/substrate/core/sr-io/src/lib.rs index 12e09945d2..3394265a84 100644 --- a/substrate/core/sr-io/src/lib.rs +++ b/substrate/core/sr-io/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! This is part of the Substrate runtime. -// end::description[] #![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), feature(lang_items))] diff --git a/substrate/core/sr-primitives/README.adoc b/substrate/core/sr-primitives/README.adoc deleted file mode 100644 index 0e9d636111..0000000000 --- a/substrate/core/sr-primitives/README.adoc +++ /dev/null @@ -1,12 +0,0 @@ -= Runtime Primitives - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index a8759a4890..d1cd43242a 100644 --- a/substrate/core/sr-primitives/src/lib.rs +++ b/substrate/core/sr-primitives/src/lib.rs @@ -14,10 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! System manager: Handles all of the top-level stuff; executing block/transaction, setting code //! and depositing logs. -// end::description[] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/sr-sandbox/README.adoc b/substrate/core/sr-sandbox/README.adoc deleted file mode 100644 index 61a203708c..0000000000 --- a/substrate/core/sr-sandbox/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Runtime Sandbox - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/sr-sandbox/src/lib.rs b/substrate/core/sr-sandbox/src/lib.rs index 6ed3243dc8..09af04747d 100755 --- a/substrate/core/sr-sandbox/src/lib.rs +++ b/substrate/core/sr-sandbox/src/lib.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! This crate provides means to instantiate and execute wasm modules. //! //! It works even when the user of this library executes from @@ -30,12 +29,10 @@ //! When this crate is used in the `std` environment all these functions are implemented by directly //! calling the wasm VM. //! -//! Example of possible use-cases for this library are the following: +//! Examples of possible use-cases for this library are not limited to the following: //! //! - implementing smart-contract runtimes that use wasm for contract code //! - executing a wasm substrate runtime inside of a wasm parachain -//! - etc -// end::description[] #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/sr-std/README.adoc b/substrate/core/sr-std/README.adoc deleted file mode 100644 index 36ea8d99c2..0000000000 --- a/substrate/core/sr-std/README.adoc +++ /dev/null @@ -1,14 +0,0 @@ - -= Runtime std - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- - diff --git a/substrate/core/sr-std/src/lib.rs b/substrate/core/sr-std/src/lib.rs index 87c3965646..416c91bc7f 100644 --- a/substrate/core/sr-std/src/lib.rs +++ b/substrate/core/sr-std/src/lib.rs @@ -14,10 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Lowest-abstraction level for the Substrate runtime: just exports useful primitives from std //! or core/alloc to be used with any code that depends on the runtime. -// end::description[] #![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), feature(core_intrinsics))] diff --git a/substrate/core/sr-version/README.adoc b/substrate/core/sr-version/README.adoc deleted file mode 100644 index 28db6c615d..0000000000 --- a/substrate/core/sr-version/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Runtime Version - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/sr-version/src/lib.rs b/substrate/core/sr-version/src/lib.rs index 6f91692b82..b34abe901b 100644 --- a/substrate/core/sr-version/src/lib.rs +++ b/substrate/core/sr-version/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Version module for the Substrate runtime; Provides a function that returns the runtime version. -// end::description[] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/state-db/README.adoc b/substrate/core/state-db/README.adoc deleted file mode 100644 index f9934ed8d9..0000000000 --- a/substrate/core/state-db/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= State DB - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/state-db/src/lib.rs b/substrate/core/state-db/src/lib.rs index 261d768560..51fffa1f2d 100644 --- a/substrate/core/state-db/src/lib.rs +++ b/substrate/core/state-db/src/lib.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! State database maintenance. Handles canonicalization and pruning in the database. The input to //! this module is a `ChangeSet` which is basically a list of key-value pairs (trie nodes) that //! were added or deleted during block execution. @@ -29,8 +28,6 @@ //! # Pruning. //! See `RefWindow` for pruning algorithm details. `StateDb` prunes on each canonicalization until pruning //! constraints are satisfied. -//! -// end::description[] #[macro_use] extern crate log; #[macro_use] extern crate parity_codec_derive; diff --git a/substrate/core/state-machine/README.adoc b/substrate/core/state-machine/README.adoc deleted file mode 100644 index aad08bed98..0000000000 --- a/substrate/core/state-machine/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= State Machine - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/state-machine/src/lib.rs b/substrate/core/state-machine/src/lib.rs index 9bb9110886..7b0f3690d8 100644 --- a/substrate/core/state-machine/src/lib.rs +++ b/substrate/core/state-machine/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate state machine implementation. -// end::description[] #![warn(missing_docs)] diff --git a/substrate/core/telemetry/README.adoc b/substrate/core/telemetry/README.adoc deleted file mode 100644 index 9759c5bc50..0000000000 --- a/substrate/core/telemetry/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Telemetry - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/telemetry/src/lib.rs b/substrate/core/telemetry/src/lib.rs index 8d0ddb1ac9..64e55d48b2 100644 --- a/substrate/core/telemetry/src/lib.rs +++ b/substrate/core/telemetry/src/lib.rs @@ -14,14 +14,12 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Telemetry utils. //! //! `telemetry` macro may be used anywhere in the Substrate codebase //! in order to send real-time logging information to the telemetry //! server (if there is one). We use the async drain adapter of `slog` //! so that the logging thread doesn't get held up at all. -// end::description[] extern crate parking_lot; extern crate ws; diff --git a/substrate/core/test-client/README.adoc b/substrate/core/test-client/README.adoc deleted file mode 100644 index e56c4c7f66..0000000000 --- a/substrate/core/test-client/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Test client - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/test-client/src/lib.rs b/substrate/core/test-client/src/lib.rs index 98887c2b6e..6a92a3f692 100644 --- a/substrate/core/test-client/src/lib.rs +++ b/substrate/core/test-client/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Client testing utilities. -// end::description[] #![warn(missing_docs)] diff --git a/substrate/core/test-runtime/README.adoc b/substrate/core/test-runtime/README.adoc deleted file mode 100644 index 15b3c4c4ac..0000000000 --- a/substrate/core/test-runtime/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Test runtime - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/test-runtime/src/lib.rs b/substrate/core/test-runtime/src/lib.rs index 5844ecbbb9..0a9c02d8df 100644 --- a/substrate/core/test-runtime/src/lib.rs +++ b/substrate/core/test-runtime/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! The Substrate runtime. This can be compiled with #[no_std], ready for Wasm. -// end::description[] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/test-runtime/wasm/Cargo.lock b/substrate/core/test-runtime/wasm/Cargo.lock index 9e33aaa02e..a0ececf55f 100644 --- a/substrate/core/test-runtime/wasm/Cargo.lock +++ b/substrate/core/test-runtime/wasm/Cargo.lock @@ -526,6 +526,16 @@ dependencies = [ "sr-std 0.1.0", ] +[[package]] +name = "srml-metadata" +version = "0.1.0" +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.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "srml-support" version = "0.1.0" @@ -538,7 +548,7 @@ dependencies = [ "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", - "substrate-metadata 0.1.0", + "srml-metadata 0.1.0", ] [[package]] @@ -551,16 +561,6 @@ name = "static_assertions" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "substrate-metadata" -version = "0.1.0" -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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "substrate-primitives" version = "0.1.0" diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index cb5c02bbb90c5b4248fd0a3f071a730895cdf9a3..bbac245c7b46250a9c9f4b73e8827bcfb1fc4616 100644 GIT binary patch delta 6265 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. -// tag::description[] //! Generic Transaction Pool //! //! The pool is based on dependency graph between transactions @@ -24,7 +23,6 @@ //! //! TODO [ToDr] //! - [ ] Multi-threading (getting ready transactions should not block the pool) -// end::description[] #![warn(missing_docs)] #![warn(unused_extern_crates)] diff --git a/substrate/core/transaction-pool/src/lib.rs b/substrate/core/transaction-pool/src/lib.rs index 5d31ac8fb7..44f63ed37d 100644 --- a/substrate/core/transaction-pool/src/lib.rs +++ b/substrate/core/transaction-pool/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Substrate transaction pool. -// end::description[] #![warn(missing_docs)] #![warn(unused_extern_crates)] diff --git a/substrate/core/trie/README.adoc b/substrate/core/trie/README.adoc deleted file mode 100644 index 953724ca12..0000000000 --- a/substrate/core/trie/README.adoc +++ /dev/null @@ -1,12 +0,0 @@ -= Substrate Trie - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/core/trie/src/lib.rs b/substrate/core/trie/src/lib.rs index 06598ed63b..3b9791e99a 100644 --- a/substrate/core/trie/src/lib.rs +++ b/substrate/core/trie/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -// tag::description[] //! Utility functions to interact with Substrate's Base-16 Modified Merkle Patricia tree ("trie"). -// end::description[] // TODO: no_std diff --git a/substrate/doc/packages/misc.adoc b/substrate/doc/packages/misc.adoc deleted file mode 100644 index 2081d34efc..0000000000 --- a/substrate/doc/packages/misc.adoc +++ /dev/null @@ -1,8 +0,0 @@ - -=== Misc packages - -:leveloffset: +3 - -include::../../subkey/README.adoc[] - -:leveloffset: -3 diff --git a/substrate/doc/packages/packages.adoc b/substrate/doc/packages/packages.adoc deleted file mode 100644 index aa95bb1f93..0000000000 --- a/substrate/doc/packages/packages.adoc +++ /dev/null @@ -1,4 +0,0 @@ - -include::substrate.adoc[] - -include::misc.adoc[] diff --git a/substrate/doc/packages/substrate.adoc b/substrate/doc/packages/substrate.adoc deleted file mode 100644 index 3df3366def..0000000000 --- a/substrate/doc/packages/substrate.adoc +++ /dev/null @@ -1,66 +0,0 @@ - -== Substrate Packages - -=== Substrate Core - -:leveloffset: +3 - -include::../../core/client/README.adoc[] - -include::../../core/test-client/README.adoc[] - -include::../../core/client/db/README.adoc[] - -include::../../core/state-db/README.adoc[] - -include::../../core/consensus/common/README.adoc[] - -include::../../core/consensus/rhd/README.adoc[] - -include::../../core/executor/README.adoc[] - -include::../../core/finality-grandpa/README.adoc[] - -include::../../core/transaction-pool/README.adoc[] - -include::../../core/keyring/README.adoc[] - -include::../../core/network/README.adoc[] - -include::../../core/network-libp2p/README.adoc[] - -include::../../core/rpc/README.adoc[] - -include::../../core/rpc-servers/README.adoc[] - -include::../../srml/README.adoc[] - -include::../../core/sr-api/README.adoc[] - -include::../../core/sr-io/README.adoc[] - -include::../../core/sr-primitives/README.adoc[] - -include::../../core/sr-sandbox/README.adoc[] - -include::../../core/sr-std/README.adoc[] - -include::../../core/state-machine/README.adoc[] - -include::../../core/test-runtime/README.adoc[] - -include::../../core/telemetry/README.adoc[] - -include::../../core/cli/README.adoc[] - -include::../../core/service/README.adoc[] - -include::../../core/trie/README.adoc[] - -include::../../core/keystore/README.adoc[] - -include::../../core/primitives/README.adoc[] - -include::../../core/serializer/README.adoc[] - -:leveloffset: -3 diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index 231ddef3f7..85a0109be8 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -702,6 +702,16 @@ dependencies = [ "srml-system 0.1.0", ] +[[package]] +name = "srml-metadata" +version = "0.1.0" +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.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "srml-session" version = "0.1.0" @@ -755,7 +765,7 @@ dependencies = [ "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", - "substrate-metadata 0.1.0", + "srml-metadata 0.1.0", ] [[package]] @@ -844,16 +854,6 @@ dependencies = [ "substrate-primitives 0.1.0", ] -[[package]] -name = "substrate-metadata" -version = "0.1.0" -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.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "substrate-primitives" version = "0.1.0" diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 94c8b1f3b87d8fb0a5e210df1fe498c8ac6e2fa3..aee72d47e77ac5d8faa87bf7d6c34129b68b6c47 100644 GIT binary patch delta 60941 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 b*U(97lZL;cWTh3;(4j-$(lgc(D2M+Cc`;E$ delta 59827 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 diff --git a/substrate/node/src/main.rs b/substrate/node/src/main.rs index bf5717042e..1f55cd7aab 100644 --- a/substrate/node/src/main.rs +++ b/substrate/node/src/main.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Substrate CLI +//! Substrate Node CLI #![warn(missing_docs)] diff --git a/substrate/srml/README.adoc b/substrate/srml/README.adoc index 616c12568a..81b4f216e6 100644 --- a/substrate/srml/README.adoc +++ b/substrate/srml/README.adoc @@ -2,5 +2,3 @@ = Runtime Set of libs for the substrate runtime. - -TODO: Add READMEs to packages. diff --git a/substrate/srml/balances/src/lib.rs b/substrate/srml/balances/src/lib.rs index 7fd694d98c..ba771662e4 100644 --- a/substrate/srml/balances/src/lib.rs +++ b/substrate/srml/balances/src/lib.rs @@ -14,7 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Balances: Handles balances. +//! Balances: Handles setting and retrieval of free balance, +//! retrieving total balance, reserve and unreserve balance, +//! repatriating a reserved balance to a beneficiary account that exists, +//! transfering a balance between accounts (when not reserved), +//! slashing an account balance, account removal, rewards, +//! lookup of an index to reclaim an account (when not balance not reserved), +//! increasing total stake. #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/srml/contract/COMPLEXITY.md b/substrate/srml/contract/README.md similarity index 99% rename from substrate/srml/contract/COMPLEXITY.md rename to substrate/srml/contract/README.md index a6f1c3dca7..5673758cc7 100644 --- a/substrate/srml/contract/COMPLEXITY.md +++ b/substrate/srml/contract/README.md @@ -1,3 +1,5 @@ +# Complexity + This analysis is on the computing and memory complexity of specific procedures. It provides a rough estimate of operations performed in general and especially focusing on DB reads and writes. It is also an attempt to estimate the memory consumption at its peak. The primary goal is to come up with decent pricing for functions that can be invoked by a user (via extrinsics) or by untrusted code that prevents DoS attacks. diff --git a/substrate/srml/metadata/Cargo.toml b/substrate/srml/metadata/Cargo.toml index 2e113ab6f0..24f0a21b33 100644 --- a/substrate/srml/metadata/Cargo.toml +++ b/substrate/srml/metadata/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "substrate-metadata" +name = "srml-metadata" version = "0.1.0" authors = ["Parity Technologies "] diff --git a/substrate/srml/metadata/README.adoc b/substrate/srml/metadata/README.adoc deleted file mode 100644 index 8f4939087e..0000000000 --- a/substrate/srml/metadata/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= Substrate BFT - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- diff --git a/substrate/srml/support/Cargo.toml b/substrate/srml/support/Cargo.toml index f1254a538d..a2370010d8 100644 --- a/substrate/srml/support/Cargo.toml +++ b/substrate/srml/support/Cargo.toml @@ -8,7 +8,7 @@ hex-literal = { version = "0.1.0", optional = true } serde = { version = "1.0", default-features = false } serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } -substrate-metadata = { path = "../metadata", default-features = false } +srml-metadata = { path = "../metadata", default-features = false } sr-std = { path = "../../core/sr-std", default-features = false } sr-io = { path = "../../core/sr-io", default-features = false } sr-primitives = { path = "../../core/sr-primitives", default-features = false } @@ -28,7 +28,7 @@ std = [ "parity-codec/std", "sr-std/std", "sr-primitives/std", - "substrate-metadata/std", + "srml-metadata/std", ] nightly = [] strict = [] diff --git a/substrate/srml/support/README.adoc b/substrate/srml/support/README.adoc deleted file mode 100644 index 699235e5ae..0000000000 --- a/substrate/srml/support/README.adoc +++ /dev/null @@ -1,14 +0,0 @@ - -= Runtime Support - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- - diff --git a/substrate/srml/support/src/dispatch.rs b/substrate/srml/support/src/dispatch.rs index 24ba2a9c75..08d73d59e4 100644 --- a/substrate/srml/support/src/dispatch.rs +++ b/substrate/srml/support/src/dispatch.rs @@ -21,7 +21,7 @@ pub use rstd::prelude::{Vec, Clone, Eq, PartialEq}; pub use std::fmt; pub use rstd::result; pub use codec::{Codec, Decode, Encode, Input, Output}; -pub use substrate_metadata::{ +pub use srml_metadata::{ ModuleMetadata, FunctionMetadata, DecodeDifferent, CallMetadata, FunctionArgumentMetadata, OuterDispatchMetadata, OuterDispatchCall }; diff --git a/substrate/srml/support/src/event.rs b/substrate/srml/support/src/event.rs index 02f295ab18..ddc6b7d64f 100644 --- a/substrate/srml/support/src/event.rs +++ b/substrate/srml/support/src/event.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -pub use substrate_metadata::{EventMetadata, DecodeDifferent, OuterEventMetadata, FnEncode}; +pub use srml_metadata::{EventMetadata, DecodeDifferent, OuterEventMetadata, FnEncode}; /// Implement the `Event` for a module. /// diff --git a/substrate/srml/support/src/lib.rs b/substrate/srml/support/src/lib.rs index e70af960f1..20cf57ca71 100644 --- a/substrate/srml/support/src/lib.rs +++ b/substrate/srml/support/src/lib.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// tag::description[] //! Support code for the runtime. -// end::description[] #![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), feature(alloc))] @@ -29,7 +27,7 @@ pub extern crate sr_std as rstd; extern crate sr_io as runtime_io; #[doc(hidden)] pub extern crate sr_primitives as runtime_primitives; -extern crate substrate_metadata; +extern crate srml_metadata; extern crate mashup; diff --git a/substrate/srml/support/src/metadata.rs b/substrate/srml/support/src/metadata.rs index 132415d315..947c8877a6 100644 --- a/substrate/srml/support/src/metadata.rs +++ b/substrate/srml/support/src/metadata.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -pub use substrate_metadata::{ +pub use srml_metadata::{ DecodeDifferent, FnEncode, RuntimeMetadata, RuntimeModuleMetadata }; @@ -98,7 +98,7 @@ macro_rules! __runtime_modules_to_metadata { #[allow(dead_code)] mod tests { use super::*; - use substrate_metadata::{ + use srml_metadata::{ EventMetadata, OuterEventMetadata, RuntimeModuleMetadata, CallMetadata, ModuleMetadata, StorageFunctionModifier, StorageFunctionType, FunctionMetadata, StorageMetadata, StorageFunctionMetadata, OuterDispatchMetadata, OuterDispatchCall diff --git a/substrate/srml/support/src/storage/generator.rs b/substrate/srml/support/src/storage/generator.rs index 899bee44b0..31d583d6c9 100644 --- a/substrate/srml/support/src/storage/generator.rs +++ b/substrate/srml/support/src/storage/generator.rs @@ -53,7 +53,7 @@ pub use rstd::borrow::Borrow; #[doc(hidden)] pub use rstd::marker::PhantomData; -pub use substrate_metadata::{ +pub use srml_metadata::{ DecodeDifferent, StorageMetadata, StorageFunctionMetadata, StorageFunctionType, StorageFunctionModifier }; diff --git a/substrate/srml/timestamp/src/lib.rs b/substrate/srml/timestamp/src/lib.rs index 8911a7e5df..35c82b532f 100644 --- a/substrate/srml/timestamp/src/lib.rs +++ b/substrate/srml/timestamp/src/lib.rs @@ -29,7 +29,6 @@ //! ## Finalization //! //! This module should be hooked up to the finalization routine. -//! #![cfg_attr(not(feature = "std"), no_std)] From 6e3c56c135d0b3e842dd04386298b98dacccf75e Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Tue, 13 Nov 2018 14:17:14 +0300 Subject: [PATCH 21/26] Changes tries: support forks (#950) * forks support in changes trie storage * moved convert_hash to primitives * optimize ChangesTrieRootsStorage::root when anchor is canonicalized --- substrate/core/client/db/src/lib.rs | 161 ++++++++++++++---- substrate/core/client/db/src/utils.rs | 11 ++ substrate/core/client/src/cht.rs | 5 +- substrate/core/client/src/client.rs | 16 +- .../core/client/src/light/call_executor.rs | 4 +- substrate/core/client/src/light/fetcher.rs | 25 ++- substrate/core/executor/src/wasm_executor.rs | 13 +- substrate/core/primitives/src/hash.rs | 10 ++ substrate/core/primitives/src/lib.rs | 2 +- substrate/core/sr-io/with_std.rs | 4 +- substrate/core/sr-io/without_std.rs | 6 +- substrate/core/sr-primitives/src/traits.rs | 6 +- .../state-machine/src/changes_trie/build.rs | 29 ++-- .../src/changes_trie/changes_iterator.rs | 48 +++--- .../state-machine/src/changes_trie/mod.rs | 18 +- .../state-machine/src/changes_trie/prune.rs | 12 +- .../state-machine/src/changes_trie/storage.rs | 4 +- substrate/core/state-machine/src/ext.rs | 16 +- substrate/core/state-machine/src/lib.rs | 8 +- substrate/core/state-machine/src/testing.rs | 6 +- substrate/core/test-runtime/src/system.rs | 4 +- .../substrate_test_runtime.compact.wasm | Bin 44927 -> 222890 bytes substrate/node/executor/src/lib.rs | 4 +- .../release/node_runtime.compact.wasm | Bin 620632 -> 828029 bytes substrate/srml/system/src/lib.rs | 2 +- 25 files changed, 276 insertions(+), 138 deletions(-) diff --git a/substrate/core/client/db/src/lib.rs b/substrate/core/client/db/src/lib.rs index 60196e4a32..93a5352fd7 100644 --- a/substrate/core/client/db/src/lib.rs +++ b/substrate/core/client/db/src/lib.rs @@ -64,7 +64,7 @@ use hash_db::Hasher; use kvdb::{KeyValueDB, DBTransaction}; use trie::MemoryDB; use parking_lot::RwLock; -use primitives::{H256, AuthorityId, Blake2Hasher, ChangesTrieConfiguration}; +use primitives::{H256, AuthorityId, Blake2Hasher, ChangesTrieConfiguration, convert_hash}; use primitives::storage::well_known_keys; use runtime_primitives::{generic::BlockId, Justification, StorageMap, ChildrenStorageMap}; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As, NumberFor, Zero, Digest, DigestItem}; @@ -145,7 +145,7 @@ impl<'a> state_db::MetaDb for StateMetaDb<'a> { /// Block database pub struct BlockchainDb { db: Arc, - meta: RwLock, Block::Hash>>, + meta: Arc, Block::Hash>>>, leaves: RwLock>>, } @@ -156,7 +156,7 @@ impl BlockchainDb { Ok(BlockchainDb { db, leaves: RwLock::new(leaves), - meta: RwLock::new(meta), + meta: Arc::new(RwLock::new(meta)), }) } @@ -387,6 +387,7 @@ impl state_machine::Storage for DbGenesisStorage { pub struct DbChangesTrieStorage { db: Arc, + meta: Arc, Block::Hash>>>, min_blocks_to_keep: Option, _phantom: ::std::marker::PhantomData, } @@ -400,7 +401,7 @@ impl DbChangesTrieStorage { } /// Prune obsolete changes tries. - pub fn prune(&self, config: Option, tx: &mut DBTransaction, block: NumberFor) { + pub fn prune(&self, config: Option, tx: &mut DBTransaction, block_hash: Block::Hash, block_num: NumberFor) { // never prune on archive nodes let min_blocks_to_keep = match self.min_blocks_to_keep { Some(min_blocks_to_keep) => min_blocks_to_keep, @@ -418,23 +419,54 @@ impl DbChangesTrieStorage { &config, &*self, min_blocks_to_keep, - block.as_(), + &state_machine::ChangesTrieAnchorBlockId { + hash: convert_hash(&block_hash), + number: block_num.as_(), + }, |node| tx.delete(columns::CHANGES_TRIE, node.as_ref())); } } impl state_machine::ChangesTrieRootsStorage for DbChangesTrieStorage { - fn root(&self, block: u64) -> Result, String> { - Ok(read_db::(&*self.db, columns::HASH_LOOKUP, columns::HEADER, BlockId::Number(As::sa(block))) - .map_err(|err| format!("{}", err)) - .and_then(|header| match header { - Some(header) => Block::Header::decode(&mut &header[..]) - .ok_or_else(|| format!("Failed to parse header of block {}", block)) - .map(Some), - None => Ok(None) - })? - .and_then(|header| header.digest().log(DigestItem::as_changes_trie_root) - .map(|root| H256::from_slice(root.as_ref())))) + fn root(&self, anchor: &state_machine::ChangesTrieAnchorBlockId, block: u64) -> Result, String> { + // check API requirement + assert!(block <= anchor.number, "API requirement"); + + // we need to get hash of the block to resolve changes trie root + let block_id = if block <= self.meta.read().finalized_number.as_() { + // if block is finalized, we could just read canonical hash + BlockId::Number(As::sa(block)) + } else { + // the block is not finalized + let mut current_num = anchor.number; + let mut current_hash: Block::Hash = convert_hash(&anchor.hash); + let maybe_anchor_header: Block::Header = ::utils::require_header::( + &*self.db, columns::HASH_LOOKUP, columns::HEADER, BlockId::Number(As::sa(current_num)) + ).map_err(|e| e.to_string())?; + if maybe_anchor_header.hash() == current_hash { + // if anchor is canonicalized, then the block is also canonicalized + BlockId::Number(As::sa(block)) + } else { + // else (block is not finalized + anchor is not canonicalized): + // => we should find the required block hash by traversing + // back from the anchor to the block with given number + while current_num != block { + let current_header: Block::Header = ::utils::require_header::( + &*self.db, columns::HASH_LOOKUP, columns::HEADER, BlockId::Hash(current_hash) + ).map_err(|e| e.to_string())?; + + current_hash = *current_header.parent_hash(); + current_num = current_num - 1; + } + + BlockId::Hash(current_hash) + } + }; + + Ok(::utils::require_header::(&*self.db, columns::HASH_LOOKUP, columns::HEADER, block_id) + .map_err(|e| e.to_string())? + .digest().log(DigestItem::as_changes_trie_root) + .map(|root| H256::from_slice(root.as_ref()))) } } @@ -480,6 +512,7 @@ impl Backend { fn from_kvdb(db: Arc, pruning: PruningMode, canonicalization_delay: u64) -> Result { let is_archive_pruning = pruning.is_archive(); let blockchain = BlockchainDb::new(db.clone())?; + let meta = blockchain.meta.clone(); let map_e = |e: state_db::Error| ::client::error::Error::from(format!("State database error: {:?}", e)); let state_db: StateDb = StateDb::new(pruning, &StateMetaDb(&*db)).map_err(map_e)?; let storage_db = StorageDb { @@ -488,6 +521,7 @@ impl Backend { }; let changes_tries_storage = DbChangesTrieStorage { db, + meta, min_blocks_to_keep: if is_archive_pruning { None } else { Some(MIN_BLOCKS_TO_KEEP_CHANGES_TRIES_FOR) }, _phantom: Default::default(), }; @@ -567,7 +601,7 @@ impl Backend { let changes_trie_config: Option = self.state_at(BlockId::Hash(parent_hash))? .storage(well_known_keys::CHANGES_TRIE_CONFIG)? .and_then(|v| Decode::decode(&mut &*v)); - self.changes_tries_storage.prune(changes_trie_config, transaction, f_num); + self.changes_tries_storage.prune(changes_trie_config, transaction, f_hash, f_num); } Ok(()) @@ -1191,10 +1225,13 @@ mod tests { #[test] fn changes_trie_storage_works() { let backend = Backend::::new_test(1000, 100); + backend.changes_tries_storage.meta.write().finalized_number = 1000; + let check_changes = |backend: &Backend, block: u64, changes: Vec<(Vec, Vec)>| { let (changes_root, mut changes_trie_update) = prepare_changes(changes); - assert_eq!(backend.changes_tries_storage.root(block), Ok(Some(changes_root))); + let anchor = state_machine::ChangesTrieAnchorBlockId { hash: Default::default(), number: block }; + assert_eq!(backend.changes_tries_storage.root(&anchor, block), Ok(Some(changes_root))); for (key, (val, _)) in changes_trie_update.drain() { assert_eq!(backend.changes_trie_storage().unwrap().get(&key), Ok(Some(val))); @@ -1218,9 +1255,66 @@ mod tests { check_changes(&backend, 2, changes2); } + #[test] + fn changes_trie_storage_works_with_forks() { + let backend = Backend::::new_test(1000, 100); + + let changes0 = vec![(b"k0".to_vec(), b"v0".to_vec())]; + let changes1 = vec![(b"k1".to_vec(), b"v1".to_vec())]; + let changes2 = vec![(b"k2".to_vec(), b"v2".to_vec())]; + let block0 = insert_header(&backend, 0, Default::default(), changes0.clone(), Default::default()); + let block1 = insert_header(&backend, 1, block0, changes1.clone(), Default::default()); + let block2 = insert_header(&backend, 2, block1, changes2.clone(), Default::default()); + + let changes2_1_0 = vec![(b"k3".to_vec(), b"v3".to_vec())]; + let changes2_1_1 = vec![(b"k4".to_vec(), b"v4".to_vec())]; + let block2_1_0 = insert_header(&backend, 3, block2, changes2_1_0.clone(), Default::default()); + let block2_1_1 = insert_header(&backend, 4, block2_1_0, changes2_1_1.clone(), Default::default()); + + let changes2_2_0 = vec![(b"k5".to_vec(), b"v5".to_vec())]; + let changes2_2_1 = vec![(b"k6".to_vec(), b"v6".to_vec())]; + let block2_2_0 = insert_header(&backend, 3, block2, changes2_2_0.clone(), Default::default()); + let block2_2_1 = insert_header(&backend, 4, block2_2_0, changes2_2_1.clone(), Default::default()); + + // finalize block1 + backend.changes_tries_storage.meta.write().finalized_number = 1; + + // branch1: when asking for finalized block hash + let (changes1_root, _) = prepare_changes(changes1); + let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 }; + assert_eq!(backend.changes_tries_storage.root(&anchor, 1), Ok(Some(changes1_root))); + + // branch2: when asking for finalized block hash + let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_2_1, number: 4 }; + assert_eq!(backend.changes_tries_storage.root(&anchor, 1), Ok(Some(changes1_root))); + + // branch1: when asking for non-finalized block hash (search by traversal) + let (changes2_1_0_root, _) = prepare_changes(changes2_1_0); + let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 }; + assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_1_0_root))); + + // branch2: when asking for non-finalized block hash (search using canonicalized hint) + let (changes2_2_0_root, _) = prepare_changes(changes2_2_0); + let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_2_1, number: 4 }; + assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root))); + + // finalize first block of branch2 (block2_2_0) + backend.changes_tries_storage.meta.write().finalized_number = 3; + + // branch2: when asking for finalized block of this branch + assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root))); + + // branch1: when asking for finalized block of other branch + // => result is incorrect (returned for the block of branch1), but this is expected, + // because the other fork is abandoned (forked before finalized header) + let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 }; + assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root))); + } + #[test] fn changes_tries_are_pruned_on_finalization() { let mut backend = Backend::::new_test(1000, 100); + backend.changes_tries_storage.meta.write().finalized_number = 1000; backend.changes_tries_storage.min_blocks_to_keep = Some(8); let config = ChangesTrieConfiguration { digest_interval: 2, @@ -1243,26 +1337,27 @@ mod tests { let _ = insert_header(&backend, 12, block11, vec![(b"key_at_12".to_vec(), b"val_at_12".to_vec())], Default::default()); // check that roots of all tries are in the columns::CHANGES_TRIE + let anchor = state_machine::ChangesTrieAnchorBlockId { hash: Default::default(), number: 100 }; fn read_changes_trie_root(backend: &Backend, num: u64) -> H256 { backend.blockchain().header(BlockId::Number(num)).unwrap().unwrap().digest().logs().iter() .find(|i| i.as_changes_trie_root().is_some()).unwrap().as_changes_trie_root().unwrap().clone() } - let root1 = read_changes_trie_root(&backend, 1); assert_eq!(backend.changes_tries_storage.root(1).unwrap(), Some(root1)); - let root2 = read_changes_trie_root(&backend, 2); assert_eq!(backend.changes_tries_storage.root(2).unwrap(), Some(root2)); - let root3 = read_changes_trie_root(&backend, 3); assert_eq!(backend.changes_tries_storage.root(3).unwrap(), Some(root3)); - let root4 = read_changes_trie_root(&backend, 4); assert_eq!(backend.changes_tries_storage.root(4).unwrap(), Some(root4)); - let root5 = read_changes_trie_root(&backend, 5); assert_eq!(backend.changes_tries_storage.root(5).unwrap(), Some(root5)); - let root6 = read_changes_trie_root(&backend, 6); assert_eq!(backend.changes_tries_storage.root(6).unwrap(), Some(root6)); - let root7 = read_changes_trie_root(&backend, 7); assert_eq!(backend.changes_tries_storage.root(7).unwrap(), Some(root7)); - let root8 = read_changes_trie_root(&backend, 8); assert_eq!(backend.changes_tries_storage.root(8).unwrap(), Some(root8)); - let root9 = read_changes_trie_root(&backend, 9); assert_eq!(backend.changes_tries_storage.root(9).unwrap(), Some(root9)); - let root10 = read_changes_trie_root(&backend, 10); assert_eq!(backend.changes_tries_storage.root(10).unwrap(), Some(root10)); - let root11 = read_changes_trie_root(&backend, 11); assert_eq!(backend.changes_tries_storage.root(11).unwrap(), Some(root11)); - let root12 = read_changes_trie_root(&backend, 12); assert_eq!(backend.changes_tries_storage.root(12).unwrap(), Some(root12)); + let root1 = read_changes_trie_root(&backend, 1); assert_eq!(backend.changes_tries_storage.root(&anchor, 1).unwrap(), Some(root1)); + let root2 = read_changes_trie_root(&backend, 2); assert_eq!(backend.changes_tries_storage.root(&anchor, 2).unwrap(), Some(root2)); + let root3 = read_changes_trie_root(&backend, 3); assert_eq!(backend.changes_tries_storage.root(&anchor, 3).unwrap(), Some(root3)); + let root4 = read_changes_trie_root(&backend, 4); assert_eq!(backend.changes_tries_storage.root(&anchor, 4).unwrap(), Some(root4)); + let root5 = read_changes_trie_root(&backend, 5); assert_eq!(backend.changes_tries_storage.root(&anchor, 5).unwrap(), Some(root5)); + let root6 = read_changes_trie_root(&backend, 6); assert_eq!(backend.changes_tries_storage.root(&anchor, 6).unwrap(), Some(root6)); + let root7 = read_changes_trie_root(&backend, 7); assert_eq!(backend.changes_tries_storage.root(&anchor, 7).unwrap(), Some(root7)); + let root8 = read_changes_trie_root(&backend, 8); assert_eq!(backend.changes_tries_storage.root(&anchor, 8).unwrap(), Some(root8)); + let root9 = read_changes_trie_root(&backend, 9); assert_eq!(backend.changes_tries_storage.root(&anchor, 9).unwrap(), Some(root9)); + let root10 = read_changes_trie_root(&backend, 10); assert_eq!(backend.changes_tries_storage.root(&anchor, 10).unwrap(), Some(root10)); + let root11 = read_changes_trie_root(&backend, 11); assert_eq!(backend.changes_tries_storage.root(&anchor, 11).unwrap(), Some(root11)); + let root12 = read_changes_trie_root(&backend, 12); assert_eq!(backend.changes_tries_storage.root(&anchor, 12).unwrap(), Some(root12)); // now simulate finalization of block#12, causing prune of tries at #1..#4 let mut tx = DBTransaction::new(); - backend.changes_tries_storage.prune(Some(config.clone()), &mut tx, 12); + backend.changes_tries_storage.prune(Some(config.clone()), &mut tx, Default::default(), 12); backend.storage.db.write(tx).unwrap(); assert!(backend.changes_tries_storage.get(&root1).unwrap().is_none()); assert!(backend.changes_tries_storage.get(&root2).unwrap().is_none()); @@ -1275,7 +1370,7 @@ mod tests { // now simulate finalization of block#16, causing prune of tries at #5..#8 let mut tx = DBTransaction::new(); - backend.changes_tries_storage.prune(Some(config.clone()), &mut tx, 16); + backend.changes_tries_storage.prune(Some(config.clone()), &mut tx, Default::default(), 16); backend.storage.db.write(tx).unwrap(); assert!(backend.changes_tries_storage.get(&root5).unwrap().is_none()); assert!(backend.changes_tries_storage.get(&root6).unwrap().is_none()); @@ -1286,7 +1381,7 @@ mod tests { // => no changes tries are pruned, because we never prune in archive mode backend.changes_tries_storage.min_blocks_to_keep = None; let mut tx = DBTransaction::new(); - backend.changes_tries_storage.prune(Some(config), &mut tx, 20); + backend.changes_tries_storage.prune(Some(config), &mut tx, Default::default(), 20); backend.storage.db.write(tx).unwrap(); assert!(backend.changes_tries_storage.get(&root9).unwrap().is_some()); assert!(backend.changes_tries_storage.get(&root10).unwrap().is_some()); diff --git a/substrate/core/client/db/src/utils.rs b/substrate/core/client/db/src/utils.rs index f7b81845e8..5caebd7e72 100644 --- a/substrate/core/client/db/src/utils.rs +++ b/substrate/core/client/db/src/utils.rs @@ -187,6 +187,17 @@ pub fn read_header( } } +/// Required header from the database. +pub fn require_header( + db: &KeyValueDB, + col_index: Option, + col: Option, + id: BlockId, +) -> client::error::Result { + read_header(db, col_index, col, id) + .and_then(|header| header.ok_or_else(|| client::error::ErrorKind::UnknownBlock(format!("{}", id)).into())) +} + /// Read meta from the database. pub fn read_meta(db: &KeyValueDB, col_meta: Option, col_header: Option) -> Result< Meta<<::Header as HeaderT>::Number, Block::Hash>, diff --git a/substrate/core/client/src/cht.rs b/substrate/core/client/src/cht.rs index fd8e07c3dd..39e1aaa95b 100644 --- a/substrate/core/client/src/cht.rs +++ b/substrate/core/client/src/cht.rs @@ -27,7 +27,7 @@ use hash_db; use heapsize::HeapSizeOf; use trie; -use primitives::H256; +use primitives::{H256, convert_hash}; use runtime_primitives::traits::{As, Header as HeaderT, SimpleArithmetic, One}; use state_machine::backend::InMemory as InMemoryState; use state_machine::{prove_read, read_proof_check}; @@ -113,8 +113,7 @@ pub fn check_proof( Hasher: hash_db::Hasher, Hasher::Out: Ord + HeapSizeOf, { - let mut root: Hasher::Out = Default::default(); - root.as_mut().copy_from_slice(local_root.as_ref()); + let root: Hasher::Out = convert_hash(&local_root); let local_cht_key = encode_cht_key(local_number); let local_cht_value = read_proof_check::(root, remote_proof, &local_cht_key).map_err(|e| ClientError::from(e))?; diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index 1279bc486a..f1d1549185 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -30,14 +30,14 @@ use consensus::{ImportBlock, ImportResult, BlockOrigin}; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, Zero, As, NumberFor, CurrentHeight, BlockNumberToHash}; use runtime_primitives::{ApplyResult, BuildStorage}; use runtime_api as api; -use primitives::{Blake2Hasher, H256, ChangesTrieConfiguration}; +use primitives::{Blake2Hasher, H256, ChangesTrieConfiguration, convert_hash}; use primitives::storage::{StorageKey, StorageData}; use primitives::storage::well_known_keys; use codec::{Encode, Decode}; use state_machine::{ Backend as StateBackend, CodeExecutor, - ExecutionStrategy, ExecutionManager, prove_read, - key_changes, key_changes_proof, OverlayedChanges + ExecutionStrategy, ExecutionManager, ChangesTrieAnchorBlockId, + prove_read, key_changes, key_changes_proof, OverlayedChanges }; use backend::{self, BlockImportOperation}; @@ -355,7 +355,10 @@ impl Client where config, storage, self.require_block_number_from_id(&BlockId::Hash(first))?.as_(), - self.require_block_number_from_id(&BlockId::Hash(last))?.as_(), + &ChangesTrieAnchorBlockId { + hash: convert_hash(&last), + number: self.require_block_number_from_id(&BlockId::Hash(last))?.as_(), + }, self.backend.blockchain().info()?.best_number.as_(), key) .map_err(|err| error::ErrorKind::ChangesTrieAccessFailed(err).into()) @@ -388,7 +391,10 @@ impl Client where config, storage, self.require_block_number_from_id(&BlockId::Hash(first))?.as_(), - self.require_block_number_from_id(&BlockId::Hash(last))?.as_(), + &ChangesTrieAnchorBlockId { + hash: convert_hash(&last), + number: self.require_block_number_from_id(&BlockId::Hash(last))?.as_(), + }, max_number.as_(), key) .map_err(|err| error::ErrorKind::ChangesTrieAccessFailed(err).into()) diff --git a/substrate/core/client/src/light/call_executor.rs b/substrate/core/client/src/light/call_executor.rs index d52883db64..732b783b73 100644 --- a/substrate/core/client/src/light/call_executor.rs +++ b/substrate/core/client/src/light/call_executor.rs @@ -21,6 +21,7 @@ use std::marker::PhantomData; use std::sync::Arc; use futures::{IntoFuture, Future}; +use primitives::convert_hash; use runtime_primitives::generic::BlockId; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT}; use state_machine::{Backend as StateBackend, CodeExecutor, OverlayedChanges, @@ -136,8 +137,7 @@ pub fn check_execution_proof( { let local_state_root = request.header.state_root(); - let mut root: H::Out = Default::default(); - root.as_mut().copy_from_slice(local_state_root.as_ref()); + let root: H::Out = convert_hash(&local_state_root); let mut changes = OverlayedChanges::default(); let local_result = execution_proof_check::( diff --git a/substrate/core/client/src/light/fetcher.rs b/substrate/core/client/src/light/fetcher.rs index 95e02b91f9..b75b74a0a9 100644 --- a/substrate/core/client/src/light/fetcher.rs +++ b/substrate/core/client/src/light/fetcher.rs @@ -21,10 +21,10 @@ use futures::IntoFuture; use hash_db::Hasher; use heapsize::HeapSizeOf; -use primitives::ChangesTrieConfiguration; +use primitives::{ChangesTrieConfiguration, convert_hash}; use runtime_primitives::traits::{As, Block as BlockT, Header as HeaderT, NumberFor}; -use state_machine::{CodeExecutor, ChangesTrieRootsStorage, read_proof_check, - key_changes_proof_check}; +use state_machine::{CodeExecutor, ChangesTrieRootsStorage, ChangesTrieAnchorBlockId, + read_proof_check, key_changes_proof_check}; use call_executor::CallResult; use cht; @@ -192,9 +192,8 @@ impl FetchChecker for LightDataChecker request: &RemoteReadRequest, remote_proof: Vec> ) -> ClientResult>> { - let mut root: H::Out = Default::default(); - root.as_mut().copy_from_slice(request.header.state_root().as_ref()); - read_proof_check::(root, remote_proof, &request.key).map_err(Into::into) + read_proof_check::(convert_hash(request.header.state_root()), remote_proof, &request.key) + .map_err(Into::into) } fn check_execution_proof( @@ -229,7 +228,10 @@ impl FetchChecker for LightDataChecker }, remote_proof, first_number, - request.last_block.0.as_(), + &ChangesTrieAnchorBlockId { + hash: convert_hash(&request.last_block.1), + number: request.last_block.0.as_(), + }, remote_max.as_(), &request.key) .map(|pairs| pairs.into_iter().map(|(b, x)| (As::sa(b), x)).collect()) @@ -248,15 +250,12 @@ impl<'a, H, Hash> ChangesTrieRootsStorage for RootsStorage<'a, Hash> H: Hasher, Hash: 'a + Send + Sync + Clone + AsRef<[u8]>, { - fn root(&self, block: u64) -> Result, String> { + fn root(&self, _anchor: &ChangesTrieAnchorBlockId, block: u64) -> Result, String> { + // we can't ask for roots from parallel forks here => ignore anchor Ok(block.checked_sub(self.first) .and_then(|index| self.roots.get(index as usize)) .cloned() - .map(|root| { - let mut hasher_root: H::Out = Default::default(); - hasher_root.as_mut().copy_from_slice(root.as_ref()); - hasher_root - })) + .map(|root| convert_hash(&root))) } } diff --git a/substrate/core/executor/src/wasm_executor.rs b/substrate/core/executor/src/wasm_executor.rs index 90d6db6001..7480b61950 100644 --- a/substrate/core/executor/src/wasm_executor.rs +++ b/substrate/core/executor/src/wasm_executor.rs @@ -29,7 +29,7 @@ use wasm_utils::UserError; use primitives::{blake2_256, twox_128, twox_256, ed25519}; use primitives::hexdisplay::HexDisplay; use primitives::sandbox as sandbox_primitives; -use primitives::Blake2Hasher; +use primitives::{H256, Blake2Hasher}; use trie::ordered_trie_root; use sandbox; @@ -412,8 +412,15 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, Ok(0) } }, - ext_storage_changes_root(block: u64, result: *mut u8) -> u32 => { - let r = this.ext.storage_changes_root(block); + ext_storage_changes_root(parent_hash_data: *const u8, parent_hash_len: u32, parent_number: u64, result: *mut u8) -> u32 => { + let mut parent_hash = H256::default(); + if parent_hash_len != parent_hash.as_ref().len() as u32 { + return Err(UserError("Invalid parent_hash_len in ext_storage_changes_root").into()); + } + let raw_parent_hash = this.memory.get(parent_hash_data, parent_hash_len as usize) + .map_err(|_| UserError("Invalid attempt to get parent_hash in ext_storage_changes_root"))?; + parent_hash.as_mut().copy_from_slice(&raw_parent_hash[..]); + let r = this.ext.storage_changes_root(parent_hash, parent_number); if let Some(ref r) = r { this.memory.set(result, &r[..]).map_err(|_| UserError("Invalid attempt to set memory in ext_storage_changes_root"))?; } diff --git a/substrate/core/primitives/src/hash.rs b/substrate/core/primitives/src/hash.rs index 5733a738c9..8d04df2684 100644 --- a/substrate/core/primitives/src/hash.rs +++ b/substrate/core/primitives/src/hash.rs @@ -76,6 +76,16 @@ impl_rest!(H160, 20); impl_rest!(H256, 32); impl_rest!(H512, 64); +/// Hash conversion. Used to convert between unbound associated hash types in traits, +/// implemented by the same hash type. +/// Panics if used to convert between different hash types. +pub fn convert_hash, H2: AsRef<[u8]>>(src: &H2) -> H1 { + let mut dest = H1::default(); + assert_eq!(dest.as_mut().len(), src.as_ref().len()); + dest.as_mut().copy_from_slice(src.as_ref()); + dest +} + #[cfg(test)] mod tests { use super::*; diff --git a/substrate/core/primitives/src/lib.rs b/substrate/core/primitives/src/lib.rs index c5ddcb130d..20f044a872 100644 --- a/substrate/core/primitives/src/lib.rs +++ b/substrate/core/primitives/src/lib.rs @@ -107,7 +107,7 @@ mod changes_trie; #[cfg(test)] mod tests; -pub use self::hash::{H160, H256, H512}; +pub use self::hash::{H160, H256, H512, convert_hash}; pub use self::uint::U256; pub use authority_id::AuthorityId; pub use changes_trie::ChangesTrieConfiguration; diff --git a/substrate/core/sr-io/with_std.rs b/substrate/core/sr-io/with_std.rs index 72fa107469..a608a632fe 100644 --- a/substrate/core/sr-io/with_std.rs +++ b/substrate/core/sr-io/with_std.rs @@ -157,9 +157,9 @@ pub fn child_storage_root(storage_key: &[u8]) -> Option> { } /// "Commit" all existing operations and get the resultant storage change root. -pub fn storage_changes_root(block: u64) -> Option { +pub fn storage_changes_root(parent_hash: [u8; 32], parent_num: u64) -> Option { ext::with(|ext| - ext.storage_changes_root(block) + ext.storage_changes_root(parent_hash.into(), parent_num) ).unwrap_or(None) } diff --git a/substrate/core/sr-io/without_std.rs b/substrate/core/sr-io/without_std.rs index 5b892ecffe..d0f112b76e 100644 --- a/substrate/core/sr-io/without_std.rs +++ b/substrate/core/sr-io/without_std.rs @@ -72,7 +72,7 @@ extern "C" { fn ext_get_child_storage_into(storage_key_data: *const u8, storage_key_len: u32, key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32; fn ext_storage_root(result: *mut u8); fn ext_child_storage_root(storage_key_data: *const u8, storage_key_len: u32, written_out: *mut u32) -> *mut u8; - fn ext_storage_changes_root(block: u64, result: *mut u8) -> u32; + fn ext_storage_changes_root(parent_hash_data: *const u8, parent_hash_len: u32, parent_num: u64, result: *mut u8) -> u32; fn ext_blake2_256_enumerated_trie_root(values_data: *const u8, lens_data: *const u32, lens_len: u32, result: *mut u8); fn ext_chain_id() -> u64; fn ext_blake2_256(data: *const u8, len: u32, out: *mut u8); @@ -269,10 +269,10 @@ pub fn child_storage_root(storage_key: &[u8]) -> Option> { } /// The current storage' changes root. -pub fn storage_changes_root(block: u64) -> Option<[u8; 32]> { +pub fn storage_changes_root(parent_hash: [u8; 32], parent_num: u64) -> Option<[u8; 32]> { let mut result: [u8; 32] = Default::default(); let is_set = unsafe { - ext_storage_changes_root(block, result.as_mut_ptr()) + ext_storage_changes_root(parent_hash.as_ptr(), parent_hash.len() as u32, parent_num, result.as_mut_ptr()) }; if is_set != 0 { diff --git a/substrate/core/sr-primitives/src/traits.rs b/substrate/core/sr-primitives/src/traits.rs index 809c617218..28c7997a0f 100644 --- a/substrate/core/sr-primitives/src/traits.rs +++ b/substrate/core/sr-primitives/src/traits.rs @@ -276,7 +276,7 @@ pub trait Hash: 'static + MaybeSerializeDebug + Clone + Eq + PartialEq { // Stup fn storage_root() -> Self::Output; /// Acquire the global storage changes root. - fn storage_changes_root(block: u64) -> Option; + fn storage_changes_root(parent_hash: Self::Output, parent_number: u64) -> Option; } /// Blake2-256 Hash implementation. @@ -308,8 +308,8 @@ impl Hash for BlakeTwo256 { fn storage_root() -> Self::Output { runtime_io::storage_root().into() } - fn storage_changes_root(block: u64) -> Option { - runtime_io::storage_changes_root(block).map(Into::into) + fn storage_changes_root(parent_hash: Self::Output, parent_number: u64) -> Option { + runtime_io::storage_changes_root(parent_hash.into(), parent_number).map(Into::into) } } diff --git a/substrate/core/state-machine/src/changes_trie/build.rs b/substrate/core/state-machine/src/changes_trie/build.rs index 991b395938..c183f2b3cc 100644 --- a/substrate/core/state-machine/src/changes_trie/build.rs +++ b/substrate/core/state-machine/src/changes_trie/build.rs @@ -25,7 +25,7 @@ use overlayed_changes::OverlayedChanges; use trie_backend_essence::{TrieBackendStorage, TrieBackendEssence}; use changes_trie::build_iterator::digest_build_iterator; use changes_trie::input::{InputKey, InputPair, DigestIndex, ExtrinsicIndex}; -use changes_trie::{Configuration, Storage}; +use changes_trie::{AnchorBlockId, Configuration, Storage}; /// Prepare input pairs for building a changes trie of given block. /// @@ -37,7 +37,7 @@ pub fn prepare_input<'a, B, S, H>( backend: &B, storage: Option<&'a S>, changes: &OverlayedChanges, - block: u64, + parent: &'a AnchorBlockId, ) -> Result>, String> where B: Backend, @@ -54,10 +54,10 @@ pub fn prepare_input<'a, B, S, H>( let mut input = Vec::new(); input.extend(prepare_extrinsics_input( backend, - block, + parent.number + 1, changes)?); input.extend(prepare_digest_input::<_, H>( - block, + parent, config, storage)?); @@ -73,7 +73,6 @@ fn prepare_extrinsics_input( where B: Backend, H: Hasher, - { let mut extrinsic_map = BTreeMap::, BTreeSet>::new(); for (key, val) in changes.prospective.top.iter().chain(changes.committed.top.iter()) { @@ -103,19 +102,19 @@ fn prepare_extrinsics_input( /// Prepare DigestIndex input pairs. fn prepare_digest_input<'a, S, H>( - block: u64, + parent: &'a AnchorBlockId, config: &Configuration, storage: &'a S -) -> Result, String> +) -> Result + 'a, String> where S: Storage, &'a S: TrieBackendStorage, H: Hasher, - H::Out: HeapSizeOf, + H::Out: 'a + HeapSizeOf, { let mut digest_map = BTreeMap::, BTreeSet>::new(); - for digest_build_block in digest_build_iterator(config, block) { - let trie_root = storage.root(digest_build_block)?; + for digest_build_block in digest_build_iterator(config, parent.number + 1) { + let trie_root = storage.root(parent, digest_build_block)?; let trie_root = trie_root.ok_or_else(|| format!("No changes trie root for block {}", digest_build_block))?; let trie_storage = TrieBackendEssence::<_, H>::new(storage, trie_root); @@ -136,7 +135,7 @@ fn prepare_digest_input<'a, S, H>( Ok(digest_map.into_iter() .map(move |(key, set)| InputPair::DigestIndex(DigestIndex { - block, + block: parent.number + 1, key }, set.into_iter().collect()))) } @@ -228,7 +227,7 @@ mod test { #[test] fn build_changes_trie_nodes_on_non_digest_block() { let (backend, storage, changes) = prepare_for_build(); - let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 5).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, &AnchorBlockId { hash: Default::default(), number: 4 }).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 5, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 5, key: vec![101] }, vec![1]), @@ -239,7 +238,7 @@ mod test { #[test] fn build_changes_trie_nodes_on_digest_block_l1() { let (backend, storage, changes) = prepare_for_build(); - let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 4).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, &AnchorBlockId { hash: Default::default(), number: 3 }).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![101] }, vec![1]), @@ -255,7 +254,7 @@ mod test { #[test] fn build_changes_trie_nodes_on_digest_block_l2() { let (backend, storage, changes) = prepare_for_build(); - let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 16).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, &AnchorBlockId { hash: Default::default(), number: 15 }).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 16, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 16, key: vec![101] }, vec![1]), @@ -279,7 +278,7 @@ mod test { extrinsics: Some(vec![1].into_iter().collect()) }); - let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 4).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, &AnchorBlockId { hash: Default::default(), number: 3 }).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![101] }, vec![1]), diff --git a/substrate/core/state-machine/src/changes_trie/changes_iterator.rs b/substrate/core/state-machine/src/changes_trie/changes_iterator.rs index 8b4d2bd540..e8bd1e7db6 100644 --- a/substrate/core/state-machine/src/changes_trie/changes_iterator.rs +++ b/substrate/core/state-machine/src/changes_trie/changes_iterator.rs @@ -23,7 +23,7 @@ use codec::{Decode, Encode}; use hash_db::{HashDB, Hasher}; use heapsize::HeapSizeOf; use substrate_trie::{Recorder, MemoryDB}; -use changes_trie::{Configuration, RootsStorage, Storage}; +use changes_trie::{AnchorBlockId, Configuration, RootsStorage, Storage}; use changes_trie::input::{DigestIndex, ExtrinsicIndex, DigestIndexValue, ExtrinsicIndexValue}; use changes_trie::storage::{TrieBackendAdapter, InMemoryStorage}; use proving_backend::ProvingBackendEssence; @@ -35,7 +35,7 @@ pub fn key_changes, H: Hasher>( config: &Configuration, storage: &S, begin: u64, - end: u64, + end: &AnchorBlockId, max: u64, key: &[u8], ) -> Result, String> where H::Out: HeapSizeOf { @@ -46,7 +46,7 @@ pub fn key_changes, H: Hasher>( storage, begin, end, - surface: surface_iterator(config, max, begin, end)?, + surface: surface_iterator(config, max, begin, end.number)?, extrinsics: Default::default(), blocks: Default::default(), @@ -62,7 +62,7 @@ pub fn key_changes_proof, H: Hasher>( config: &Configuration, storage: &S, begin: u64, - end: u64, + end: &AnchorBlockId, max: u64, key: &[u8], ) -> Result>, String> where H::Out: HeapSizeOf { @@ -73,7 +73,7 @@ pub fn key_changes_proof, H: Hasher>( storage, begin, end, - surface: surface_iterator(config, max, begin, end)?, + surface: surface_iterator(config, max, begin, end.number)?, extrinsics: Default::default(), blocks: Default::default(), @@ -98,7 +98,7 @@ pub fn key_changes_proof_check, H: Hasher>( roots_storage: &S, proof: Vec>, begin: u64, - end: u64, + end: &AnchorBlockId, max: u64, key: &[u8] ) -> Result, String> where H::Out: HeapSizeOf { @@ -115,7 +115,7 @@ pub fn key_changes_proof_check, H: Hasher>( storage: &proof_db, begin, end, - surface: surface_iterator(config, max, begin, end)?, + surface: surface_iterator(config, max, begin, end.number)?, extrinsics: Default::default(), blocks: Default::default(), @@ -174,12 +174,12 @@ impl<'a> Iterator for SurfaceIterator<'a> { /// Drilldown iterator - receives 'digest points' from surface iterator and explores /// every point until extrinsic is found. -pub struct DrilldownIteratorEssence<'a, RS: 'a + RootsStorage, S: 'a + Storage, H: Hasher> { +pub struct DrilldownIteratorEssence<'a, RS: 'a + RootsStorage, S: 'a + Storage, H: Hasher> where H::Out: 'a { key: &'a [u8], roots_storage: &'a RS, storage: &'a S, begin: u64, - end: u64, + end: &'a AnchorBlockId, surface: SurfaceIterator<'a>, extrinsics: VecDeque<(u64, u32)>, @@ -213,14 +213,14 @@ impl<'a, RS: 'a + RootsStorage, S: Storage, H: Hasher> DrilldownIteratorEs // not having a changes trie root is an error because: // we never query roots for future blocks // AND trie roots for old blocks are known (both on full + light node) - let trie_root = self.roots_storage.root(block)? + let trie_root = self.roots_storage.root(&self.end, block)? .ok_or_else(|| format!("Changes trie root for block {} is not found", block))?; // only return extrinsics for blocks before self.max // most of blocks will be filtered out beore pushing to `self.blocks` // here we just throwing away changes at digest blocks we're processing debug_assert!(block >= self.begin, "We shall not touch digests earlier than a range' begin"); - if block <= self.end { + if block <= self.end.number { let extrinsics_key = ExtrinsicIndex { block, key: self.key.to_vec() }.encode(); let extrinsics = trie_reader(&self.storage, trie_root, &extrinsics_key); if let Some(extrinsics) = extrinsics? { @@ -239,7 +239,7 @@ impl<'a, RS: 'a + RootsStorage, S: Storage, H: Hasher> DrilldownIteratorEs // filter level0 blocks here because we tend to use digest blocks, // AND digest block changes could also include changes for out-of-range blocks let begin = self.begin; - let end = self.end; + let end = self.end.number; self.blocks.extend(blocks.into_iter() .rev() .filter(|b| level > 1 || (*b >= begin && *b <= end)) @@ -261,7 +261,7 @@ impl<'a, RS: 'a + RootsStorage, S: Storage, H: Hasher> DrilldownIteratorEs } /// Exploring drilldown operator. -struct DrilldownIterator<'a, RS: 'a + RootsStorage, S: 'a + Storage, H: Hasher> { +struct DrilldownIterator<'a, RS: 'a + RootsStorage, S: 'a + Storage, H: Hasher> where H::Out: 'a { essence: DrilldownIteratorEssence<'a, RS, S, H>, } @@ -278,7 +278,7 @@ impl<'a, RS: 'a + RootsStorage, S: Storage, H: Hasher> Iterator } /// Proving drilldown iterator. -struct ProvingDrilldownIterator<'a, RS: 'a + RootsStorage, S: 'a + Storage, H: Hasher> { +struct ProvingDrilldownIterator<'a, RS: 'a + RootsStorage, S: 'a + Storage, H: Hasher> where H::Out: 'a { essence: DrilldownIteratorEssence<'a, RS, S, H>, proof_recorder: RefCell>, } @@ -427,23 +427,23 @@ mod tests { fn drilldown_iterator_works() { let (config, storage) = prepare_for_drilldown(); let drilldown_result = key_changes::, Blake2Hasher>( - &config, &storage, 0, 16, 16, &[42]); + &config, &storage, 0, &AnchorBlockId { hash: Default::default(), number: 16 }, 16, &[42]); assert_eq!(drilldown_result, Ok(vec![(8, 2), (8, 1), (6, 3), (3, 0)])); let drilldown_result = key_changes::, Blake2Hasher>( - &config, &storage, 0, 2, 4, &[42]); + &config, &storage, 0, &AnchorBlockId { hash: Default::default(), number: 2 }, 4, &[42]); assert_eq!(drilldown_result, Ok(vec![])); let drilldown_result = key_changes::, Blake2Hasher>( - &config, &storage, 0, 3, 4, &[42]); + &config, &storage, 0, &AnchorBlockId { hash: Default::default(), number: 3 }, 4, &[42]); assert_eq!(drilldown_result, Ok(vec![(3, 0)])); let drilldown_result = key_changes::, Blake2Hasher>( - &config, &storage, 7, 8, 8, &[42]); + &config, &storage, 7, &AnchorBlockId { hash: Default::default(), number: 8 }, 8, &[42]); assert_eq!(drilldown_result, Ok(vec![(8, 2), (8, 1)])); let drilldown_result = key_changes::, Blake2Hasher>( - &config, &storage, 5, 7, 8, &[42]); + &config, &storage, 5, &AnchorBlockId { hash: Default::default(), number: 7 }, 8, &[42]); assert_eq!(drilldown_result, Ok(vec![(6, 3)])); } @@ -453,16 +453,16 @@ mod tests { storage.clear_storage(); assert!(key_changes::, Blake2Hasher>( - &config, &storage, 0, 100, 1000, &[42]).is_err()); + &config, &storage, 0, &AnchorBlockId { hash: Default::default(), number: 100 }, 1000, &[42]).is_err()); } #[test] fn drilldown_iterator_fails_when_range_is_invalid() { let (config, storage) = prepare_for_drilldown(); assert!(key_changes::, Blake2Hasher>( - &config, &storage, 0, 100, 50, &[42]).is_err()); + &config, &storage, 0, &AnchorBlockId { hash: Default::default(), number: 100 }, 50, &[42]).is_err()); assert!(key_changes::, Blake2Hasher>( - &config, &storage, 20, 10, 100, &[42]).is_err()); + &config, &storage, 20, &AnchorBlockId { hash: Default::default(), number: 10 }, 100, &[42]).is_err()); } @@ -474,7 +474,7 @@ mod tests { let (remote_config, remote_storage) = prepare_for_drilldown(); let remote_proof = key_changes_proof::, Blake2Hasher>( &remote_config, &remote_storage, - 0, 16, 16, &[42]).unwrap(); + 0, &AnchorBlockId { hash: Default::default(), number: 16 }, 16, &[42]).unwrap(); // happens on local light node: @@ -483,7 +483,7 @@ mod tests { local_storage.clear_storage(); let local_result = key_changes_proof_check::, Blake2Hasher>( &local_config, &local_storage, remote_proof, - 0, 16, 16, &[42]); + 0, &AnchorBlockId { hash: Default::default(), number: 16 }, 16, &[42]); // check that drilldown result is the same as if it was happening at the full node assert_eq!(local_result, Ok(vec![(8, 2), (8, 1), (6, 3), (3, 0)])); diff --git a/substrate/core/state-machine/src/changes_trie/mod.rs b/substrate/core/state-machine/src/changes_trie/mod.rs index fb16cb54d6..1d523854ee 100644 --- a/substrate/core/state-machine/src/changes_trie/mod.rs +++ b/substrate/core/state-machine/src/changes_trie/mod.rs @@ -58,10 +58,20 @@ use trie::{DBValue, trie_root}; /// Changes that are made outside of extrinsics are marked with this index; pub const NO_EXTRINSIC_INDEX: u32 = 0xffffffff; +/// Block identifier that could be used to determine fork of this block. +#[derive(Debug)] +pub struct AnchorBlockId { + /// Hash of this block. + pub hash: Hash, + /// Number of this block. + pub number: u64, +} + /// Changes trie storage. Provides access to trie roots and trie nodes. pub trait RootsStorage: Send + Sync { - /// Get changes trie root for given block. - fn root(&self, block: u64) -> Result, String>; + /// Get changes trie root for the block with given number which is an ancestor (or the block + /// itself) of the anchor_block (i.e. anchor_block.number >= block). + fn root(&self, anchor: &AnchorBlockId, block: u64) -> Result, String>; } /// Changes trie storage. Provides access to trie roots and trie nodes. @@ -79,13 +89,13 @@ pub fn compute_changes_trie_root<'a, B: Backend, S: Storage, H: Hasher>( backend: &B, storage: Option<&'a S>, changes: &OverlayedChanges, - block: u64, + parent: &'a AnchorBlockId, ) -> Option<(H::Out, Vec<(Vec, Vec)>)> where &'a S: TrieBackendStorage, H::Out: Ord + HeapSizeOf, { - let input_pairs = prepare_input::(backend, storage, changes, block) + let input_pairs = prepare_input::(backend, storage, changes, parent) .expect("storage is not allowed to fail within runtime")?; let transaction = input_pairs.into_iter() .map(Into::into) diff --git a/substrate/core/state-machine/src/changes_trie/prune.rs b/substrate/core/state-machine/src/changes_trie/prune.rs index 8168a0771d..70bae77b02 100644 --- a/substrate/core/state-machine/src/changes_trie/prune.rs +++ b/substrate/core/state-machine/src/changes_trie/prune.rs @@ -21,7 +21,7 @@ use heapsize::HeapSizeOf; use substrate_trie::Recorder; use proving_backend::ProvingBackendEssence; use trie_backend_essence::TrieBackendEssence; -use changes_trie::{Configuration, Storage}; +use changes_trie::{AnchorBlockId, Configuration, Storage}; use changes_trie::storage::TrieBackendAdapter; /// Prune obslete changes tries. Puning happens at the same block, where highest @@ -33,21 +33,21 @@ pub fn prune, H: Hasher, F: FnMut(H::Out)>( config: &Configuration, storage: &S, min_blocks_to_keep: u64, - current_block: u64, + current_block: &AnchorBlockId, mut remove_trie_node: F, ) where H::Out: HeapSizeOf, { // we only CAN prune at block where max-level-digest is created - let digest_interval = match config.digest_level_at_block(current_block) { + let digest_interval = match config.digest_level_at_block(current_block.number) { Some((digest_level, digest_interval, _)) if digest_level == config.digest_levels => digest_interval, _ => return, }; // select range for pruning - let (first, last) = match pruning_range(min_blocks_to_keep, current_block, digest_interval) { + let (first, last) = match pruning_range(min_blocks_to_keep, current_block.number, digest_interval) { Some((first, last)) => (first, last), None => return, }; @@ -55,7 +55,7 @@ pub fn prune, H: Hasher, F: FnMut(H::Out)>( // delete changes trie for every block in range // TODO: limit `max_digest_interval` so that this cycle won't involve huge ranges for block in first..last+1 { - let root = match storage.root(block) { + let root = match storage.root(current_block, block) { Ok(Some(root)) => root, Ok(None) => continue, Err(error) => { @@ -139,7 +139,7 @@ mod tests { H::Out: HeapSizeOf, { let mut pruned_trie_nodes = HashSet::new(); - prune(config, storage, min_blocks_to_keep, current_block, + prune(config, storage, min_blocks_to_keep, &AnchorBlockId { hash: Default::default(), number: current_block }, |node| { pruned_trie_nodes.insert(node); }); pruned_trie_nodes } diff --git a/substrate/core/state-machine/src/changes_trie/storage.rs b/substrate/core/state-machine/src/changes_trie/storage.rs index 1cdd03841e..088b605e9c 100644 --- a/substrate/core/state-machine/src/changes_trie/storage.rs +++ b/substrate/core/state-machine/src/changes_trie/storage.rs @@ -22,7 +22,7 @@ use trie::DBValue; use heapsize::HeapSizeOf; use trie::MemoryDB; use parking_lot::RwLock; -use changes_trie::{RootsStorage, Storage}; +use changes_trie::{AnchorBlockId, RootsStorage, Storage}; use trie_backend_essence::TrieBackendStorage; #[cfg(test)] @@ -110,7 +110,7 @@ impl InMemoryStorage where H::Out: HeapSizeOf { } impl RootsStorage for InMemoryStorage where H::Out: HeapSizeOf { - fn root(&self, block: u64) -> Result, String> { + fn root(&self, _anchor_block: &AnchorBlockId, block: u64) -> Result, String> { Ok(self.data.read().roots.get(&block).cloned()) } } diff --git a/substrate/core/state-machine/src/ext.rs b/substrate/core/state-machine/src/ext.rs index b03ed28250..1bcb3fb732 100644 --- a/substrate/core/state-machine/src/ext.rs +++ b/substrate/core/state-machine/src/ext.rs @@ -18,7 +18,7 @@ use std::{error, fmt, cmp::Ord}; use backend::{Backend, Consolidate}; -use changes_trie::{Storage as ChangesTrieStorage, compute_changes_trie_root}; +use changes_trie::{AnchorBlockId, Storage as ChangesTrieStorage, compute_changes_trie_root}; use {Externalities, OverlayedChanges}; use hash_db::Hasher; use primitives::storage::well_known_keys::is_child_storage_key; @@ -288,12 +288,12 @@ where Some(self.child_storage_root_transaction(storage_key).0) } - fn storage_changes_root(&mut self, block: u64) -> Option { + fn storage_changes_root(&mut self, parent: H::Out, parent_num: u64) -> Option { let root_and_tx = compute_changes_trie_root::<_, T, H>( self.backend, self.changes_trie_storage.clone(), self.overlay, - block, + &AnchorBlockId { hash: parent, number: parent_num }, ); let root_and_tx = root_and_tx.map(|(root, changes)| { let mut calculated_root = Default::default(); @@ -305,7 +305,7 @@ where } } - (block, mdb, root) + (parent_num + 1, mdb, root) }); let root = root_and_tx.as_ref().map(|(_, _, root)| root.clone()); self.changes_trie_transaction = root_and_tx; @@ -353,7 +353,7 @@ mod tests { let mut overlay = prepare_overlay_with_changes(); let backend = TestBackend::default(); let mut ext = TestExt::new(&mut overlay, &backend, None); - assert_eq!(ext.storage_changes_root(100), None); + assert_eq!(ext.storage_changes_root(Default::default(), 100), None); } #[test] @@ -363,7 +363,7 @@ mod tests { let storage = TestChangesTrieStorage::new(); let backend = TestBackend::default(); let mut ext = TestExt::new(&mut overlay, &backend, Some(&storage)); - assert_eq!(ext.storage_changes_root(100), None); + assert_eq!(ext.storage_changes_root(Default::default(), 100), None); } #[test] @@ -372,7 +372,7 @@ mod tests { let storage = TestChangesTrieStorage::new(); let backend = TestBackend::default(); let mut ext = TestExt::new(&mut overlay, &backend, Some(&storage)); - assert_eq!(ext.storage_changes_root(100), + assert_eq!(ext.storage_changes_root(Default::default(), 99), Some(hex!("5b829920b9c8d554a19ee2a1ba593c4f2ee6fc32822d083e04236d693e8358d5").into())); } @@ -383,7 +383,7 @@ mod tests { let storage = TestChangesTrieStorage::new(); let backend = TestBackend::default(); let mut ext = TestExt::new(&mut overlay, &backend, Some(&storage)); - assert_eq!(ext.storage_changes_root(100), + assert_eq!(ext.storage_changes_root(Default::default(), 99), Some(hex!("bcf494e41e29a15c9ae5caa053fe3cb8b446ee3e02a254efbdec7a19235b76e4").into())); } } diff --git a/substrate/core/state-machine/src/lib.rs b/substrate/core/state-machine/src/lib.rs index 7b0f3690d8..e88b3f370a 100644 --- a/substrate/core/state-machine/src/lib.rs +++ b/substrate/core/state-machine/src/lib.rs @@ -53,7 +53,9 @@ pub use trie::{TrieMut, TrieDBMut, DBValue, MemoryDB}; pub use testing::TestExternalities; pub use ext::Ext; pub use backend::Backend; -pub use changes_trie::{Storage as ChangesTrieStorage, +pub use changes_trie::{ + AnchorBlockId as ChangesTrieAnchorBlockId, + Storage as ChangesTrieStorage, RootsStorage as ChangesTrieRootsStorage, InMemoryStorage as InMemoryChangesTrieStorage, key_changes, key_changes_proof, key_changes_proof_check, @@ -154,8 +156,8 @@ pub trait Externalities { /// Returns None if key provided is not a storage key. This can due to not being started with CHILD_STORAGE_KEY_PREFIX, or the trie implementation regards the key as invalid. fn child_storage_root(&mut self, storage_key: &[u8]) -> Option>; - /// Get the change trie root of the current storage overlay at given block. - fn storage_changes_root(&mut self, block: u64) -> Option where H::Out: Ord; + /// Get the change trie root of the current storage overlay at a block wth given parent. + fn storage_changes_root(&mut self, parent: H::Out, parent_num: u64) -> Option where H::Out: Ord; } /// Code execution engine. diff --git a/substrate/core/state-machine/src/testing.rs b/substrate/core/state-machine/src/testing.rs index 75ad342b6b..876a190a96 100644 --- a/substrate/core/state-machine/src/testing.rs +++ b/substrate/core/state-machine/src/testing.rs @@ -22,7 +22,7 @@ use hash_db::Hasher; use heapsize::HeapSizeOf; use trie::trie_root; use backend::InMemory; -use changes_trie::{compute_changes_trie_root, InMemoryStorage as ChangesTrieInMemoryStorage}; +use changes_trie::{compute_changes_trie_root, InMemoryStorage as ChangesTrieInMemoryStorage, AnchorBlockId}; use primitives::storage::well_known_keys::CHANGES_TRIE_CONFIG; use super::{Externalities, OverlayedChanges}; @@ -136,12 +136,12 @@ impl Externalities for TestExternalities where H::Out: Ord + He None } - fn storage_changes_root(&mut self, block: u64) -> Option { + fn storage_changes_root(&mut self, parent: H::Out, parent_num: u64) -> Option { compute_changes_trie_root::<_, _, H>( &InMemory::default(), Some(&self.changes_trie_storage), &self.changes, - block, + &AnchorBlockId { hash: parent, number: parent_num }, ).map(|(root, _)| root.clone()) } } diff --git a/substrate/core/test-runtime/src/system.rs b/substrate/core/test-runtime/src/system.rs index a3041647d4..3703fb553e 100644 --- a/substrate/core/test-runtime/src/system.rs +++ b/substrate/core/test-runtime/src/system.rs @@ -93,7 +93,7 @@ pub fn execute_block(block: Block) { // check digest let mut digest = Digest::default(); - if let Some(storage_changes_root) = storage_changes_root(header.number) { + if let Some(storage_changes_root) = storage_changes_root(header.parent_hash.into(), header.number - 1) { digest.push(generic::DigestItem::ChangesTrieRoot::(storage_changes_root.into())); } assert!(digest == header.digest, "Header digest items must match that calculated."); @@ -160,7 +160,7 @@ pub fn finalise_block() -> Header { let number = ::take(); let parent_hash = ::take(); let storage_root = BlakeTwo256::storage_root(); - let storage_changes_root = BlakeTwo256::storage_changes_root(number); + let storage_changes_root = BlakeTwo256::storage_changes_root(parent_hash, number - 1); let mut digest = Digest::default(); if let Some(storage_changes_root) = storage_changes_root { diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index bbac245c7b46250a9c9f4b73e8827bcfb1fc4616..c526eacd1f6de9e9567014c2f14dd520dcceb777 100644 GIT binary patch literal 222890 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 B@h|`Y delta 8133 zcmcIpeRNbsmVfo$>vSjGoxCO;ObC$Ioe&Zb(%&BmA9+zk1yNCf01{qzzlJoBge1g| zK^lh7L6m4QwjYd#nL+V`@i1mw-97FZoN-51cjo9WvJ@ZTV*YAlHfV!}s#bdHlw%aAi&g3%5#bklWjJfUjmnF9>yYVl(op!s-+)nGC z$@~nPR(^E!wBXDO+EM-|c5{Qzsc#$J*gx1i+-nR8jhNp^ZyPpxQk(nJn}ivBoj5t) zqV)EmUEkb0RBD)Ar4I~jzN-i9g4vOQ5>9Z=*42K$Hu;hJ;vEdZUrv z)Kh935)#fqy)Vmngjh_CjFt5Cl37W#3j+%yPQFTFWUB&Ci#Tb{Q z%}nD1(t381za{NMeU*G8)5e~XXEAZ~AU|sxtbX;-X(1*$R7n$Kq6^^YfwAtgezW~` z`$E@Qvt3q2ZS>$+jibiqb_-p{j(qak*fXy__%mTF=6-=ye^4YMT0}$;;r~HNtEGBvZ9^TD&cpKQsvB$lw@|+`RRx4CV@d{4u?ER+&r5cqzg!LA& z;~)H$CST2;_Ma9sFs1ml|D>vus$8q8<`px#A!laB6DTX1A3%AunM3Bl%ml+nZ_6Dh z-*4Ft)VkJ%gnE3|Qj~w3)#dnj4@i|OO*}gLsQBLp_&?3Q5o#K1x^l0G9?#7E_bZ>H z$->HX!KqY&#WIa4Re)a~0D2Cg)$$_ht3CYZZ3+H)-Bi+a?Udz}<70oz7~}7*@GToX zNP592QH5ei$q%y}L}?Z~Rk1}p#um8+ARWL_i*|r1+LTf+peG`fnf%nMnF|=2&zkBU zrRvLO)qxr&aM94+#ic-fl;vV#Eh?b&Dmp5Y`OS$Yb|oK4ghg!%e}ATz|1{xsnsb5) zrYz*|CHmW1Rk2k%Ao|KN^q7=WU7$pam3Oh_ZV|}O1mYM?W&_`zBs=^=az4tL?Q>DC zXm3Ngul?QWD!z^u{JD@zQ4dgU=#OF}Ue6rN3vOG~# zZAzOelbRWQqJlZFE~>1uR%s`TQ&n^2e6ngIrGdCz`)EhbZ+C-xhXzc!i#avHhbeqz zfaOk*QgUh;{>wGj=A7cOXsfIRmRdoeRteGkYEG*yO=s%F|bQvg3~u%wG|)~OB3uov4(`k(yPF_yVq?LfOQ?0~`DrCWn-AwFMD;MRVYR4QwfPe@a4!;fc#cr`^{dP^->bGmm zG61_Kq5{{K(8CM}6pF}vT^7kQAZ4ohoj_VO+ck(l_*CuWev%6Y0m-jLJNRvt^1^br z4XtohB1y3b1&o(^i!K|DL>rsXX8JL6K^lrlm#_dk`z96yiv>*@R=VKaY9-cgv(F}W z=1pUlO$})IoF-mph71HY5HjQ7B6D(67=_q)Q?TOTsXUw!EP~pFo;0Y~ldu1iodyFHf0-MEvRFy{H?*Jv5tkm64@+X(Y3^9ZsORyunnGr zg_Tj|B{4@%teFKL>GFwZ_VGu$?qW7xebo%gecG?u%$RNL#MMs_xZ#?c%#3OA3)sDH zy><`t^LMV@g8Jg?wxRyF*WHQw`;LY zPu?7|@xS-CR79Y?00dJa{0o0S#%yXlj#6nd#P|2}JDPm>c%*3-|LqDAj(@#k@|-Kl zd|Jc<6H_e;o1Z}~#0KgpksuL*cdcx$e46$+$|gp|oMPi6D+Ac%nY9gx1V%;e)J1(% zzH_Cj9syMqTcW5zALvuuD@{7ISMst|zm9!iYHM^{TmM(;CQeMuiskMf?? zgD5{*{Upl5n!H(W;IXx{i?v;Ap-2AO+8`>z!x6fdg;P^A^e#{n*t?lWc z6?l04I<}C1y1tcla-TlaW3JPM@yP%9kJi=ltva1FKGT<7O6%6tdC=0*uOXWrE6;|B z@o{Fu?+Eu~u2yD2{?opdQ?1NcDQ3oWWO&M42qmYqntA@B{yNK~Eqtw&YSM~f ztt{0dkw?6#>x49-be_Nfk;zdx;Uo@sK=m)!F}(LG73cd@&P8a2ILv`l0!CK|46`ETcR z(|^;``@z0X^^u8xGJQKfh8hBp<#>ZCp5McN(Xe`Adw>tCw-NpgmBw}WOxO5idV)Xd z3jpy3O6b8iL&84AcQnkv*Y*BD?f7vobhYsf4*Q(P^RqPjUV#=Q{pDSIG+C(R}^PZ_#XZhS4%$N=sd%7T$|LpMU?!0;4`eM^TE zY*yzKY}pz}nvwVCbVBr-2R-c5gi@<4s08_Q+cubk>qN!QgCiP6z~Par$}1_r>|{!a zpC0j66vKxNq2s-gCR!u;j*h$&fkO~f$_@oV8}9=NvCd`=gkyndB|ucukT`d-6PBP| z0!~0qZJfIaOMnaG)};*1D7XK*yI2+=%fxQM!$_rf#tin;rX+V9PI{H_Tz5ejVD zCd@@BFzUQ)w%;@GN^S#QOIfdln2`Bf2ve=r*+5iz_uZ3lL_<`kgRPaudib~Qeu8

j<<8q%516+NcdGJDi`+GctT@}Cc#7qe2p|rO zr7!-wows@P)|CKdv2uYB$zBIQGDyZjqw@`TK(`&Zi$%=Y4FZ6qH9;i84i; z(zT#@YllD#R4oz;x=Jl&6BUAX{(gS<;o0?;9XN_f6W#Vf3ABMI&10tzd)c%v%^7I0 zHN!K{yFAIv}4LgGFBU@z^1Uf$ff=YI3H^TO;ZYLKr9z{;4ACaJiE4gi4#F0rEFHo@F{ zd2)g3`86_Yx~~?rmK=^&S{ctRXsZ5+Y3>TJ81DtZ1@!k9wAQ>z{KME`8%+C@ZfQkj zD&NWJ_VExIYq=x<4)ZFKRf1rXg90b+?z`G4;pPl zn|sqn+m`;!+`%D%zw_`({^4W(vC+bHj6eTacxp<|s6)LQ`t;##gT}BiG(4c=!Qier zROQV_r}N~a*YO39)$qNKge%%^8!`rm+BWDTJoVU3EfX5nS`ESn7}z!epDyAD(SJ7T zC5F@Bss`U*0Z$W`7=9gf`5W-Rx(J^iAMlUGhLT3ML2_^?WB^Gse=cg~zo4-gzE1+b z8t@DJNMkPnKOb;AAPxt@(||6(7XUHzLVpnqQ-9&>M!CBb`VjGqGeM7%d!MAzeKw5l*I~z$N0Dj2;UHJVS*auaKq} zYFA2&lxQ#$h=x+BP%L63lSZ^p=i)Z6tq=RgAz_B;?Ybro(zSJXe1UW46Kr7DydA` zi0DQ#mI}nP(MY^-VwE)A6N<#bdOVa4CF7ZNRxiCKisQ!bUh{gaQTUYDra$OfnO~+o zhl55i8;wWxbS4^(#AkLE{$-6cxo~WaG^x#eaD=dWA{tMGpx|sUl#1)I7VijN6*D^C zB!}@(IHaeC!CGsL~nVhw);K@kS3P;mYMS-oA7BptVK`1RA z2^pz)CZ37SzU(dY%EGyI(&5HLDi{gqNj;iK>sYGjoJ(Ig=PtXzZOf!YR8J)Wm^Kp4 zhU1Y$TdeSJtEI*!2#`r7jej@U4-qh;A_Yj6of5#qI64STDxy?Zf&eJd+Og4CsBm zY0Ml724k@d=tZDkBb1I5K3px$niMk9nLq#>1!1bGP&nFEn7>-`7ozJWWo9ao4JY+v zD3;8o$!TKW^lBUb*^5d>`W`Ekr=-b#a)W3zkO{_u!ED%wB`$r^O}?n5aA`h0YQ*B< zKq#Ax!J8t6-ahfAx8udCjC7Jsi^js4WGWGdUB?ocL}1>82jKaIf4&{YoQQ-X*-SJL zfc->5p#_DdSt&L-q-QcAJqbLNoJvI&4)!!Hy|tiZVNriEq-$G(iEzY7#AE45ESrFR Wc9v~1w&2NKBbXkztILF22L2cNFF(2f diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index fe491c7cfd..704f2d342f 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -734,7 +734,7 @@ mod tests { let mut t = new_test_ext(true); Executor::new().call(&mut t, 8, COMPACT_CODE, "execute_block", &block1(true).0, true).0.unwrap(); - assert!(t.storage_changes_root(1).is_some()); + assert!(t.storage_changes_root(Default::default(), 0).is_some()); } #[test] @@ -742,6 +742,6 @@ mod tests { let mut t = new_test_ext(true); WasmExecutor::new().call(&mut t, 8, COMPACT_CODE, "execute_block", &block1(true).0).unwrap(); - assert!(t.storage_changes_root(1).is_some()); + assert!(t.storage_changes_root(Default::default(), 0).is_some()); } } diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index aee72d47e77ac5d8faa87bf7d6c34129b68b6c47..aafdeedceb1d923b7286b845a5eb33e75a0b0ae7 100644 GIT binary patch delta 293625 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.>3?&X_gv`o2j490^hWq&zY@q5ZCf^)Ec-voiRs^ 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 QF|rw>{iOVjG+HL|UrP*}c>n+a diff --git a/substrate/srml/system/src/lib.rs b/substrate/srml/system/src/lib.rs index eccd99a98c..c3cffda04f 100644 --- a/substrate/srml/system/src/lib.rs +++ b/substrate/srml/system/src/lib.rs @@ -284,7 +284,7 @@ impl Module { let mut digest = >::take(); let extrinsics_root = >::take(); let storage_root = T::Hashing::storage_root(); - let storage_changes_root = T::Hashing::storage_changes_root(number.as_()); + let storage_changes_root = T::Hashing::storage_changes_root(parent_hash, number.as_() - 1); // we can't compute changes trie root earlier && put it to the Digest // because it will include all currently existing temporaries From 9063d1acae5abffb6562a9fc6163a98d39af13fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 13 Nov 2018 13:33:28 +0100 Subject: [PATCH 22/26] Implement runtime api client side directly in the runtime (#1094) * Move `initialise_block` into `Core` trait as it is crucial calling the API functions * Switch to first version of new runtime API implementation * Fixes bug in tests * Reenable asserts * Directly use the `TestAPI` in the tests * Start improving the api traits :100644 100644 898aadc7 49217199 M Cargo.lock :100644 100644 61570436 465ed664 M core/client/src/backend.rs :100644 100644 5d0c886b 64d710fd M core/client/src/block_builder.rs :100644 100644 c447855e 5ecbe474 M core/client/src/client.rs :100644 100644 139cef13 f90dbf3d M core/client/src/error.rs :100644 100644 2800c503 3298e66a M core/client/src/runtime_api.rs :100644 100644 affa1c5c 809b08bc M core/primitives/src/lib.rs :100644 100644 2877dfa9 d5547413 M core/sr-api/Cargo.toml :100644 100644 9a49784d 6a625a03 M core/sr-api/src/lib.rs :100644 100644 7c28e1c7 a1a444a9 M core/sr-primitives/src/traits.rs :100644 100644 2e113ab6 dcc01a6d M srml/metadata/Cargo.toml :100644 100644 ea722a70 0809531a M srml/metadata/src/lib.rs * Refactoring * Move `sr-api` into client and more refactoring * Fixes tests * Some documentation and cleanup * Fixes compilation after rebase * More refactoring and more documentation * Makes `substrate-client` compilable on `wasm` On `wasm` it basically just exports the runtime api stuff. * Fixes grumbles * Updates wasm files after rebasing the master * Remove TODO comment * Remove whitespaces * Fixes after rebasing master * Another rebase, another fix commit --- substrate/Cargo.lock | 20 +- substrate/Cargo.toml | 1 - substrate/core/cli/src/informant.rs | 6 +- substrate/core/client/Cargo.toml | 68 +- substrate/core/client/db/src/lib.rs | 12 +- substrate/core/client/src/backend.rs | 7 +- .../core/client/src/block_builder/api.rs | 40 + .../src/{ => block_builder}/block_builder.rs | 82 +- .../core/client/src/block_builder/mod.rs | 23 + substrate/core/client/src/blockchain.rs | 16 + substrate/core/client/src/client.rs | 436 +++++----- substrate/core/client/src/lib.rs | 71 +- substrate/core/client/src/light/mod.rs | 4 +- substrate/core/client/src/runtime_api/core.rs | 62 ++ .../src/runtime_api/macros.rs} | 148 +--- substrate/core/client/src/runtime_api/mod.rs | 99 +++ .../core/client/src/runtime_api/traits.rs | 35 + substrate/core/consensus/aura/src/lib.rs | 19 +- substrate/core/finality-grandpa/src/lib.rs | 22 +- substrate/core/network/src/chain.rs | 25 +- substrate/core/network/src/import_queue.rs | 2 +- substrate/core/network/src/test/mod.rs | 9 +- substrate/core/primitives/src/lib.rs | 23 + substrate/core/rpc/src/author/mod.rs | 15 +- substrate/core/rpc/src/chain/mod.rs | 14 +- substrate/core/rpc/src/state/mod.rs | 19 +- substrate/core/service/src/components.rs | 208 ++++- substrate/core/service/src/consensus.rs | 47 +- substrate/core/service/src/lib.rs | 99 +-- substrate/core/service/test/src/lib.rs | 10 +- substrate/core/sr-api/Cargo.toml | 19 - substrate/core/sr-primitives/src/traits.rs | 36 +- substrate/core/test-client/Cargo.toml | 2 +- .../core/test-client/src/block_builder_ext.rs | 11 +- substrate/core/test-client/src/client_ext.rs | 4 +- substrate/core/test-client/src/lib.rs | 7 +- substrate/core/test-runtime/Cargo.toml | 4 +- substrate/core/test-runtime/src/lib.rs | 184 +++- substrate/core/test-runtime/wasm/Cargo.lock | 790 +++++++++++++++++- substrate/core/test-runtime/wasm/Cargo.toml | 4 +- .../substrate_test_runtime.compact.wasm | Bin 222890 -> 45154 bytes substrate/core/transaction-pool/src/api.rs | 23 +- substrate/node/cli/src/lib.rs | 7 +- substrate/node/cli/src/service.rs | 28 +- substrate/node/runtime/Cargo.toml | 6 +- substrate/node/runtime/src/lib.rs | 191 ++++- substrate/node/runtime/wasm/Cargo.lock | 781 ++++++++++++++++- substrate/node/runtime/wasm/Cargo.toml | 6 +- .../release/node_runtime.compact.wasm | Bin 828029 -> 618357 bytes substrate/srml/metadata/Cargo.toml | 4 + substrate/srml/metadata/src/lib.rs | 21 +- 51 files changed, 2993 insertions(+), 777 deletions(-) create mode 100644 substrate/core/client/src/block_builder/api.rs rename substrate/core/client/src/{ => block_builder}/block_builder.rs (59%) create mode 100644 substrate/core/client/src/block_builder/mod.rs create mode 100644 substrate/core/client/src/runtime_api/core.rs rename substrate/core/{sr-api/src/lib.rs => client/src/runtime_api/macros.rs} (79%) create mode 100644 substrate/core/client/src/runtime_api/mod.rs create mode 100644 substrate/core/client/src/runtime_api/traits.rs delete mode 100644 substrate/core/sr-api/Cargo.toml diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index c52e994004..371aa40d65 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -1786,7 +1786,6 @@ dependencies = [ "safe-mix 1.0.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-api 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", "sr-version 0.1.0", @@ -1803,6 +1802,7 @@ dependencies = [ "srml-timestamp 0.1.0", "srml-treasury 0.1.0", "srml-upgrade-key 0.1.0", + "substrate-client 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", ] @@ -2566,16 +2566,6 @@ dependencies = [ "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "sr-api" -version = "0.1.0" -dependencies = [ - "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-primitives 0.1.0", - "sr-std 0.1.0", - "sr-version 0.1.0", -] - [[package]] name = "sr-io" version = "0.1.0" @@ -2789,6 +2779,8 @@ dependencies = [ "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", + "substrate-primitives 0.1.0", ] [[package]] @@ -3060,8 +3052,9 @@ dependencies = [ "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)", "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-api 0.1.0", "sr-primitives 0.1.0", + "sr-std 0.1.0", + "sr-version 0.1.0", "substrate-consensus-common 0.1.0", "substrate-executor 0.1.0", "substrate-keyring 0.1.0", @@ -3455,6 +3448,7 @@ dependencies = [ "substrate-executor 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-state-machine 0.1.0", "substrate-test-runtime 0.1.0", ] @@ -3468,12 +3462,12 @@ dependencies = [ "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-api 0.1.0", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", "sr-version 0.1.0", "srml-support 0.1.0", + "substrate-client 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", ] diff --git a/substrate/Cargo.toml b/substrate/Cargo.toml index 0396030022..e38e3c3e23 100644 --- a/substrate/Cargo.toml +++ b/substrate/Cargo.toml @@ -32,7 +32,6 @@ members = [ "core/primitives", "core/rpc", "core/rpc-servers", - "core/sr-api", "core/sr-io", "core/sr-sandbox", "core/sr-std", diff --git a/substrate/core/cli/src/informant.rs b/substrate/core/cli/src/informant.rs index 85d82132b4..5912da8126 100644 --- a/substrate/core/cli/src/informant.rs +++ b/substrate/core/cli/src/informant.rs @@ -30,9 +30,8 @@ use runtime_primitives::traits::{Header, As}; const TIMER_INTERVAL_MS: u64 = 5000; /// Spawn informant on the event loop -pub fn start(service: &Service, exit: ::exit_future::Exit, handle: TaskExecutor) - where - C: Components, +pub fn start(service: &Service, exit: ::exit_future::Exit, handle: TaskExecutor) where + C: Components, { let interval = Interval::new(Instant::now(), Duration::from_millis(TIMER_INTERVAL_MS)); @@ -121,4 +120,3 @@ fn speed(best_number: u64, last_number: Option) -> String { format!(" {:4.1} bps", speed / 10.0) } } - diff --git a/substrate/core/client/Cargo.toml b/substrate/core/client/Cargo.toml index 5eeb75940d..1ecf284dc1 100644 --- a/substrate/core/client/Cargo.toml +++ b/substrate/core/client/Cargo.toml @@ -4,27 +4,55 @@ version = "0.1.0" authors = ["Parity Technologies "] [dependencies] -error-chain = "0.12" -fnv = "1.0" -log = "0.4" -parking_lot = "0.4" -hex-literal = "0.1" -futures = "0.1.17" -slog = "^2" -heapsize = "0.4" -substrate-consensus-common = { path = "../consensus/common" } -parity-codec = "2.1" -substrate-executor = { path = "../executor" } -substrate-primitives = { path = "../primitives" } -sr-primitives = { path = "../sr-primitives" } -sr-api = { path = "../sr-api" } -substrate-state-machine = { path = "../state-machine" } -substrate-keyring = { path = "../keyring" } -substrate-trie = { path = "../trie" } -substrate-telemetry = { path = "../telemetry" } -hash-db = { git = "https://github.com/paritytech/trie" } -kvdb = "0.1" +error-chain = { version = "0.12", optional = true } +fnv = { version = "1.0", optional = true } +log = { version = "0.4", optional = true } +parking_lot = { version = "0.4", optional = true } +hex-literal = { version = "0.1", optional = true } +futures = { version = "0.1.17", optional = true } +slog = { version = "^2", optional = true } +heapsize = { version = "0.4", optional = true } +substrate-consensus-common = { path = "../consensus/common", optional = true } +substrate-executor = { path = "../executor", optional = true } +substrate-state-machine = { path = "../state-machine", optional = true } +substrate-keyring = { path = "../keyring", optional = true } +substrate-trie = { path = "../trie", optional = true } +substrate-telemetry = { path = "../telemetry", optional = true } +hash-db = { git = "https://github.com/paritytech/trie", optional = true } +kvdb = { version = "0.1", optional = true } + +parity-codec = { version = "2.1", default-features = false } +substrate-primitives = { path = "../primitives", default-features = false } +sr-primitives = { path = "../sr-primitives", default-features = false } +sr-version = { path = "../sr-version", default-features = false } +sr-std = { path = "../sr-std", default-features = false } [dev-dependencies] substrate-test-client = { path = "../test-client" } kvdb-memorydb = "0.1" + +[features] +default = ["std"] +std = [ + "parity-codec/std", + "substrate-consensus-common", + "substrate-primitives/std", + "parking_lot", + "error-chain", + "fnv", + "log", + "hex-literal", + "futures", + "slog", + "heapsize", + "substrate-executor", + "sr-primitives/std", + "sr-version/std", + "sr-std/std", + "substrate-state-machine", + "substrate-keyring", + "substrate-trie", + "substrate-telemetry", + "hash-db", + "kvdb" +] diff --git a/substrate/core/client/db/src/lib.rs b/substrate/core/client/db/src/lib.rs index 93a5352fd7..f485841fd8 100644 --- a/substrate/core/client/db/src/lib.rs +++ b/substrate/core/client/db/src/lib.rs @@ -94,17 +94,17 @@ pub struct DatabaseSettings { } /// Create an instance of db-backed client. -pub fn new_client( +pub fn new_client( settings: DatabaseSettings, executor: E, genesis_storage: S, block_execution_strategy: ExecutionStrategy, api_execution_strategy: ExecutionStrategy, -) -> Result, client::LocalCallExecutor, E>, Block>, client::error::Error> -where - Block: BlockT, - E: CodeExecutor + RuntimeInfo, - S: BuildStorage, +) -> Result, client::LocalCallExecutor, E>, Block, RA>, client::error::Error> + where + Block: BlockT, + E: CodeExecutor + RuntimeInfo, + S: BuildStorage, { let backend = Arc::new(Backend::new(settings, CANONICALIZATION_DELAY)?); let executor = client::LocalCallExecutor::new(backend.clone(), executor); diff --git a/substrate/core/client/src/backend.rs b/substrate/core/client/src/backend.rs index e613c15534..b953c9aedf 100644 --- a/substrate/core/client/src/backend.rs +++ b/substrate/core/client/src/backend.rs @@ -47,8 +47,7 @@ impl NewBlockState { } /// Block insertion operation. Keeps hold if the inserted block state and data. -pub trait BlockImportOperation -where +pub trait BlockImportOperation where Block: BlockT, H: Hasher, { @@ -85,11 +84,9 @@ where /// /// The same applies for live `BlockImportOperation`s: while an import operation building on a parent `P` /// is alive, the state for `P` should not be pruned. -pub trait Backend: Send + Sync -where +pub trait Backend: Send + Sync where Block: BlockT, H: Hasher, - { /// Associated block insertion operation type. type BlockImportOperation: BlockImportOperation; diff --git a/substrate/core/client/src/block_builder/api.rs b/substrate/core/client/src/block_builder/api.rs new file mode 100644 index 0000000000..a5cbe7e554 --- /dev/null +++ b/substrate/core/client/src/block_builder/api.rs @@ -0,0 +1,40 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate 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. + +// Substrate 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 Substrate. If not, see . + +//! The runtime api for building blocks. + +use runtime_primitives::{traits::Block as BlockT, ApplyResult}; +use rstd::vec::Vec; + +decl_runtime_apis! { + /// The `BlockBuilder` api trait that provides required functions for building a block for a runtime. + pub trait BlockBuilder { + /// The runtime api for building blocks./// Apply the given extrinsics. + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyResult; + /// Finish the current block. + fn finalise_block() -> ::Header; + /// Generate inherent extrinsics. + fn inherent_extrinsics( + inherent: InherentExtrinsic + ) -> Vec; + /// Check that the inherents are valid. + fn check_inherents( + block: Block, data: InherentData + ) -> Result<(), Error>; + /// Generate a random seed. + fn random_seed() -> ::Hash; + } +} diff --git a/substrate/core/client/src/block_builder.rs b/substrate/core/client/src/block_builder/block_builder.rs similarity index 59% rename from substrate/core/client/src/block_builder.rs rename to substrate/core/client/src/block_builder/block_builder.rs index d7365750a2..7d5b867e3a 100644 --- a/substrate/core/client/src/block_builder.rs +++ b/substrate/core/client/src/block_builder/block_builder.rs @@ -14,60 +14,48 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Utility struct to build a block. - +use super::api::BlockBuilder as BlockBuilderApi; use std::vec::Vec; -use std::marker::PhantomData; use codec::Encode; -use state_machine; -use runtime_primitives::traits::{Header as HeaderT, Hash, Block as BlockT, One, HashFor}; +use blockchain::HeaderBackend; +use runtime_primitives::traits::{ + Header as HeaderT, Hash, Block as BlockT, One, HashFor, ProvideRuntimeApi, ApiRef +}; +use primitives::H256; use runtime_primitives::generic::BlockId; -use runtime_api::BlockBuilder as BlockBuilderAPI; -use {backend, error, Client, CallExecutor}; +use runtime_api::Core; +use error; use runtime_primitives::ApplyOutcome; -use primitives::{Blake2Hasher, H256}; -use hash_db::Hasher; /// Utility for building new (valid) blocks from a stream of extrinsics. -pub struct BlockBuilder<'a, B, E, Block, H> -where - B: backend::Backend + 'a, - E: CallExecutor + Clone + 'a, - Block: BlockT, - H: Hasher, - H::Out: Ord, - -{ +pub struct BlockBuilder<'a, Block, A: ProvideRuntimeApi> where Block: BlockT { header: ::Header, extrinsics: Vec<::Extrinsic>, - client: &'a Client, + api: ApiRef<'a, A::Api>, block_id: BlockId, - changes: state_machine::OverlayedChanges, - _marker: PhantomData, } -impl<'a, B, E, Block> BlockBuilder<'a, B, E, Block, Blake2Hasher> +impl<'a, Block, A> BlockBuilder<'a, Block, A> where - B: backend::Backend + 'a, - E: CallExecutor + Clone + 'a, Block: BlockT, + A: ProvideRuntimeApi + HeaderBackend + 'a, + A::Api: BlockBuilderApi, { /// Create a new instance of builder from the given client, building on the latest block. - pub fn new(client: &'a Client) -> error::Result { - client.info().and_then(|i| Self::at_block(&BlockId::Hash(i.chain.best_hash), client)) + pub fn new(api: &'a A) -> error::Result { + api.info().and_then(|i| Self::at_block(&BlockId::Hash(i.best_hash), api)) } /// Create a new instance of builder from the given client using a particular block's ID to /// build upon. - pub fn at_block(block_id: &BlockId, client: &'a Client) -> error::Result { - let number = client.block_number_from_id(block_id)? + pub fn at_block(block_id: &BlockId, api: &'a A) -> error::Result { + let number = api.block_number_from_id(block_id)? .ok_or_else(|| error::ErrorKind::UnknownBlock(format!("{}", block_id)))? + One::one(); - let parent_hash = client.block_hash_from_id(block_id)? + let parent_hash = api.block_hash_from_id(block_id)? .ok_or_else(|| error::ErrorKind::UnknownBlock(format!("{}", block_id)))?; - let mut changes = Default::default(); let header = <::Header as HeaderT>::new( number, Default::default(), @@ -76,16 +64,14 @@ where Default::default() ); - client.initialise_block(block_id, &mut changes, &header)?; - changes.commit_prospective(); + let api = api.runtime_api(); + api.initialise_block(block_id, &header)?; Ok(BlockBuilder { header, extrinsics: Vec::new(), - client, + api, block_id: *block_id, - changes, - _marker: Default::default(), }) } @@ -93,30 +79,32 @@ where /// can be validly executed (by executing it); if it is invalid, it'll be returned along with /// the error. Otherwise, it will return a mutable reference to self (in order to chain). pub fn push(&mut self, xt: ::Extrinsic) -> error::Result<()> { - match self.client.apply_extrinsic(&self.block_id, &mut self.changes, &xt) { - Ok(result) => { - match result { + fn impl_push<'a, T, Block: BlockT>( + api: &mut ApiRef<'a, T>, + block_id: &BlockId, + xt: Block::Extrinsic, + extrinsics: &mut Vec + ) -> error::Result<()> where T: BlockBuilderApi { + api.map_api_result(|api| { + match api.apply_extrinsic(block_id, &xt)? { Ok(ApplyOutcome::Success) | Ok(ApplyOutcome::Fail) => { - self.extrinsics.push(xt); - self.changes.commit_prospective(); + extrinsics.push(xt); Ok(()) } Err(e) => { - self.changes.discard_prospective(); Err(error::ErrorKind::ApplyExtrinsicFailed(e).into()) } } - } - Err(e) => { - self.changes.discard_prospective(); - Err(e) - } + }) } + + //FIXME: Please NLL, help me! + impl_push(&mut self.api, &self.block_id, xt, &mut self.extrinsics) } /// Consume the builder to return a valid `Block` containing all pushed extrinsics. pub fn bake(mut self) -> error::Result { - self.header = self.client.finalise_block(&self.block_id, &mut self.changes)?; + self.header = self.api.finalise_block(&self.block_id)?; debug_assert_eq!( self.header.extrinsics_root().clone(), diff --git a/substrate/core/client/src/block_builder/mod.rs b/substrate/core/client/src/block_builder/mod.rs new file mode 100644 index 0000000000..f22f599ffd --- /dev/null +++ b/substrate/core/client/src/block_builder/mod.rs @@ -0,0 +1,23 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate 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. + +// Substrate 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 Substrate. If not, see . + +//! Utility struct to build a block. + +#[cfg(feature = "std")] +mod block_builder; +#[cfg(feature = "std")] +pub use self::block_builder::*; +pub mod api; diff --git a/substrate/core/client/src/blockchain.rs b/substrate/core/client/src/blockchain.rs index a2896ab7f3..8c46e5ebe2 100644 --- a/substrate/core/client/src/blockchain.rs +++ b/substrate/core/client/src/blockchain.rs @@ -40,6 +40,22 @@ pub trait HeaderBackend: Send + Sync { fn expect_header(&self, id: BlockId) -> Result { self.header(id)?.ok_or_else(|| ErrorKind::UnknownBlock(format!("{}", id)).into()) } + + /// Convert an arbitrary block ID into a block hash. + fn block_hash_from_id(&self, id: &BlockId) -> Result> { + match *id { + BlockId::Hash(h) => Ok(Some(h)), + BlockId::Number(n) => self.hash(n), + } + } + + /// Convert an arbitrary block ID into a block hash. + fn block_number_from_id(&self, id: &BlockId) -> Result>> { + match *id { + BlockId::Hash(_) => Ok(self.header(*id)?.map(|h| h.number().clone())), + BlockId::Number(n) => Ok(Some(n)), + } + } } /// Blockchain database backend. Does not perform any validation. diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index f1d1549185..c008f0d157 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -16,8 +16,8 @@ //! Substrate Client -use std::sync::Arc; -use error::{Error, ErrorKind}; +use std::{marker::PhantomData, sync::Arc}; +use error::Error; use futures::sync::mpsc; use parking_lot::{Mutex, RwLock}; use primitives::AuthorityId; @@ -27,25 +27,29 @@ use runtime_primitives::{ transaction_validity::{TransactionValidity, TransactionTag}, }; use consensus::{ImportBlock, ImportResult, BlockOrigin}; -use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, Zero, As, NumberFor, CurrentHeight, BlockNumberToHash}; -use runtime_primitives::{ApplyResult, BuildStorage}; -use runtime_api as api; +use runtime_primitives::traits::{ + Block as BlockT, Header as HeaderT, Zero, As, NumberFor, CurrentHeight, BlockNumberToHash, + ApiRef, ProvideRuntimeApi +}; +use runtime_primitives::BuildStorage; +use runtime_api::{Core as CoreAPI, CallApiAt, TaggedTransactionQueue, ConstructRuntimeApi}; use primitives::{Blake2Hasher, H256, ChangesTrieConfiguration, convert_hash}; use primitives::storage::{StorageKey, StorageData}; use primitives::storage::well_known_keys; -use codec::{Encode, Decode}; +use codec::Decode; use state_machine::{ - Backend as StateBackend, CodeExecutor, - ExecutionStrategy, ExecutionManager, ChangesTrieAnchorBlockId, - prove_read, key_changes, key_changes_proof, OverlayedChanges + Backend as StateBackend, CodeExecutor, ChangesTrieAnchorBlockId, + ExecutionStrategy, ExecutionManager, prove_read, + key_changes, key_changes_proof, OverlayedChanges }; +use codec::Encode; use backend::{self, BlockImportOperation}; use blockchain::{self, Info as ChainInfo, Backend as ChainBackend, HeaderBackend as ChainHeaderBackend}; use call_executor::{CallExecutor, LocalCallExecutor}; use executor::{RuntimeVersion, RuntimeInfo}; use notifications::{StorageNotifications, StorageEventStream}; -use {cht, error, in_mem, block_builder, genesis, consensus}; +use {cht, error, in_mem, block_builder::{self, api::BlockBuilder as BlockBuilderAPI}, genesis, consensus}; /// Type that implements `futures::Stream` of block import events. pub type ImportNotifications = mpsc::UnboundedReceiver>; @@ -54,7 +58,7 @@ pub type ImportNotifications = mpsc::UnboundedReceiver = mpsc::UnboundedReceiver>; /// Substrate Client -pub struct Client where Block: BlockT { +pub struct Client where Block: BlockT { backend: Arc, executor: E, storage_notifications: Mutex>, @@ -65,6 +69,7 @@ pub struct Client where Block: BlockT { block_execution_strategy: ExecutionStrategy, api_execution_strategy: ExecutionStrategy, changes_trie_config: Option, + _phantom: PhantomData, } /// A source of blockchain events. @@ -180,36 +185,36 @@ impl PrePostHeader { } /// Create an instance of in-memory client. -pub fn new_in_mem( +pub fn new_in_mem( executor: E, genesis_storage: S, -) -> error::Result, LocalCallExecutor, E>, Block>> -where - E: CodeExecutor + RuntimeInfo, - S: BuildStorage, - Block: BlockT, +) -> error::Result, LocalCallExecutor, E>, Block, RA>> + where + E: CodeExecutor + RuntimeInfo, + S: BuildStorage, + Block: BlockT, { new_with_backend(Arc::new(in_mem::Backend::new()), executor, genesis_storage) } /// Create a client with the explicitely provided backend. /// This is useful for testing backend implementations. -pub fn new_with_backend( +pub fn new_with_backend( backend: Arc, executor: E, build_genesis_storage: S, -) -> error::Result, Block>> -where - E: CodeExecutor + RuntimeInfo, - S: BuildStorage, - Block: BlockT, - B: backend::LocalBackend +) -> error::Result, Block, RA>> + where + E: CodeExecutor + RuntimeInfo, + S: BuildStorage, + Block: BlockT, + B: backend::LocalBackend { let call_executor = LocalCallExecutor::new(backend.clone(), executor); Client::new(backend, call_executor, build_genesis_storage, ExecutionStrategy::NativeWhenPossible, ExecutionStrategy::NativeWhenPossible) } -impl Client where +impl Client where B: backend::Backend, E: CallExecutor, Block: BlockT, @@ -255,6 +260,7 @@ impl Client where block_execution_strategy, api_execution_strategy, changes_trie_config, + _phantom: Default::default(), }) } @@ -323,6 +329,36 @@ impl Client where self.header_proof_with_cht_size(id, cht::SIZE) } + pub(crate) fn call_at_state( + &self, + at: &BlockId, + function: &'static str, + args: Vec, + changes: &mut OverlayedChanges + ) -> error::Result> { + let state = self.state_at(at)?; + + let execution_manager = || match self.api_execution_strategy { + ExecutionStrategy::NativeWhenPossible => ExecutionManager::NativeWhenPossible, + ExecutionStrategy::AlwaysWasm => ExecutionManager::AlwaysWasm, + ExecutionStrategy::Both => ExecutionManager::Both(|wasm_result, native_result| { + warn!("Consensus error between wasm and native runtime execution at block {:?}", at); + warn!(" Function {:?}", function); + warn!(" Native result {:?}", native_result); + warn!(" Wasm result {:?}", wasm_result); + wasm_result + }), + }; + + self.executor.call_at_state(&state, changes, function, &args, execution_manager()) + .map(|res| res.0) + } + + /// Get block hash by number. + pub fn block_hash(&self, block_number: <::Header as HeaderT>::Number) -> error::Result> { + self.backend.blockchain().hash(block_number) + } + /// Reads given header and generates CHT-based header proof for CHT of given size. pub fn header_proof_with_cht_size(&self, id: &BlockId, cht_size: u64) -> error::Result<(Block::Header, Vec>)> { let proof_error = || error::ErrorKind::Backend(format!("Failed to generate header proof for {:?}", id)); @@ -402,88 +438,41 @@ impl Client where } /// Create a new block, built on the head of the chain. - pub fn new_block(&self) -> error::Result> - where E: Clone + pub fn new_block( + &self + ) -> error::Result> where + E: Clone + Send + Sync, + RA: BlockBuilderAPI { block_builder::BlockBuilder::new(self) } /// Create a new block, built on top of `parent`. - pub fn new_block_at(&self, parent: &BlockId) -> error::Result> - where E: Clone + pub fn new_block_at( + &self, parent: &BlockId + ) -> error::Result> where + E: Clone + Send + Sync, + RA: BlockBuilderAPI { block_builder::BlockBuilder::at_block(parent, &self) } - /// Set up the native execution environment to call into a native runtime code. - pub fn call_api(&self, function: &'static str, args: &A) -> error::Result - where A: Encode, R: Decode - { - self.call_api_at(&BlockId::Number(self.info()?.chain.best_number), function, args) - } - - /// Call a runtime function at given block. - pub fn call_api_at(&self, at: &BlockId, function: &'static str, args: &A) -> error::Result - where A: Encode, R: Decode - { - let parent = at; - let header = <::Header as HeaderT>::new( - self.block_number_from_id(&parent)? - .ok_or_else(|| error::ErrorKind::UnknownBlock(format!("{:?}", parent)))? + As::sa(1), - Default::default(), - Default::default(), - self.block_hash_from_id(&parent)? - .ok_or_else(|| error::ErrorKind::UnknownBlock(format!("{:?}", parent)))?, - Default::default() - ); - let mut overlay = Default::default(); - - self.call_at_state(at, "initialise_block", &header, &mut overlay)?; - self.call_at_state(at, function, args, &mut overlay) - } - - fn call_at_state( - &self, - at: &BlockId, - function: &'static str, - args: &A, - changes: &mut OverlayedChanges - ) -> error::Result { - let state = self.state_at(at)?; - - let execution_manager = || match self.api_execution_strategy { - ExecutionStrategy::NativeWhenPossible => ExecutionManager::NativeWhenPossible, - ExecutionStrategy::AlwaysWasm => ExecutionManager::AlwaysWasm, - ExecutionStrategy::Both => ExecutionManager::Both(|wasm_result, native_result| { - warn!("Consensus error between wasm and native runtime execution at block {:?}", at); - warn!(" Function {:?}", function); - warn!(" Native result {:?}", native_result); - warn!(" Wasm result {:?}", wasm_result); - wasm_result - }), - }; - - self.executor.call_at_state( - &state, - changes, - function, - &args.encode(), - execution_manager() - ).and_then(|res| - R::decode(&mut &res.0[..]) - .ok_or_else(|| Error::from(ErrorKind::CallResultDecode(function))) - ) - } - // TODO [ToDr] Optimize and re-use tags from the pool. - fn transaction_tags(&self, at: Block::Hash, body: &Option>) -> error::Result> { + fn transaction_tags( + &self, + at: Block::Hash, + body: &Option> + ) -> error::Result> where + RA: TaggedTransactionQueue, + E: CallExecutor + Send + Sync + Clone, + { let id = BlockId::Hash(at); Ok(match body { None => vec![], Some(ref extrinsics) => { let mut tags = vec![]; for tx in extrinsics { - let tx = api::TaggedTransactionQueue::validate_transaction(self, &id, &tx)?; + let tx = self.runtime_api().validate_transaction(&id, &tx)?; match tx { TransactionValidity::Valid { mut provides, .. } => { tags.append(&mut provides); @@ -508,7 +497,10 @@ impl Client where body: Option>, authorities: Option>, finalized: bool, - ) -> error::Result { + ) -> error::Result where + RA: TaggedTransactionQueue, + E: CallExecutor + Send + Sync + Clone, + { let parent_hash = import_headers.post().parent_hash().clone(); match self.backend.blockchain().status(BlockId::Hash(hash))? { blockchain::BlockStatus::InChain => return Ok(ImportResult::AlreadyInChain), @@ -737,30 +729,9 @@ impl Client where } } - /// Get block hash by number. - pub fn block_hash(&self, block_number: <::Header as HeaderT>::Number) -> error::Result> { - self.backend.blockchain().hash(block_number) - } - - /// Convert an arbitrary block ID into a block hash. - pub fn block_hash_from_id(&self, id: &BlockId) -> error::Result> { - match *id { - BlockId::Hash(h) => Ok(Some(h)), - BlockId::Number(n) => self.block_hash(n), - } - } - - /// Convert an arbitrary block ID into a block hash. - pub fn block_number_from_id(&self, id: &BlockId) -> error::Result>> { - match *id { - BlockId::Hash(_) => Ok(self.header(id)?.map(|h| h.number().clone())), - BlockId::Number(n) => Ok(Some(n)), - } - } - /// Convert an arbitrary block ID into a block hash, returning error if the block is unknown. fn require_block_number_from_id(&self, id: &BlockId) -> error::Result> { - self.block_number_from_id(id) + self.backend.blockchain().block_number_from_id(id) .and_then(|n| n.ok_or_else(|| error::ErrorKind::UnknownBlock(format!("{}", id)).into())) } @@ -896,11 +867,87 @@ impl Client where } } - -impl consensus::BlockImport for Client where +impl ChainHeaderBackend for Client where B: backend::Backend, - E: CallExecutor + Clone, + E: CallExecutor + Send + Sync, Block: BlockT, + RA: Send + Sync +{ + fn header(&self, id: BlockId) -> error::Result> { + self.backend.blockchain().header(id) + } + + fn info(&self) -> error::Result> { + self.backend.blockchain().info() + } + + fn status(&self, id: BlockId) -> error::Result { + self.backend.blockchain().status(id) + } + + fn number(&self, hash: Block::Hash) -> error::Result::Header as HeaderT>::Number>> { + self.backend.blockchain().number(hash) + } + + fn hash(&self, number: NumberFor) -> error::Result> { + self.backend.blockchain().hash(number) + } +} + +impl ProvideRuntimeApi for Client where + B: backend::Backend, + E: CallExecutor + Clone + Send + Sync, + Block: BlockT, + RA: CoreAPI +{ + type Api = RA; + + fn runtime_api<'a>(&'a self) -> ApiRef<'a, Self::Api> { + Self::Api::construct_runtime_api(self) + } +} + +impl CallApiAt for Client where + B: backend::Backend, + E: CallExecutor + Clone + Send + Sync, + Block: BlockT, + RA: CoreAPI +{ + fn call_api_at( + &self, + at: &BlockId, + function: &'static str, + args: Vec, + changes: &mut OverlayedChanges, + initialised_block: &mut Option>, + ) -> error::Result> { + //TODO: Find a better way to prevent double block initialization + if function != "initialise_block" && initialised_block.map(|id| id != *at).unwrap_or(true) { + let parent = at; + let header = <::Header as HeaderT>::new( + self.block_number_from_id(parent)? + .ok_or_else(|| error::ErrorKind::UnknownBlock(format!("{:?}", parent)))? + + As::sa(1), + Default::default(), + Default::default(), + self.block_hash_from_id(&parent)? + .ok_or_else(|| error::ErrorKind::UnknownBlock(format!("{:?}", parent)))?, + Default::default() + ); + self.call_at_state(at, "initialise_block", header.encode(), changes)?; + *initialised_block = Some(*at); + } + + self.call_at_state(at, function, args, changes) + } +} + + +impl consensus::BlockImport for Client where + B: backend::Backend, + E: CallExecutor + Clone + Send + Sync, + Block: BlockT, + RA: TaggedTransactionQueue { type Error = Error; @@ -963,7 +1010,7 @@ impl consensus::BlockImport for Client where } } -impl consensus::Authorities for Client where +impl consensus::Authorities for Client where B: backend::Backend, E: CallExecutor + Clone, Block: BlockT, @@ -974,7 +1021,7 @@ impl consensus::Authorities for Client where } } -impl CurrentHeight for Client where +impl CurrentHeight for Client where B: backend::Backend, E: CallExecutor + Clone, Block: BlockT, @@ -985,7 +1032,7 @@ impl CurrentHeight for Client where } } -impl BlockNumberToHash for Client where +impl BlockNumberToHash for Client where B: backend::Backend, E: CallExecutor + Clone, Block: BlockT, @@ -998,7 +1045,7 @@ impl BlockNumberToHash for Client where } -impl BlockchainEvents for Client +impl BlockchainEvents for Client where E: CallExecutor, Block: BlockT, @@ -1022,7 +1069,7 @@ where } } -impl ChainHead for Client +impl ChainHead for Client where B: backend::Backend, E: CallExecutor, @@ -1033,116 +1080,17 @@ where } } -impl BlockBody for Client where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, +impl BlockBody for Client + where + B: backend::Backend, + E: CallExecutor, + Block: BlockT, { fn block_body(&self, id: &BlockId) -> error::Result::Extrinsic>>> { self.body(id) } } -impl api::Core for Client where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, -{ - type Error = Error; - - fn version(&self, at: &BlockId) -> Result { - self.call_api_at(at, "version", &()) - } - - fn authorities(&self, at: &BlockId) -> Result, Self::Error> { - self.authorities_at(at) - } - - fn execute_block(&self, at: &BlockId, block: &Block) -> Result<(), Self::Error> { - self.call_api_at(at, "execute_block", &(block)) - } -} - -impl api::Metadata> for Client where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, -{ - type Error = Error; - - fn metadata(&self, at: &BlockId) -> Result, Self::Error> { - self.executor.call(at, "metadata",&[]).map(|v| v.return_data) - } -} - -impl api::BlockBuilder for Client where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, -{ - type Error = Error; - type OverlayedChanges = OverlayedChanges; - - fn initialise_block( - &self, - at: &BlockId, - changes: &mut OverlayedChanges, - header: &::Header - ) -> Result<(), Self::Error> { - self.call_at_state(at, "initialise_block", header, changes) - } - - fn apply_extrinsic( - &self, - at: &BlockId, - changes: &mut OverlayedChanges, - extrinsic: &::Extrinsic - ) -> Result { - self.call_at_state(at, "apply_extrinsic", extrinsic, changes) - } - - fn finalise_block( - &self, - at: &BlockId, - changes: &mut OverlayedChanges - ) -> Result<::Header, Self::Error> { - self.call_at_state(at, "finalise_block", &(), changes) - } - - fn inherent_extrinsics( - &self, at: &BlockId, inherent: &InherentExtrinsic - ) -> Result, Self::Error> { - self.call_api_at(at, "inherent_extrinsics", &(inherent)) - } - - fn check_inherents( - &self, - at: &BlockId, - block: &Block, - data: &InherentData - ) -> Result, Self::Error> { - self.call_api_at(at, "check_inherents", &(block, data)) - } - - fn random_seed(&self, at: &BlockId) -> Result<::Hash, Self::Error> { - self.call_api_at(at, "random_seed", &()) - } -} - -impl api::TaggedTransactionQueue for Client where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, -{ - type Error = Error; - - fn validate_transaction( - &self, at: &BlockId, tx: &::Extrinsic - ) -> Result { - self.call_api_at(at, "validate_transaction", &(tx)) - } -} - #[cfg(test)] pub(crate) mod tests { use std::collections::HashMap; @@ -1155,14 +1103,14 @@ pub(crate) mod tests { use consensus::BlockOrigin; use test_client::client::backend::Backend as TestBackend; use test_client::BlockBuilderExt; - use test_client::runtime::{self, Block, Transfer}; + use test_client::runtime::{self, Block, Transfer, ClientWithApi, test_api::TestAPI}; /// Returns tuple, consisting of: /// 1) test client pre-filled with blocks changing balances; /// 2) roots of changes tries for these blocks /// 3) test cases in form (begin, end, key, vec![(block, extrinsic)]) that are required to pass pub fn prepare_client_with_key_changes() -> ( - test_client::client::Client, + test_client::client::Client, Vec, Vec<(u64, u64, Vec, Vec<(u64, u32)>)>, ) { @@ -1234,8 +1182,20 @@ pub(crate) mod tests { fn client_initialises_from_genesis_ok() { let client = test_client::new(); - assert_eq!(client.call_api::<_, u64>("balance_of", &Keyring::Alice.to_raw_public()).unwrap(), 1000); - assert_eq!(client.call_api::<_, u64>("balance_of", &Keyring::Ferdie.to_raw_public()).unwrap(), 0); + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.info().unwrap().chain.best_number), + &Keyring::Alice.to_raw_public() + ).unwrap(), + 1000 + ); + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.info().unwrap().chain.best_number), + &Keyring::Ferdie.to_raw_public() + ).unwrap(), + 0 + ); } #[test] @@ -1278,8 +1238,20 @@ pub(crate) mod tests { assert_eq!(client.info().unwrap().chain.best_number, 1); assert!(client.state_at(&BlockId::Number(1)).unwrap() != client.state_at(&BlockId::Number(0)).unwrap()); - assert_eq!(client.call_api::<_, u64>("balance_of", &Keyring::Alice.to_raw_public()).unwrap(), 958); - assert_eq!(client.call_api::<_, u64>("balance_of", &Keyring::Ferdie.to_raw_public()).unwrap(), 42); + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.info().unwrap().chain.best_number), + &Keyring::Alice.to_raw_public() + ).unwrap(), + 958 + ); + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.info().unwrap().chain.best_number), + &Keyring::Ferdie.to_raw_public() + ).unwrap(), + 42 + ); } #[test] diff --git a/substrate/core/client/src/lib.rs b/substrate/core/client/src/lib.rs index 255b068015..58fced9687 100644 --- a/substrate/core/client/src/lib.rs +++ b/substrate/core/client/src/lib.rs @@ -16,60 +16,101 @@ //! Substrate Client and associated logic. +#![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs)] #![recursion_limit="128"] +#[cfg(feature = "std")] extern crate substrate_trie as trie; extern crate parity_codec as codec; extern crate substrate_primitives as primitives; extern crate sr_primitives as runtime_primitives; +#[cfg(feature = "std")] extern crate substrate_state_machine as state_machine; +#[cfg(feature = "std")] extern crate substrate_consensus_common as consensus; -#[cfg(test)] extern crate substrate_keyring as keyring; -#[cfg(test)] extern crate substrate_test_client as test_client; -#[macro_use] extern crate substrate_telemetry; -#[macro_use] extern crate slog; // needed until we can reexport `slog_info` from `substrate_telemetry` +extern crate sr_version as runtime_version; +extern crate sr_std as rstd; +#[cfg(test)] +extern crate substrate_keyring as keyring; +#[cfg(test)] +extern crate substrate_test_client as test_client; +#[cfg(feature = "std")] +#[macro_use] +extern crate substrate_telemetry; +#[cfg(feature = "std")] +#[macro_use] +extern crate slog; // needed until we can reexport `slog_info` from `substrate_telemetry` +#[cfg(feature = "std")] extern crate fnv; +#[cfg(feature = "std")] extern crate futures; +#[cfg(feature = "std")] extern crate parking_lot; +#[cfg(feature = "std")] extern crate hash_db; +#[cfg(feature = "std")] extern crate heapsize; +#[cfg(feature = "std")] extern crate kvdb; -extern crate sr_api; -#[macro_use] extern crate error_chain; -#[macro_use] extern crate log; -#[cfg_attr(test, macro_use)] extern crate substrate_executor as executor; -#[cfg(test)] #[macro_use] extern crate hex_literal; -#[cfg(test)] extern crate kvdb_memorydb; +#[cfg(feature = "std")] +#[macro_use] +extern crate error_chain; +#[cfg(feature = "std")] +#[macro_use] +extern crate log; +#[cfg(feature = "std")] +#[cfg_attr(test, macro_use)] +extern crate substrate_executor as executor; +#[cfg(test)] +#[macro_use] +extern crate hex_literal; +#[cfg(feature = "std")] +#[cfg(test)] +extern crate kvdb_memorydb; +#[macro_use] +pub mod runtime_api; +#[cfg(feature = "std")] pub mod error; +#[cfg(feature = "std")] pub mod blockchain; +#[cfg(feature = "std")] pub mod backend; +#[cfg(feature = "std")] pub mod cht; +#[cfg(feature = "std")] pub mod in_mem; +#[cfg(feature = "std")] pub mod genesis; pub mod block_builder; +#[cfg(feature = "std")] pub mod light; +#[cfg(feature = "std")] mod leaves; +#[cfg(feature = "std")] mod call_executor; +#[cfg(feature = "std")] mod client; +#[cfg(feature = "std")] mod notifications; +#[cfg(feature = "std")] pub use blockchain::Info as ChainInfo; +#[cfg(feature = "std")] pub use call_executor::{CallResult, CallExecutor, LocalCallExecutor}; +#[cfg(feature = "std")] pub use client::{ new_with_backend, new_in_mem, BlockBody, BlockStatus, ImportNotifications, FinalityNotifications, BlockchainEvents, Client, ClientInfo, ChainHead, }; +#[cfg(feature = "std")] pub use notifications::{StorageEventStream, StorageChangeSet}; +#[cfg(feature = "std")] pub use state_machine::ExecutionStrategy; +#[cfg(feature = "std")] pub use leaves::LeafSet; - -/// Traits for interfacing with the runtime from the client. -pub mod runtime_api { - pub use sr_api::*; -} diff --git a/substrate/core/client/src/light/mod.rs b/substrate/core/client/src/light/mod.rs index 8791e2930f..29db81a001 100644 --- a/substrate/core/client/src/light/mod.rs +++ b/substrate/core/client/src/light/mod.rs @@ -48,11 +48,11 @@ pub fn new_light_backend, F: Fetcher>(bloc } /// Create an instance of light client. -pub fn new_light( +pub fn new_light( backend: Arc>, fetcher: Arc, genesis_storage: GS, -) -> ClientResult, RemoteCallExecutor, F, Blake2Hasher>, B>> +) -> ClientResult, RemoteCallExecutor, F, Blake2Hasher>, B, RA>> where B: BlockT, S: BlockchainStorage, diff --git a/substrate/core/client/src/runtime_api/core.rs b/substrate/core/client/src/runtime_api/core.rs new file mode 100644 index 0000000000..20798422b7 --- /dev/null +++ b/substrate/core/client/src/runtime_api/core.rs @@ -0,0 +1,62 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate 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. + +// Substrate 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 Substrate. If not, see . + +#[cfg(feature = "std")] +use super::{ConstructRuntimeApi, ApiExt}; +use runtime_version::RuntimeVersion; +use runtime_primitives::traits::Block as BlockT; +#[cfg(feature = "std")] +use runtime_primitives::generic::BlockId; +use primitives::AuthorityId; +#[cfg(feature = "std")] +use error::Result; +use rstd::vec::Vec; + +/// The `Core` api trait that is mandantory for each runtime. +/// This is the side that should be implemented for the `RuntimeApi` that is used by the `Client`. +/// Any modifications at one of these two traits, needs to be done on the other one as well. +#[cfg(feature = "std")] +pub trait Core: 'static + Send + Sync + ConstructRuntimeApi + ApiExt { + /// Returns the version of the runtime. + fn version(&self, at: &BlockId) -> Result; + /// Returns the authorities. + fn authorities(&self, at: &BlockId) -> Result>; + /// Execute the given block. + fn execute_block(&self, at: &BlockId, block: &Block) -> Result<()>; + /// Initialise a block with the given header. + fn initialise_block( + &self, + at: &BlockId, + header: &::Header + ) -> Result<()>; +} + +pub mod runtime { + use super::*; + + /// The `Core` api trait that is mandantory for each runtime. + /// This is the side that should be implemented for the `Runtime`. + pub trait Core { + /// Returns the version of the runtime. + fn version() -> RuntimeVersion; + /// Returns the authorities. + fn authorities() -> Vec; + /// Execute the given block. + fn execute_block(block: Block); + /// Initialise a block with the given header. + fn initialise_block(header: ::Header); + } +} diff --git a/substrate/core/sr-api/src/lib.rs b/substrate/core/client/src/runtime_api/macros.rs similarity index 79% rename from substrate/core/sr-api/src/lib.rs rename to substrate/core/client/src/runtime_api/macros.rs index ee931f706e..238314680b 100644 --- a/substrate/core/sr-api/src/lib.rs +++ b/substrate/core/client/src/runtime_api/macros.rs @@ -14,31 +14,14 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! API's for interfacing with the runtime via native/wasm. - -#![cfg_attr(not(feature = "std"), no_std)] - -extern crate sr_std as rstd; -extern crate sr_primitives as primitives; -#[doc(hidden)] -pub extern crate parity_codec as codec; -extern crate sr_version as runtime_version; - -#[doc(hidden)] -pub use primitives::{traits::Block as BlockT, generic::BlockId, transaction_validity::TransactionValidity, ApplyResult}; -use runtime_version::{ApiId, RuntimeVersion}; -use rstd::vec::Vec; -#[doc(hidden)] -pub use rstd::slice; -#[doc(hidden)] -pub use codec::{Encode, Decode}; +//! Macros for declaring and implementing the runtime APIs. /// Declare the given API traits. /// /// # Example: /// /// ```nocompile -/// decl_apis!{ +/// decl_runtime_apis!{ /// pub trait Test ExtraClientSide { /// fn test(event: Event) -> AccountId; /// @@ -66,11 +49,11 @@ pub use codec::{Encode, Decode}; /// } /// ``` /// -/// The declarations generated in the `runtime` module will be used by `impl_apis!` for implementing +/// The declarations generated in the `runtime` module will be used by `impl_runtime_apis!` for implementing /// the traits for a runtime. The other declarations should be used for implementing the interface /// in the client. #[macro_export] -macro_rules! decl_apis { +macro_rules! decl_runtime_apis { ( $( $( #[$attr:meta] )* @@ -89,7 +72,7 @@ macro_rules! decl_apis { )* ) => { $( - decl_apis!( + decl_runtime_apis!( @ADD_BLOCK_GENERIC $( #[$attr] )* pub trait $name $(< $( $generic_param $( : $generic_bound )* ),* >)* { @@ -107,7 +90,7 @@ macro_rules! decl_apis { $( $( $generic_param $( : $generic_bound )* ),* )* ); )* - decl_apis! { + decl_runtime_apis! { @GENERATE_RUNTIME_TRAITS $( $( #[$attr] )* @@ -136,7 +119,7 @@ macro_rules! decl_apis { Block: BlockT $(, $generic_param_rest:ident $( : $generic_bound_rest:ident )* )* ) => { - decl_apis!( + decl_runtime_apis!( @ADD_BLOCK_GENERIC $( #[$attr] )* pub trait $name $(< $( $generic_param_orig $( : $generic_bound_orig )* ),* >)* { @@ -149,7 +132,7 @@ macro_rules! decl_apis { )* }; Found; - $( $generic_param_parsed $( : $generic_bound_parsed )* , )* Block: $crate::BlockT; + $( $generic_param_parsed $( : $generic_bound_parsed )* , )* Block: $crate::runtime_api::BlockT; $( $generic_param_rest $( : $generic_bound_rest )* ),* ); }; @@ -169,7 +152,7 @@ macro_rules! decl_apis { $generic_param:ident $( : $generic_bound:ident )* $(, $generic_param_rest:ident $( : $generic_bound_rest:ident )* )* ) => { - decl_apis!( + decl_runtime_apis!( @ADD_BLOCK_GENERIC $( #[$attr] )* pub trait $name $(< $( $generic_param_orig $( : $generic_bound_orig )* ),* >)* { @@ -200,7 +183,7 @@ macro_rules! decl_apis { Found; $( $generic_param_parsed:ident $( : $generic_bound_parsed:path )* ),*; ) => { - decl_apis!( + decl_runtime_apis!( @GENERATE_RETURN_TYPES $( #[$attr] )* pub trait $name $(< $( $generic_param_orig $( : $generic_bound_orig )* ),* >)* { @@ -231,7 +214,7 @@ macro_rules! decl_apis { ; $( $generic_param_parsed:ident $( : $generic_bound_parsed:ident )* ),*; ) => { - decl_apis!( + decl_runtime_apis!( @GENERATE_RETURN_TYPES $( #[$attr] )* pub trait $name $(< $( $generic_param_orig $( : $generic_bound_orig )* ),* >)* { @@ -244,7 +227,7 @@ macro_rules! decl_apis { )* }; // We need to add the required generic Block parameter - Block: $crate::BlockT $(, $generic_param_parsed $( : $generic_bound_parsed )* )*; + Block: $crate::runtime_api::BlockT $(, $generic_param_parsed $( : $generic_bound_parsed )* )*; {}; $( $( $return_ty )*; )* ); @@ -265,7 +248,7 @@ macro_rules! decl_apis { $return_ty_current:ty; $( $( $return_ty_rest:ty )*; )* ) => { - decl_apis!( + decl_runtime_apis!( @GENERATE_RETURN_TYPES $( #[$attr] )* pub trait $name $(< $( $generic_param_orig $( : $generic_bound_orig )* ),* >)* { @@ -278,7 +261,7 @@ macro_rules! decl_apis { )* }; $( $generic_param_parsed $( : $generic_bound_parsed )* ),*; - { $( $result_return_ty; )* Result<$return_ty_current, Self::Error>; }; + { $( $result_return_ty; )* $crate::error::Result<$return_ty_current>; }; $( $( $return_ty_rest )*; )* ); }; @@ -298,7 +281,7 @@ macro_rules! decl_apis { ; $( $( $return_ty_rest:ty )*; )* ) => { - decl_apis!( + decl_runtime_apis!( @GENERATE_RETURN_TYPES $( #[$attr] )* pub trait $name $(< $( $generic_param_orig $( : $generic_bound_orig )* ),* >)* { @@ -311,7 +294,7 @@ macro_rules! decl_apis { )* }; $( $generic_param_parsed $( : $generic_bound_parsed )* ),*; - { $( $result_return_ty; )* Result<(), Self::Error>; }; + { $( $result_return_ty; )* $crate::error::Result<()>; }; $( $( $return_ty_rest )*; )* ); }; @@ -329,7 +312,7 @@ macro_rules! decl_apis { $( $generic_param_parsed:ident $( : $generic_bound_parsed:path )* ),*; { $( $result_return_ty:ty; )* }; ) => { - decl_apis!( + decl_runtime_apis!( @GENERATE_CLIENT_TRAITS $( #[$attr] )* pub trait $name $(< $( $generic_param_orig $( : $generic_bound_orig )* ),* >)* { @@ -360,15 +343,14 @@ macro_rules! decl_apis { { $( $result_return_ty:ty; )* }; ) => { $( #[$attr] )* - pub trait $name < $( $generic_param_parsed $( : $generic_bound_parsed )* ),* > { - /// The Error type returned by this API. - type Error; + #[cfg(feature = "std")] + pub trait $name < $( $generic_param_parsed $( : $generic_bound_parsed )* ),* > : $crate::runtime_api::Core { $( type $client_generic_param $( : $client_generic_bound )*; )* $( $( #[$fn_attr] )* - fn $fn_name $( < $( $fn_generic: $crate::Encode + $crate::Decode ),* > )* ( - &self, at: &$crate::BlockId $(, $param_name: $param_type )* + fn $fn_name $( < $( $fn_generic: $crate::runtime_api::Encode + $crate::runtime_api::Decode ),* > )* ( + &self, at: &$crate::runtime_api::BlockId $(, $param_name: $param_type )* ) -> $result_return_ty; )* } @@ -386,7 +368,7 @@ macro_rules! decl_apis { }; )* ) => { - decl_apis! { + decl_runtime_apis! { @GENERATE_RUNTIME_TRAITS_WITH_JOINED_GENERICS $( $( #[$attr] )* @@ -427,57 +409,8 @@ macro_rules! decl_apis { }; } -/// The ApiIds for the various standard runtime APIs. -pub mod id { - use super::ApiId; - - /// ApiId for the BlockBuilder trait. - pub const BLOCK_BUILDER: ApiId = *b"blkbuild"; - - /// ApiId for the TaggedTransactionQueue trait. - pub const TAGGED_TRANSACTION_QUEUE: ApiId = *b"validatx"; - - /// ApiId for the Metadata trait. - pub const METADATA: ApiId = *b"metadata"; -} - -decl_apis! { - /// The `Core` api trait that is mandantory for each runtime. - pub trait Core { - fn version() -> RuntimeVersion; - fn authorities() -> Vec; - fn execute_block(block: Block); - } - - /// The `Metadata` api trait that returns metadata for the runtime. - pub trait Metadata { - fn metadata() -> Data; - } - - /// The `TaggedTransactionQueue` api trait for interfering with the new transaction queue. - pub trait TaggedTransactionQueue { - fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity; - } - - /// The `BlockBuilder` api trait that provides required functions for building a block for a runtime. - pub trait BlockBuilder ExtraClientSide { - /// Initialise a block with the given header. - fn initialise_block(header: ::Header) ExtraClientSide(changes: &mut Self::OverlayedChanges); - /// Apply the given extrinsics. - fn apply_extrinsic(extrinsic: ::Extrinsic) ExtraClientSide(changes: &mut Self::OverlayedChanges) -> ApplyResult; - /// Finish the current block. - fn finalise_block() ExtraClientSide(changes: &mut Self::OverlayedChanges) -> ::Header; - /// Generate inherent extrinsics. - fn inherent_extrinsics(inherent: InherentExtrinsic) -> Vec; - /// Check that the inherents are valid. - fn check_inherents(block: Block, data: InherentData) -> Result<(), Error>; - /// Generate a random seed. - fn random_seed() -> ::Hash; - } -} - /// Implement the given API's for the given runtime. -/// All desired API's need to be implemented in one `impl_apis!` call. +/// All desired API's need to be implemented in one `impl_runtime_apis!` call. /// Besides generating the implementation for the runtime, there will be also generated an /// auxiliary module named `api` that contains function for inferring with the API in native/wasm. /// It is important to use the traits from the `runtime` module with this macro. @@ -486,18 +419,17 @@ decl_apis! { /// /// ```nocompile /// #[macro_use] -/// extern crate sr_api as runtime_api; +/// extern crate substrate_client as client; /// -/// use runtime_api::runtime::{Core, TaggedTransactionQueue}; +/// use client::runtime_api::runtime::{Core, TaggedTransactionQueue}; /// -/// impl_apis! { -/// impl Core for Runtime { -/// fn version() -> RuntimeVersion { 1 } -/// fn authorities() -> Vec { vec![1] } +/// impl_runtime_apis! { +/// impl Core for Runtime { +/// fn version() -> RuntimeVersion { unimplemented!() } +/// fn authorities() -> Vec { unimplemented!() } /// fn execute_block(block: Block) { /// //comment -/// let block = call_arbitrary_code(block); -/// execute(block); +/// unimplemented!() /// } /// } /// @@ -511,7 +443,7 @@ decl_apis! { /// fn main() {} /// ``` #[macro_export] -macro_rules! impl_apis { +macro_rules! impl_runtime_apis { ( impl $trait_name:ident $( < $( $generic:ident ),* > )* for $runtime:ident { $( @@ -529,7 +461,7 @@ macro_rules! impl_apis { } )* } - impl_apis! { + impl_runtime_apis! { $runtime; $( $fn_name ( $( $arg_name: $arg_ty ),* ); )*; $( $rest )* @@ -554,7 +486,7 @@ macro_rules! impl_apis { } )* } - impl_apis! { + impl_runtime_apis! { $runtime; $( $fn_name_parsed ( $( $arg_name_parsed: $arg_ty_parsed ),* ); )* $( $fn_name ( $( $arg_name: $arg_ty ),* ); )*; @@ -573,7 +505,7 @@ macro_rules! impl_apis { match method { $( stringify!($fn_name) => { - Some({impl_apis! { + Some({impl_runtime_apis! { @GENERATE_IMPL_CALL $runtime; $fn_name; @@ -594,11 +526,11 @@ macro_rules! impl_apis { &[0u8; 0] } else { unsafe { - $crate::slice::from_raw_parts(input_data, input_len) + $crate::runtime_api::slice::from_raw_parts(input_data, input_len) } }; - let output = { impl_apis! { + let output = { impl_runtime_apis! { @GENERATE_IMPL_CALL $runtime; $fn_name; @@ -622,13 +554,13 @@ macro_rules! impl_apis { $arg_name:ident : $arg_ty:ty; $input:ident; ) => { - let $arg_name : $arg_ty = match $crate::codec::Decode::decode(&mut $input) { + let $arg_name : $arg_ty = match $crate::runtime_api::Decode::decode(&mut $input) { Some(input) => input, None => panic!("Bad input data provided to {}", stringify!($fn_name)), }; let output = $runtime::$fn_name($arg_name); - $crate::codec::Encode::encode(&output) + $crate::runtime_api::Encode::encode(&output) }; (@GENERATE_IMPL_CALL $runtime:ident; @@ -636,12 +568,12 @@ macro_rules! impl_apis { $( $arg_name:ident : $arg_ty:ty ),*; $input:ident; ) => { - let ( $( $arg_name ),* ) : ($( $arg_ty ),*) = match $crate::codec::Decode::decode(&mut $input) { + let ( $( $arg_name ),* ) : ($( $arg_ty ),*) = match $crate::runtime_api::Decode::decode(&mut $input) { Some(input) => input, None => panic!("Bad input data provided to {}", stringify!($fn_name)), }; let output = $runtime::$fn_name($( $arg_name ),*); - $crate::codec::Encode::encode(&output) + $crate::runtime_api::Encode::encode(&output) }; } diff --git a/substrate/core/client/src/runtime_api/mod.rs b/substrate/core/client/src/runtime_api/mod.rs new file mode 100644 index 0000000000..62f0f0ca03 --- /dev/null +++ b/substrate/core/client/src/runtime_api/mod.rs @@ -0,0 +1,99 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate 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. + +// Substrate 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 Substrate. If not, see . + +//! All the functionality required for declaring and implementing runtime api's. +//! Core api's are also declared here. + +#[doc(hidden)] +#[cfg(feature = "std")] +pub use state_machine::OverlayedChanges; +#[doc(hidden)] +pub use runtime_primitives::{traits::Block as BlockT, generic::BlockId}; +#[cfg(feature = "std")] +use runtime_primitives::traits::ApiRef; +use runtime_version::ApiId; +#[doc(hidden)] +pub use rstd::slice; +#[cfg(feature = "std")] +use rstd::result; +#[doc(hidden)] +pub use codec::{Encode, Decode}; +#[cfg(feature = "std")] +use error; + +mod core; +#[macro_use] +mod macros; +mod traits; + +/// Something that can be constructed to a runtime api. +#[cfg(feature = "std")] +pub trait ConstructRuntimeApi: Sized { + /// Construct an instance of the runtime api. + fn construct_runtime_api<'a, T: CallApiAt>(call: &'a T) -> ApiRef<'a, Self>; +} + +/// An extension for the `RuntimeApi`. +#[cfg(feature = "std")] +pub trait ApiExt { + /// The given closure will be called with api instance. Inside the closure any api call is + /// allowed. After doing the api call, the closure is allowed to map the `Result` to a + /// different `Result` type. This can be important, as the internal data structure that keeps + /// track of modifications to the storage, discards changes when the `Result` is an `Err`. + /// On `Ok`, the structure commits the changes to an internal buffer. + fn map_api_result result::Result, R, E>( + &self, + map_call: F + ) -> result::Result; +} + +/// Something that can call the runtime api at a given block. +#[cfg(feature = "std")] +pub trait CallApiAt { + /// Calls the given api function with the given encoded arguments at the given block + /// and returns the encoded result. + fn call_api_at( + &self, + at: &BlockId, + function: &'static str, + args: Vec, + changes: &mut OverlayedChanges, + initialised_block: &mut Option>, + ) -> error::Result>; +} + +/// The ApiIds for the various standard runtime APIs. +pub mod id { + use super::ApiId; + + /// ApiId for the BlockBuilder trait. + pub const BLOCK_BUILDER: ApiId = *b"blkbuild"; + + /// ApiId for the TaggedTransactionQueue trait. + pub const TAGGED_TRANSACTION_QUEUE: ApiId = *b"validatx"; + + /// ApiId for the Metadata trait. + pub const METADATA: ApiId = *b"metadata"; +} + +pub use self::core::*; +pub use self::traits::*; + +/// The runtime apis that should be implemented for the `Runtime`. +pub mod runtime { + pub use super::core::runtime::Core; + pub use super::traits::runtime::*; +} diff --git a/substrate/core/client/src/runtime_api/traits.rs b/substrate/core/client/src/runtime_api/traits.rs new file mode 100644 index 0000000000..4d237a09ef --- /dev/null +++ b/substrate/core/client/src/runtime_api/traits.rs @@ -0,0 +1,35 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate 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. + +// Substrate 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 Substrate. If not, see . + +use primitives::OpaqueMetadata; +use runtime_primitives::{ + traits::{Block as BlockT}, + transaction_validity::TransactionValidity +}; + +decl_runtime_apis! { + /// The `Metadata` api trait that returns metadata for the runtime. + pub trait Metadata { + /// Returns the metadata of a runtime. + fn metadata() -> OpaqueMetadata; + } + + /// The `TaggedTransactionQueue` api trait for interfering with the new transaction queue. + pub trait TaggedTransactionQueue { + /// Validate the given transaction. + fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity; + } +} diff --git a/substrate/core/consensus/aura/src/lib.rs b/substrate/core/consensus/aura/src/lib.rs index 7355119074..e55756eacf 100644 --- a/substrate/core/consensus/aura/src/lib.rs +++ b/substrate/core/consensus/aura/src/lib.rs @@ -130,22 +130,7 @@ pub trait CompatibleDigestItem: Sized { fn as_aura_seal(&self) -> Option<(u64, &ed25519::Signature)>; } -impl CompatibleDigestItem for generic::DigestItem { - /// Construct a digest item which is a slot number and a signature on the - /// hash. - fn aura_seal(slot_number: u64, signature: ed25519::Signature) -> Self { - generic::DigestItem::Seal(slot_number, signature) - } - /// If this item is an Aura seal, return the slot number and signature. - fn as_aura_seal(&self) -> Option<(u64, &ed25519::Signature)> { - match self { - generic::DigestItem::Seal(slot, ref sign) => Some((*slot, sign)), - _ => None - } - } -} - -impl CompatibleDigestItem for generic::DigestItem { +impl CompatibleDigestItem for generic::DigestItem { /// Construct a digest item which is a slot number and a signature on the /// hash. fn aura_seal(slot_number: u64, signature: ed25519::Signature) -> Self { @@ -429,7 +414,7 @@ mod tests { type Error = client::error::Error; - type TestClient = client::Client; + type TestClient = client::Client; struct DummyFactory(Arc); struct DummyProposer(u64, Arc); diff --git a/substrate/core/finality-grandpa/src/lib.rs b/substrate/core/finality-grandpa/src/lib.rs index 97c93acfe3..21f75f47f8 100644 --- a/substrate/core/finality-grandpa/src/lib.rs +++ b/substrate/core/finality-grandpa/src/lib.rs @@ -41,7 +41,7 @@ extern crate substrate_keyring as keyring; use futures::prelude::*; use futures::stream::Fuse; use futures::sync::mpsc; -use client::{Client, ImportNotifications, backend::Backend, CallExecutor}; +use client::{Client, ImportNotifications, backend::Backend, CallExecutor, blockchain::HeaderBackend}; use codec::{Encode, Decode}; use runtime_primitives::traits::{As, NumberFor, Block as BlockT, Header as HeaderT}; use runtime_primitives::generic::BlockId; @@ -121,9 +121,10 @@ pub trait BlockStatus { fn block_number(&self, hash: Block::Hash) -> Result, Error>; } -impl> BlockStatus for Arc> where +impl, RA> BlockStatus for Arc> where B: Backend, - E: CallExecutor, + E: CallExecutor + Send + Sync, + RA: Send + Sync, NumberFor: As, { fn block_number(&self, hash: Block::Hash) -> Result, Error> { @@ -376,14 +377,14 @@ fn outgoing_messages( } /// The environment we run GRANDPA in. -pub struct Environment { - inner: Arc>, +pub struct Environment { + inner: Arc>, voters: HashMap, config: Config, network: N, } -impl, B, E, N> grandpa::Chain for Environment where +impl, B, E, N, RA> grandpa::Chain for Environment where Block: 'static, B: Backend + 'static, E: CallExecutor + 'static, @@ -434,12 +435,13 @@ impl, B, E, N> grandpa::Chain for Environm } } -impl, N> voter::Environment for Environment where +impl, N, RA> voter::Environment for Environment where Block: 'static, B: Backend + 'static, - E: CallExecutor + 'static, + E: CallExecutor + 'static + Send + Sync, N: Network + 'static, N::In: 'static, + RA: 'static + Send + Sync, NumberFor: As, { type Timer = Box>; @@ -543,9 +545,9 @@ impl, N> voter::Environment for Envi } /// Run a GRANDPA voter as a task. The returned future should be executed in a tokio runtime. -pub fn run_grandpa, N>( +pub fn run_grandpa, N, RA: Send + Sync + 'static>( config: Config, - client: Arc>, + client: Arc>, voters: HashMap, network: N, ) -> Result,client::error::Error> where diff --git a/substrate/core/network/src/chain.rs b/substrate/core/network/src/chain.rs index 6e4ec75cde..32cb18f276 100644 --- a/substrate/core/network/src/chain.rs +++ b/substrate/core/network/src/chain.rs @@ -68,52 +68,53 @@ pub trait Client: Send + Sync { ) -> Result<(NumberFor, Vec>), Error>; } -impl Client for SubstrateClient where +impl Client for SubstrateClient where B: client::backend::Backend + Send + Sync + 'static, E: CallExecutor + Send + Sync + 'static, Self: BlockImport, Block: BlockT, + RA: Send + Sync { fn import(&self, block: ImportBlock, new_authorities: Option>) -> Result { - (self as &SubstrateClient).import_block(block, new_authorities) + (self as &SubstrateClient).import_block(block, new_authorities) } fn info(&self) -> Result, Error> { - (self as &SubstrateClient).info() + (self as &SubstrateClient).info() } fn block_status(&self, id: &BlockId) -> Result { - (self as &SubstrateClient).block_status(id) + (self as &SubstrateClient).block_status(id) } fn block_hash(&self, block_number: ::Number) -> Result, Error> { - (self as &SubstrateClient).block_hash(block_number) + (self as &SubstrateClient).block_hash(block_number) } fn header(&self, id: &BlockId) -> Result, Error> { - (self as &SubstrateClient).header(id) + (self as &SubstrateClient).header(id) } fn body(&self, id: &BlockId) -> Result>, Error> { - (self as &SubstrateClient).body(id) + (self as &SubstrateClient).body(id) } fn justification(&self, id: &BlockId) -> Result, Error> { - (self as &SubstrateClient).justification(id) + (self as &SubstrateClient).justification(id) } fn header_proof(&self, block_number: ::Number) -> Result<(Block::Header, Vec>), Error> { - (self as &SubstrateClient).header_proof(&BlockId::Number(block_number)) + (self as &SubstrateClient).header_proof(&BlockId::Number(block_number)) } fn read_proof(&self, block: &Block::Hash, key: &[u8]) -> Result>, Error> { - (self as &SubstrateClient).read_proof(&BlockId::Hash(block.clone()), key) + (self as &SubstrateClient).read_proof(&BlockId::Hash(block.clone()), key) } fn execution_proof(&self, block: &Block::Hash, method: &str, data: &[u8]) -> Result<(Vec, Vec>), Error> { - (self as &SubstrateClient).execution_proof(&BlockId::Hash(block.clone()), method, data) + (self as &SubstrateClient).execution_proof(&BlockId::Hash(block.clone()), method, data) } fn key_changes_proof( @@ -123,6 +124,6 @@ impl Client for SubstrateClient where max: Block::Hash, key: &[u8] ) -> Result<(NumberFor, Vec>), Error> { - (self as &SubstrateClient).key_changes_proof(first, last, max, key) + (self as &SubstrateClient).key_changes_proof(first, last, max, key) } } diff --git a/substrate/core/network/src/import_queue.rs b/substrate/core/network/src/import_queue.rs index b31dee6310..5a21393ae4 100644 --- a/substrate/core/network/src/import_queue.rs +++ b/substrate/core/network/src/import_queue.rs @@ -677,7 +677,7 @@ pub mod tests { fn restart(&mut self) { self.restarts += 1; } } - fn prepare_good_block() -> (client::Client, Hash, u64, BlockData) { + fn prepare_good_block() -> (client::Client, Hash, u64, BlockData) { let client = test_client::new(); let block = client.new_block().unwrap().bake().unwrap(); client.justify_and_import(BlockOrigin::File, block).unwrap(); diff --git a/substrate/core/network/src/test/mod.rs b/substrate/core/network/src/test/mod.rs index 843ad836e0..f5b70f2e9a 100644 --- a/substrate/core/network/src/test/mod.rs +++ b/substrate/core/network/src/test/mod.rs @@ -28,7 +28,6 @@ use client::block_builder::BlockBuilder; use runtime_primitives::generic::BlockId; use io::SyncIo; use protocol::{Context, Protocol, ProtocolContext}; -use primitives::{Blake2Hasher}; use config::ProtocolConfig; use service::TransactionPool; use network_libp2p::{NodeIndex, PeerId, Severity}; @@ -137,7 +136,7 @@ pub struct TestPacket { recipient: NodeIndex, } -pub type PeersClient = client::Client; +pub type PeersClient = client::Client; pub struct Peer> { client: Arc, @@ -230,7 +229,7 @@ impl> Peer { /// Add blocks to the peer -- edit the block before adding pub fn generate_blocks(&self, count: usize, origin: BlockOrigin, mut edit_block: F) - where F: FnMut(&mut BlockBuilder) + where F: FnMut(&mut BlockBuilder) { for _ in 0 .. count { let mut builder = self.client.new_block().unwrap(); @@ -305,7 +304,7 @@ pub trait TestNetFactory: Sized { fn mut_peers>>)>(&mut self, closure: F ); fn started(&self) -> bool; - fn set_started(&mut self, now: bool); + fn set_started(&mut self, now: bool); fn default_config() -> ProtocolConfig { ProtocolConfig::default() @@ -468,7 +467,7 @@ impl TestNetFactory for TestNet { started: false } } - + fn make_verifier(&self, _client: Arc, _config: &ProtocolConfig) -> Arc { diff --git a/substrate/core/primitives/src/lib.rs b/substrate/core/primitives/src/lib.rs index 20f044a872..1bbfaafb24 100644 --- a/substrate/core/primitives/src/lib.rs +++ b/substrate/core/primitives/src/lib.rs @@ -129,7 +129,30 @@ impl From> for Bytes { fn from(s: Vec) -> Self { Bytes(s) } } +impl From for Bytes { + fn from(s: OpaqueMetadata) -> Self { Bytes(s.0) } +} + impl Deref for Bytes { type Target = [u8]; fn deref(&self) -> &[u8] { &self.0[..] } } + +/// Stores the encoded `RuntimeMetadata` for the native side as opaque type. +#[derive(Encode, Decode)] +pub struct OpaqueMetadata(Vec); + +impl OpaqueMetadata { + /// Creates a new instance with the given metadata blob. + pub fn new(metadata: Vec) -> Self { + OpaqueMetadata(metadata) + } +} + +impl rstd::ops::Deref for OpaqueMetadata { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} diff --git a/substrate/core/rpc/src/author/mod.rs b/substrate/core/rpc/src/author/mod.rs index 287b51dcc3..9d3482f1ee 100644 --- a/substrate/core/rpc/src/author/mod.rs +++ b/substrate/core/rpc/src/author/mod.rs @@ -71,23 +71,19 @@ build_rpc_trait! { } /// Authoring API -pub struct Author where - P: PoolChainApi + Sync + Send + 'static, -{ +pub struct Author where P: PoolChainApi + Sync + Send + 'static { /// Substrate client - client: Arc::Block>>, + client: Arc::Block, RA>>, /// Extrinsic pool pool: Arc>, /// Subscriptions manager subscriptions: Subscriptions, } -impl Author where - P: PoolChainApi + Sync + Send + 'static, -{ +impl Author where P: PoolChainApi + Sync + Send + 'static { /// Create new instance of Authoring API. pub fn new( - client: Arc::Block>>, + client: Arc::Block, RA>>, pool: Arc>, subscriptions: Subscriptions, ) -> Self { @@ -99,12 +95,13 @@ impl Author where } } -impl AuthorApi, BlockHash

> for Author where +impl AuthorApi, BlockHash

> for Author where B: client::backend::Backend<

::Block, Blake2Hasher> + Send + Sync + 'static, E: client::CallExecutor<

::Block, Blake2Hasher> + Send + Sync + 'static, P: PoolChainApi + Sync + Send + 'static, P::Block: traits::Block, P::Error: 'static, + RA: Send + Sync + 'static { type Metadata = ::metadata::Metadata; diff --git a/substrate/core/rpc/src/chain/mod.rs b/substrate/core/rpc/src/chain/mod.rs index 62b76ed232..e836857bc9 100644 --- a/substrate/core/rpc/src/chain/mod.rs +++ b/substrate/core/rpc/src/chain/mod.rs @@ -97,16 +97,16 @@ build_rpc_trait! { } /// Chain API with subscriptions support. -pub struct Chain { +pub struct Chain { /// Substrate client. - client: Arc>, + client: Arc>, /// Current subscriptions. subscriptions: Subscriptions, } -impl Chain { +impl Chain { /// Create new Chain API RPC handler. - pub fn new(client: Arc>, subscriptions: Subscriptions) -> Self { + pub fn new(client: Arc>, subscriptions: Subscriptions) -> Self { Self { client, subscriptions, @@ -114,10 +114,11 @@ impl Chain { } } -impl Chain where +impl Chain where Block: BlockT + 'static, B: client::backend::Backend + Send + Sync + 'static, E: client::CallExecutor + Send + Sync + 'static, + RA: Send + Sync + 'static { fn unwrap_or_best(&self, hash: Trailing) -> Result { Ok(match hash.into() { @@ -163,10 +164,11 @@ impl Chain where } } -impl ChainApi, SignedBlock> for Chain where +impl ChainApi, SignedBlock> for Chain where Block: BlockT + 'static, B: client::backend::Backend + Send + Sync + 'static, E: client::CallExecutor + Send + Sync + 'static, + RA: Send + Sync + 'static { type Metadata = ::metadata::Metadata; diff --git a/substrate/core/rpc/src/state/mod.rs b/substrate/core/rpc/src/state/mod.rs index d94b8f3dee..f1ad6a67c2 100644 --- a/substrate/core/rpc/src/state/mod.rs +++ b/substrate/core/rpc/src/state/mod.rs @@ -32,7 +32,7 @@ use primitives::{Blake2Hasher, Bytes}; use rpc::Result as RpcResult; use rpc::futures::{stream, Future, Sink, Stream}; use runtime_primitives::generic::BlockId; -use runtime_primitives::traits::{Block as BlockT, Header}; +use runtime_primitives::traits::{Block as BlockT, Header, ProvideRuntimeApi}; use subscriptions::Subscriptions; @@ -87,16 +87,16 @@ build_rpc_trait! { } /// State API with subscriptions support. -pub struct State { +pub struct State { /// Substrate client. - client: Arc>, + client: Arc>, /// Current subscriptions. subscriptions: Subscriptions, } -impl State { +impl State { /// Create new State API RPC handler. - pub fn new(client: Arc>, subscriptions: Subscriptions) -> Self { + pub fn new(client: Arc>, subscriptions: Subscriptions) -> Self { Self { client, subscriptions, @@ -104,7 +104,7 @@ impl State { } } -impl State where +impl State where Block: BlockT, B: client::backend::Backend, E: CallExecutor, @@ -114,10 +114,11 @@ impl State where } } -impl StateApi for State where +impl StateApi for State where Block: BlockT + 'static, B: client::backend::Backend + Send + Sync + 'static, - E: CallExecutor + Send + Sync + 'static, + E: CallExecutor + Send + Sync + 'static + Clone, + RA: Metadata { type Metadata = ::metadata::Metadata; @@ -151,7 +152,7 @@ impl StateApi for State where fn metadata(&self, block: Trailing) -> Result { let block = self.unwrap_or_best(block)?; - self.client.metadata(&BlockId::Hash(block)).map(Bytes).map_err(Into::into) + self.client.runtime_api().metadata(&BlockId::Hash(block)).map(Into::into).map_err(Into::into) } fn query_storage(&self, keys: Vec, from: Block::Hash, to: Trailing) -> Result>> { diff --git a/substrate/core/service/src/components.rs b/substrate/core/service/src/components.rs index a2b9225d3a..cde3a5aecb 100644 --- a/substrate/core/service/src/components.rs +++ b/substrate/core/service/src/components.rs @@ -16,21 +16,20 @@ //! Substrate service components. -use std::sync::Arc; -use std::marker::PhantomData; -use std::ops::Deref; +use std::{sync::Arc, net::SocketAddr, marker::PhantomData, ops::Deref}; use serde::{Serialize, de::DeserializeOwned}; use tokio::runtime::TaskExecutor; -use chain_spec::ChainSpec; +use chain_spec::{ChainSpec, Properties}; use client_db; -use client::{self, Client}; -use {error, Service}; +use client::{self, Client, runtime_api::{TaggedTransactionQueue, Metadata}}; +use {error, Service, RpcConfig, maybe_start_server, TransactionPoolAdapter}; use network::{self, OnDemand, import_queue::ImportQueue}; use substrate_executor::{NativeExecutor, NativeExecutionDispatch}; use transaction_pool::txpool::{self, Options as TransactionPoolOptions, Pool as TransactionPool}; -use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, BuildStorage}; +use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, BuildStorage, generic::SignedBlock}; use config::Configuration; -use primitives::{H256, Blake2Hasher}; +use primitives::{Blake2Hasher, H256}; +use rpc; // Type aliases. // These exist mainly to avoid typing `::Foo` all over the code. @@ -70,10 +69,10 @@ pub type LightExecutor = client::light::call_executor::RemoteCallExecutor< >; /// Full client type for a factory. -pub type FullClient = Client, FullExecutor, ::Block>; +pub type FullClient = Client, FullExecutor, ::Block, ::RuntimeApi>; /// Light client type for a factory. -pub type LightClient = Client, LightExecutor, ::Block>; +pub type LightClient = Client, LightExecutor, ::Block, ::RuntimeApi>; /// `ChainSpec` specialization for a factory. pub type FactoryChainSpec = ChainSpec<::Genesis>; @@ -97,7 +96,8 @@ pub type FactoryFullConfiguration = Configuration<::Conf pub type ComponentClient = Client< ::Backend, ::Executor, - FactoryBlock<::Factory> + FactoryBlock<::Factory>, + ::RuntimeApi, >; /// Block type for `Components` @@ -116,10 +116,114 @@ pub type PoolApi = ::TransactionPoolApi; pub trait RuntimeGenesis: Serialize + DeserializeOwned + BuildStorage {} impl RuntimeGenesis for T {} +/// Something that can start the RPC service. +pub trait StartRPC { + fn start_rpc( + client: Arc, C::RuntimeApi>>, + chain_name: String, + impl_name: &'static str, + impl_version: &'static str, + rpc_http: Option, + rpc_ws: Option, + properties: Properties, + task_executor: TaskExecutor, + transaction_pool: Arc>, + ) -> Result<(Option, Option), error::Error>; +} + +impl StartRPC for T where + T::RuntimeApi: Metadata>, + for<'de> SignedBlock>: ::serde::Deserialize<'de>, +{ + fn start_rpc( + client: Arc, T::RuntimeApi>>, + chain_name: String, + impl_name: &'static str, + impl_version: &'static str, + rpc_http: Option, + rpc_ws: Option, + properties: Properties, + task_executor: TaskExecutor, + transaction_pool: Arc>, + ) -> Result<(Option, Option), error::Error> { + let rpc_config = RpcConfig { properties, chain_name, impl_name, impl_version }; + + let handler = || { + let client = client.clone(); + let subscriptions = rpc::apis::Subscriptions::new(task_executor.clone()); + let chain = rpc::apis::chain::Chain::new(client.clone(), subscriptions.clone()); + let state = rpc::apis::state::State::new(client.clone(), subscriptions.clone()); + let author = rpc::apis::author::Author::new( + client.clone(), transaction_pool.clone(), subscriptions + ); + rpc::rpc_handler::, ComponentExHash, _, _, _, _>( + state, + chain, + author, + rpc_config.clone(), + ) + }; + + Ok(( + maybe_start_server(rpc_http, |address| rpc::start_http(address, handler()))?, + maybe_start_server(rpc_ws, |address| rpc::start_ws(address, handler()))?, + )) + } +} + +/// Something that can create an instance of `network::Params`. +pub trait CreateNetworkParams { + fn create_network_params( + client: Arc, C::RuntimeApi>>, + roles: network::Roles, + network_config: network::NetworkConfiguration, + on_demand: Option, NetworkService>>>, + transaction_pool_adapter: TransactionPoolAdapter, + specialization: S, + ) -> network::Params, S, ComponentExHash>; +} + +impl CreateNetworkParams for T where + T::RuntimeApi: TaggedTransactionQueue> +{ + fn create_network_params( + client: Arc, T::RuntimeApi>>, + roles: network::Roles, + network_config: network::NetworkConfiguration, + on_demand: Option, NetworkService>>>, + transaction_pool_adapter: TransactionPoolAdapter, + specialization: S, + ) -> network::Params, S, ComponentExHash> { + network::Params { + config: network::ProtocolConfig { roles }, + network_config, + chain: client, + on_demand: on_demand.map(|d| d as Arc>>), + transaction_pool: Arc::new(transaction_pool_adapter), + specialization, + } + } +} + +/// The super trait that combines all required traits a `Service` needs to implement. +pub trait ServiceTrait: + Deref> + + Send + + Sync + + 'static + + StartRPC + + CreateNetworkParams +{} +impl ServiceTrait for T where + T: Deref> + Send + Sync + 'static + StartRPC + CreateNetworkParams +{} + /// A collection of types and methods to build a service on top of the substrate service. pub trait ServiceFactory: 'static + Sized { /// Block type. type Block: BlockT; + /// The type that implements the runtime API. + type RuntimeApi: Send + Sync; /// Network protocol extensions. type NetworkProtocol: network::specialization::Specialization; /// Chain runtime. @@ -133,9 +237,9 @@ pub trait ServiceFactory: 'static + Sized { /// Other configuration for service members. type Configuration: Default; /// Extended full service type. - type FullService: Deref>> + Send + Sync + 'static; + type FullService: ServiceTrait>; /// Extended light service type. - type LightService: Deref>> + Send + Sync + 'static; + type LightService: ServiceTrait>; /// ImportQueue for full client type FullImportQueue: network::import_queue::ImportQueue + 'static; /// ImportQueue for light clients @@ -192,7 +296,7 @@ pub trait ServiceFactory: 'static + Sized { } /// A collection of types and function to generalise over full / light client type. -pub trait Components: 'static { +pub trait Components: Sized + 'static { /// Associated service factory. type Factory: ServiceFactory; /// Client backend. @@ -204,6 +308,12 @@ pub trait Components: 'static { Hash = <::Block as BlockT>::Hash, Block = FactoryBlock >; + /// The type that implements the runtime API. + type RuntimeApi: Send + Sync; + /// A type that can start the RPC. + type RPC: StartRPC; + /// A type that can create the network params. + type CreateNetworkParams: CreateNetworkParams; /// Our Import Queue type ImportQueue: ImportQueue> + 'static; @@ -212,11 +322,13 @@ pub trait Components: 'static { fn build_client( config: &FactoryFullConfiguration, executor: CodeExecutor, - ) - -> Result<( + ) -> Result< + ( Arc>, Option, NetworkService>>> - ), error::Error>; + ), + error::Error + >; /// Create extrinsic pool. fn build_transaction_pool(config: TransactionPoolOptions, client: Arc>) @@ -232,6 +344,29 @@ pub trait Components: 'static { /// A struct that implement `Components` for the full client. pub struct FullComponents { _factory: PhantomData, + service: Service>, +} + +impl FullComponents { + pub fn new( + config: FactoryFullConfiguration, + task_executor: TaskExecutor + ) -> Result { + Ok( + Self { + _factory: Default::default(), + service: Service::new(config, task_executor)?, + } + ) + } +} + +impl Deref for FullComponents { + type Target = Service; + + fn deref(&self) -> &Self::Target { + &self.service + } } impl Components for FullComponents { @@ -240,6 +375,9 @@ impl Components for FullComponents { type Backend = FullBackend; type TransactionPoolApi = ::FullTransactionPoolApi; type ImportQueue = Factory::FullImportQueue; + type RuntimeApi = Factory::RuntimeApi; + type RPC = Factory::FullService; + type CreateNetworkParams = Factory::FullService; fn build_client( config: &FactoryFullConfiguration, @@ -281,6 +419,29 @@ impl Components for FullComponents { /// A struct that implement `Components` for the light client. pub struct LightComponents { _factory: PhantomData, + service: Service>, +} + +impl LightComponents { + pub fn new( + config: FactoryFullConfiguration, + task_executor: TaskExecutor + ) -> Result { + Ok( + Self { + _factory: Default::default(), + service: Service::new(config, task_executor)?, + } + ) + } +} + +impl Deref for LightComponents { + type Target = Service; + + fn deref(&self) -> &Self::Target { + &self.service + } } impl Components for LightComponents { @@ -289,16 +450,19 @@ impl Components for LightComponents { type Backend = LightBackend; type TransactionPoolApi = ::LightTransactionPoolApi; type ImportQueue = ::LightImportQueue; + type RuntimeApi = Factory::RuntimeApi; + type RPC = Factory::LightService; + type CreateNetworkParams = Factory::LightService; fn build_client( config: &FactoryFullConfiguration, executor: CodeExecutor, ) - -> Result<( - Arc>, - Option, - NetworkService>>> - ), error::Error> + -> Result< + ( + Arc>, + Option, NetworkService>>> + ), error::Error> { let db_settings = client_db::DatabaseSettings { cache_size: None, diff --git a/substrate/core/service/src/consensus.rs b/substrate/core/service/src/consensus.rs index c9a528dd27..338c1680cf 100644 --- a/substrate/core/service/src/consensus.rs +++ b/substrate/core/service/src/consensus.rs @@ -23,11 +23,11 @@ use std::time::{self, Duration, Instant}; use std; use client::{self, error, Client as SubstrateClient, CallExecutor}; -use client::runtime_api::{Core, BlockBuilder as BlockBuilderAPI, id::BLOCK_BUILDER}; +use client::{block_builder::api::BlockBuilder as BlockBuilderApi, runtime_api::{id::BLOCK_BUILDER, Core}}; use codec::{Decode, Encode}; use consensus_common::{self, InherentData, evaluation, offline_tracker::OfflineTracker}; use primitives::{H256, AuthorityId, ed25519, Blake2Hasher}; -use runtime_primitives::traits::{Block as BlockT, Hash as HashT, Header as HeaderT}; +use runtime_primitives::traits::{Block as BlockT, Hash as HashT, Header as HeaderT, ProvideRuntimeApi}; use runtime_primitives::generic::BlockId; use transaction_pool::txpool::{self, Pool as TransactionPool}; @@ -47,11 +47,8 @@ pub trait BlockBuilder { } /// Local client abstraction for the consensus. -pub trait AuthoringApi: - Send - + Sync - + BlockBuilderAPI<::Block, Error=::Error> - + Core<::Block, AuthorityId, Error=::Error> +pub trait AuthoringApi: Send + Sync + ProvideRuntimeApi where + ::Api: Core { /// The block used for this API type. type Block: BlockT; @@ -67,20 +64,22 @@ pub trait AuthoringApi: ) -> Result; } -impl<'a, B, E, Block> BlockBuilder for client::block_builder::BlockBuilder<'a, B, E, Block, Blake2Hasher> where - B: client::backend::Backend + Send + Sync + 'static, +impl<'a, B, E, Block, RA> BlockBuilder for client::block_builder::BlockBuilder<'a, Block, SubstrateClient> where + B: client::backend::Backend + 'static, E: CallExecutor + Send + Sync + Clone + 'static, Block: BlockT, + RA: BlockBuilderApi, { fn push_extrinsic(&mut self, extrinsic: ::Extrinsic) -> Result<(), error::Error> { client::block_builder::BlockBuilder::push(self, extrinsic).map_err(Into::into) } } -impl<'a, B, E, Block> AuthoringApi for SubstrateClient where +impl AuthoringApi for SubstrateClient where B: client::backend::Backend + Send + Sync + 'static, E: CallExecutor + Send + Sync + Clone + 'static, Block: BlockT, + RA: BlockBuilderApi, { type Block = Block; type Error = client::error::Error; @@ -95,7 +94,7 @@ impl<'a, B, E, Block> AuthoringApi for SubstrateClient where let mut block_builder = self.new_block_at(at)?; if runtime_version.has_api(BLOCK_BUILDER, 1) { - self.inherent_extrinsics(at, &inherent_data)? + self.runtime_api().inherent_extrinsics(at, &inherent_data)? .into_iter().try_for_each(|i| block_builder.push(i))?; } @@ -106,10 +105,7 @@ impl<'a, B, E, Block> AuthoringApi for SubstrateClient where } /// Proposer factory. -pub struct ProposerFactory where - C: AuthoringApi, - A: txpool::ChainApi, -{ +pub struct ProposerFactory where A: txpool::ChainApi { /// The client instance. pub client: Arc, /// The transaction pool. @@ -122,10 +118,11 @@ pub struct ProposerFactory where impl consensus_common::Environment<::Block> for ProposerFactory where C: AuthoringApi, + ::Api: BlockBuilderApi<::Block>, A: txpool::ChainApi::Block>, client::error::Error: From<::Error> { - type Proposer = Proposer; + type Proposer = Proposer<::Block, C, A>; type Error = error::Error; fn init( @@ -138,7 +135,7 @@ impl consensus_common::Environment<::Block> for Propose let id = BlockId::hash(parent_hash); - let authorities: Vec = self.client.authorities(&id)?; + let authorities: Vec = self.client.runtime_api().authorities(&id)?; self.offline.write().note_new_block(&authorities[..]); info!("Starting consensus session on top of parent {:?}", parent_hash); @@ -161,21 +158,23 @@ impl consensus_common::Environment<::Block> for Propose } /// The proposer logic. -pub struct Proposer { +pub struct Proposer { client: Arc, start: Instant, - parent_hash: <::Block as BlockT>::Hash, - parent_id: BlockId<::Block>, - parent_number: <<::Block as BlockT>::Header as HeaderT>::Number, + parent_hash: ::Hash, + parent_id: BlockId, + parent_number: <::Header as HeaderT>::Number, transaction_pool: Arc>, offline: SharedOfflineTracker, authorities: Vec, minimum_timestamp: u64, } -impl consensus_common::Proposer<::Block> for Proposer where - C: AuthoringApi, - A: txpool::ChainApi::Block>, +impl consensus_common::Proposer<::Block> for Proposer where + Block: BlockT, + C: AuthoringApi, + ::Api: BlockBuilderApi, + A: txpool::ChainApi, client::error::Error: From<::Error> { type Create = Result<::Block, error::Error>; diff --git a/substrate/core/service/src/lib.rs b/substrate/core/service/src/lib.rs index ec26826d83..f64882bbe3 100644 --- a/substrate/core/service/src/lib.rs +++ b/substrate/core/service/src/lib.rs @@ -67,7 +67,7 @@ use parking_lot::{Mutex, RwLock}; use keystore::Store as Keystore; use client::BlockchainEvents; use runtime_primitives::traits::{Header, As}; -use runtime_primitives::generic::{BlockId, SignedBlock}; +use runtime_primitives::generic::BlockId; use exit_future::Signal; #[doc(hidden)] pub use tokio::runtime::TaskExecutor; @@ -87,8 +87,11 @@ pub use components::{ServiceFactory, FullBackend, FullExecutor, LightBackend, ComponentBlock, FullClient, LightClient, FullComponents, LightComponents, CodeExecutor, NetworkService, FactoryChainSpec, FactoryBlock, FactoryFullConfiguration, RuntimeGenesis, FactoryGenesis, - ComponentExHash, ComponentExtrinsic, FactoryExtrinsic, + ComponentExHash, ComponentExtrinsic, FactoryExtrinsic }; +use components::{StartRPC, CreateNetworkParams}; +#[doc(hidden)] +pub use network::OnDemand; const DEFAULT_PROTOCOL_ID: &'static str = "sup"; @@ -122,7 +125,7 @@ impl Service where Components: components::Components, ::Executor: std::clone::Clone, - for<'de> SignedBlock>: ::serde::Deserialize<'de>, + // ::RuntimeApi: client::runtime_api::BlockBuilder<<::Factory as ServiceFactory>::Block, Error=client::error::Error, OverlayedChanges=client::runtime_api::OverlayedChanges> + Sync + Send + client::runtime_api::Core<<::Factory as components::ServiceFactory>::Block, primitives::AuthorityId, Error=client::error::Error, OverlayedChanges=client::runtime_api::OverlayedChanges> + client::runtime_api::ConstructRuntimeApi::Factory as ServiceFactory>::Block> + client::runtime_api::Metadata<<::Factory as components::ServiceFactory>::Block, Vec, Error=client::error::Error> + client::runtime_api::TaggedTransactionQueue<<::Factory as components::ServiceFactory>::Block, Error=client::error::Error>, { /// Creates a new service. pub fn new( @@ -173,17 +176,10 @@ impl Service client: client.clone(), }; - let network_params = network::Params { - config: network::ProtocolConfig { - roles: config.roles, - }, - network_config: config.network, - chain: client.clone(), - on_demand: on_demand.clone() - .map(|d| d as Arc>>), - transaction_pool: Arc::new(transaction_pool_adapter), - specialization: network_protocol, - }; + let network_params = Components::CreateNetworkParams::create_network_params( + client.clone(), config.roles, config.network, on_demand.clone(), + transaction_pool_adapter, network_protocol + ); let mut protocol_id = network::ProtocolId::default(); let protocol_id_full = config.chain_spec.protocol_id().unwrap_or(DEFAULT_PROTOCOL_ID).as_bytes(); @@ -232,33 +228,13 @@ impl Service task_executor.spawn(events); } - // RPC - let rpc_config = RpcConfig { - chain_name: config.chain_spec.name().to_string(), - properties: config.chain_spec.properties().clone(), - impl_name: config.impl_name, - impl_version: config.impl_version, - }; - let (rpc_http, rpc_ws) = { - let handler = || { - let client = client.clone(); - let subscriptions = rpc::apis::Subscriptions::new(task_executor.clone()); - let chain = rpc::apis::chain::Chain::new(client.clone(), subscriptions.clone()); - let state = rpc::apis::state::State::new(client.clone(), subscriptions.clone()); - let author = rpc::apis::author::Author::new(client.clone(), transaction_pool.clone(), subscriptions.clone()); - rpc::rpc_handler::, ComponentExHash, _, _, _, _>( - state, - chain, - author, - rpc_config.clone(), - ) - }; - ( - maybe_start_server(config.rpc_http, |address| rpc::start_http(address, handler()))?, - maybe_start_server(config.rpc_ws, |address| rpc::start_ws(address, handler()))?, - ) - }; + // RPC + let (rpc_http, rpc_ws) = Components::RPC::start_rpc( + client.clone(), config.chain_spec.name().to_string(), config.impl_name, + config.impl_version, config.rpc_http, config.rpc_ws, config.chain_spec.properties(), + task_executor.clone(), transaction_pool.clone() + )?; let proposer = Arc::new(ProposerFactory { client: client.clone(), @@ -309,9 +285,7 @@ impl Service } } -impl Service where - Components: components::Components, -{ +impl Service where Components: components::Components { /// Get shared client instance. pub fn client(&self) -> Arc> { self.client.clone() @@ -420,7 +394,7 @@ impl TransactionPoolAdapter { } } -impl network::TransactionPool, ComponentBlock> for TransactionPoolAdapter { +impl network::TransactionPool, ComponentBlock> for TransactionPoolAdapter where ::RuntimeApi: Send + Sync{ fn transactions(&self) -> Vec<(ComponentExHash, ComponentExtrinsic)> { self.pool.ready() .map(|t| { @@ -468,41 +442,6 @@ impl network::TransactionPool, ComponentBlock< } } -/// Creates a simple `Service` implementation. -/// This `Service` just holds an instance to a `service::Service` and implements `Deref`. -/// It also provides a `new` function that takes a `config` and a `TaskExecutor`. -#[macro_export] -macro_rules! construct_simple_service { - ( - $name: ident - ) => { - pub struct $name { - inner: $crate::Arc<$crate::Service>, - } - - impl $name { - fn new( - config: FactoryFullConfiguration, - executor: $crate::TaskExecutor - ) -> $crate::Result { - Ok( - Self { - inner: $crate::Arc::new($crate::Service::new(config, executor)?) - } - ) - } - } - - impl $crate::Deref for $name { - type Target = $crate::Service; - - fn deref(&self) -> &Self::Target { - &self.inner - } - } - } -} - /// Constructs a service factory with the given name that implements the `ServiceFactory` trait. /// The required parameters are required to be given in the exact order. Some parameters are followed /// by `{}` blocks. These blocks are required and used to initialize the given parameter. @@ -544,6 +483,7 @@ macro_rules! construct_service_factory { $(#[$attr:meta])* struct $name:ident { Block = $block:ty, + RuntimeApi = $runtime_api:ty, NetworkProtocol = $protocol:ty { $( $protocol_init:tt )* }, RuntimeDispatch = $dispatch:ty, FullTransactionPoolApi = $full_transaction:ty { $( $full_transaction_init:tt )* }, @@ -564,6 +504,7 @@ macro_rules! construct_service_factory { #[allow(unused_variables)] impl $crate::ServiceFactory for $name { type Block = $block; + type RuntimeApi = $runtime_api; type NetworkProtocol = $protocol; type RuntimeDispatch = $dispatch; type FullTransactionPoolApi = $full_transaction; diff --git a/substrate/core/service/test/src/lib.rs b/substrate/core/service/test/src/lib.rs index 0a967e3cd6..a155b18b37 100644 --- a/substrate/core/service/test/src/lib.rs +++ b/substrate/core/service/test/src/lib.rs @@ -179,7 +179,10 @@ impl TestNet { } } -pub fn connectivity(spec: FactoryChainSpec) { +pub fn connectivity(spec: FactoryChainSpec) where + ::RuntimeApi: + client::block_builder::api::BlockBuilder<::Block> +{ const NUM_NODES: u32 = 10; { let temp = TempDir::new("substrate-connectivity-test").expect("Error creating test dir"); @@ -219,6 +222,9 @@ where F: ServiceFactory, B: Fn(&F::FullService) -> ImportBlock, E: Fn(&F::FullService) -> FactoryExtrinsic, + ::RuntimeApi: + client::block_builder::api::BlockBuilder<::Block> + + client::runtime_api::TaggedTransactionQueue<::Block> { const NUM_NODES: u32 = 10; const NUM_BLOCKS: usize = 512; @@ -255,6 +261,8 @@ where pub fn consensus(spec: FactoryChainSpec, authorities: Vec) where F: ServiceFactory, + ::RuntimeApi: + client::block_builder::api::BlockBuilder<::Block> { const NUM_NODES: u32 = 20; const NUM_BLOCKS: u64 = 200; diff --git a/substrate/core/sr-api/Cargo.toml b/substrate/core/sr-api/Cargo.toml deleted file mode 100644 index 2877dfa919..0000000000 --- a/substrate/core/sr-api/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "sr-api" -version = "0.1.0" -authors = ["Parity Technologies "] - -[dependencies] -parity-codec = { version = "2.1", default-features = false } -sr-std = { path = "../sr-std", default-features = false } -sr-primitives = { path = "../sr-primitives", default-features = false } -sr-version = { path = "../sr-version", default-features = false } - -[features] -default = ["std"] -std = [ - "sr-std/std", - "parity-codec/std", - "sr-primitives/std", - "sr-version/std", -] diff --git a/substrate/core/sr-primitives/src/traits.rs b/substrate/core/sr-primitives/src/traits.rs index 28c7997a0f..fe1c6756e2 100644 --- a/substrate/core/sr-primitives/src/traits.rs +++ b/substrate/core/sr-primitives/src/traits.rs @@ -27,8 +27,10 @@ use codec::{Codec, Encode, HasCompact}; pub use integer_sqrt::IntegerSquareRoot; pub use num_traits::{Zero, One, Bounded}; pub use num_traits::ops::checked::{CheckedAdd, CheckedSub, CheckedMul, CheckedDiv}; -use rstd::ops::{Add, Sub, Mul, Div, Rem, AddAssign, SubAssign, MulAssign, DivAssign, - RemAssign, Shl, Shr}; +use rstd::ops::{ + Add, Sub, Mul, Div, Rem, AddAssign, SubAssign, MulAssign, DivAssign, + RemAssign, Shl, Shr +}; /// A lazy value. pub trait Lazy { @@ -597,3 +599,33 @@ pub trait ProvideInherent { block: &Block, data: Self::Inherent, extract_function: &F ) -> Result<(), Self::Error>; } + +/// Auxiliary wrapper that holds an api instance and binds it to the given lifetime. +pub struct ApiRef<'a, T>(T, rstd::marker::PhantomData<&'a ()>); + +impl<'a, T> From for ApiRef<'a, T> { + fn from(api: T) -> Self { + ApiRef(api, Default::default()) + } +} + +impl<'a, T> rstd::ops::Deref for ApiRef<'a, T> { + type Target = T; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +/// Something that provides a runtime api. +pub trait ProvideRuntimeApi { + /// The concrete type that provides the api. + type Api; + + /// Returns the runtime api. + /// The returned instance will keep track of modifications to the storage. Any successful + /// call to an api function, will `commit` its changes to an internal buffer. Otherwise, + /// the modifications will be `discarded`. The modifications will not be applied to the + /// storage, even on a `commit`. + fn runtime_api<'a>(&'a self) -> ApiRef<'a, Self::Api>; +} diff --git a/substrate/core/test-client/Cargo.toml b/substrate/core/test-client/Cargo.toml index aa48f95211..9f282f9db3 100644 --- a/substrate/core/test-client/Cargo.toml +++ b/substrate/core/test-client/Cargo.toml @@ -10,6 +10,6 @@ substrate-executor = { path = "../executor" } substrate-consensus-common = { path = "../consensus/common" } substrate-keyring = { path = "../../core/keyring" } substrate-primitives = { path = "../primitives" } +substrate-state-machine = { path = "../state-machine" } substrate-test-runtime = { path = "../test-runtime" } sr-primitives = { path = "../sr-primitives" } - diff --git a/substrate/core/test-client/src/block_builder_ext.rs b/substrate/core/test-client/src/block_builder_ext.rs index 11dd859c07..3c334b07a1 100644 --- a/substrate/core/test-client/src/block_builder_ext.rs +++ b/substrate/core/test-client/src/block_builder_ext.rs @@ -20,8 +20,8 @@ use codec; use client; use keyring; use runtime; - -use primitives::{Blake2Hasher}; +use runtime_primitives::traits::ProvideRuntimeApi; +use client::block_builder::api::BlockBuilder; /// Extension trait for test block builder. pub trait BlockBuilderExt { @@ -29,10 +29,9 @@ pub trait BlockBuilderExt { fn push_transfer(&mut self, transfer: runtime::Transfer) -> Result<(), client::error::Error>; } -impl<'a, B, E> BlockBuilderExt for client::block_builder::BlockBuilder<'a, B, E, runtime::Block, Blake2Hasher> - where - B: client::backend::Backend, - E: client::CallExecutor + Clone, +impl<'a, A> BlockBuilderExt for client::block_builder::BlockBuilder<'a, runtime::Block, A> where + A: ProvideRuntimeApi + client::blockchain::HeaderBackend + 'a, + A::Api: BlockBuilder { fn push_transfer(&mut self, transfer: runtime::Transfer) -> Result<(), client::error::Error> { self.push(sign_tx(transfer)) diff --git a/substrate/core/test-client/src/client_ext.rs b/substrate/core/test-client/src/client_ext.rs index 61133c4d9d..f16bfce40f 100644 --- a/substrate/core/test-client/src/client_ext.rs +++ b/substrate/core/test-client/src/client_ext.rs @@ -35,11 +35,11 @@ pub trait TestClient: Sized { fn genesis_hash(&self) -> runtime::Hash; } -impl TestClient for Client +impl TestClient for Client where B: client::backend::Backend, E: client::CallExecutor, - Self: BlockImport + Self: BlockImport, { fn justify_and_import(&self, origin: BlockOrigin, block: runtime::Block) -> client::error::Result<()> diff --git a/substrate/core/test-client/src/lib.rs b/substrate/core/test-client/src/lib.rs index 6a92a3f692..ce504bd085 100644 --- a/substrate/core/test-client/src/lib.rs +++ b/substrate/core/test-client/src/lib.rs @@ -27,6 +27,7 @@ pub extern crate substrate_client as client; pub extern crate substrate_keyring as keyring; pub extern crate substrate_test_runtime as runtime; pub extern crate substrate_consensus_common as consensus; +extern crate substrate_state_machine as state_machine; pub mod client_ext; pub mod trait_tests; @@ -65,12 +66,12 @@ pub type Executor = client::LocalCallExecutor< >; /// Creates new client instance used for tests. -pub fn new() -> client::Client { +pub fn new() -> client::Client { new_with_backend(Arc::new(Backend::new()), false) } /// Creates new test client instance that suports changes trie creation. -pub fn new_with_changes_trie() -> client::Client { +pub fn new_with_changes_trie() -> client::Client { new_with_backend(Arc::new(Backend::new()), true) } @@ -79,7 +80,7 @@ pub fn new_with_changes_trie() -> client::Client( backend: Arc, support_changes_trie: bool -) -> client::Client>, runtime::Block> +) -> client::Client>, runtime::Block, runtime::ClientWithApi> where B: backend::LocalBackend, { diff --git a/substrate/core/test-runtime/Cargo.toml b/substrate/core/test-runtime/Cargo.toml index 6687c019f6..42f4d1edd1 100644 --- a/substrate/core/test-runtime/Cargo.toml +++ b/substrate/core/test-runtime/Cargo.toml @@ -11,8 +11,8 @@ serde_derive = { version = "1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } substrate-keyring = { path = "../keyring", optional = true } +substrate-client = { path = "../client", optional = true } substrate-primitives = { path = "../primitives", default-features = false } -sr-api = { path = "../sr-api", default-features = false } sr-std = { path = "../sr-std", default-features = false } sr-io = { path = "../sr-io", default-features = false } sr-primitives = { path = "../sr-primitives", default-features = false } @@ -26,9 +26,9 @@ std = [ "hex-literal", "serde", "serde_derive", + "substrate-client", "substrate-keyring", "parity-codec/std", - "sr-api/std", "sr-std/std", "sr-io/std", "srml-support/std", diff --git a/substrate/core/test-runtime/src/lib.rs b/substrate/core/test-runtime/src/lib.rs index 0a9c02d8df..9fbdb11638 100644 --- a/substrate/core/test-runtime/src/lib.rs +++ b/substrate/core/test-runtime/src/lib.rs @@ -22,12 +22,13 @@ extern crate sr_std as rstd; extern crate parity_codec as codec; extern crate sr_primitives as runtime_primitives; +#[macro_use] +extern crate substrate_client as client; + #[macro_use] extern crate srml_support as runtime_support; #[macro_use] extern crate parity_codec_derive; -#[macro_use] -extern crate sr_api as runtime_api; extern crate sr_io as runtime_io; #[macro_use] extern crate sr_version as runtime_version; @@ -47,12 +48,20 @@ pub mod system; use rstd::prelude::*; use codec::{Encode, Decode}; -use runtime_api::runtime::*; +use client::{runtime_api::runtime::*, block_builder::api::runtime::*}; +#[cfg(feature = "std")] +use client::runtime_api::ApiExt; use runtime_primitives::traits::{BlindCheckable, BlakeTwo256, Block as BlockT, Extrinsic as ExtrinsicT}; +#[cfg(feature = "std")] +use runtime_primitives::traits::ApiRef; use runtime_primitives::{ApplyResult, Ed25519Signature, transaction_validity::TransactionValidity}; +#[cfg(feature = "std")] +use runtime_primitives::generic::BlockId; use runtime_version::RuntimeVersion; pub use primitives::hash::H256; use primitives::AuthorityId; +#[cfg(feature = "std")] +use primitives::OpaqueMetadata; #[cfg(any(feature = "std", test))] use runtime_version::NativeVersion; @@ -152,8 +161,8 @@ pub fn changes_trie_config() -> primitives::ChangesTrieConfiguration { } } -mod test_api { - decl_apis! { +pub mod test_api { + decl_runtime_apis! { pub trait TestAPI { fn balance_of(id: AccountId) -> u64; } @@ -162,10 +171,161 @@ mod test_api { use test_api::runtime::TestAPI; +#[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, +} + +#[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: &BlockId, + 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(); + } + } + } +} + +#[cfg(feature = "std")] +impl client::runtime_api::Core for ClientWithApi { + fn version(&self, at: &BlockId) -> Result { + self.call_api_at(at, "version", &()) + } + + fn authorities(&self, at: &BlockId) -> Result, client::error::Error> { + self.call_api_at(at, "authorities", &()) + } + + fn execute_block(&self, at: &BlockId, block: &Block) -> Result<(), client::error::Error> { + self.call_api_at(at, "execute_block", block) + } + + fn initialise_block(&self, at: &BlockId, 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: &BlockId, extrinsic: &::Extrinsic) -> Result { + self.call_api_at(at, "apply_extrinsic", extrinsic) + } + + fn finalise_block(&self, at: &BlockId) -> Result<::Header, client::error::Error> { + self.call_api_at(at, "finalise_block", &()) + } + + fn inherent_extrinsics( + &self, at: &BlockId, inherent: &Inherent + ) -> Result, client::error::Error> { + self.call_api_at(at, "inherent_extrinsics", inherent) + } + + fn check_inherents(&self, at: &BlockId, block: &Block, inherent: &Inherent) -> Result, client::error::Error> { + self.call_api_at(at, "check_inherents", &(block, inherent)) + } + + fn random_seed(&self, at: &BlockId) -> 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: &BlockId, + 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: &BlockId) -> Result { + self.call_api_at(at, "metadata", &()) + } +} + +#[cfg(feature = "std")] +impl test_api::TestAPI for ClientWithApi { + fn balance_of(&self, at: &BlockId, id: &AccountId) -> Result { + self.call_api_at(at, "balance_of", id) + } +} + struct Runtime; -impl_apis! { - impl Core for Runtime { +impl_runtime_apis! { + impl Core for Runtime { fn version() -> RuntimeVersion { version() } @@ -177,19 +337,19 @@ impl_apis! { fn execute_block(block: Block) { system::execute_block(block) } + + fn initialise_block(header: ::Header) { + system::initialise_block(header) + } } - impl TaggedTransactionQueue for Runtime { + impl TaggedTransactionQueue for Runtime { fn validate_transaction(utx: ::Extrinsic) -> TransactionValidity { system::validate_transaction(utx) } } impl BlockBuilder for Runtime { - fn initialise_block(header: ::Header) { - system::initialise_block(header) - } - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyResult { system::execute_transaction(extrinsic) } diff --git a/substrate/core/test-runtime/wasm/Cargo.lock b/substrate/core/test-runtime/wasm/Cargo.lock index a0ececf55f..f9c0964148 100644 --- a/substrate/core/test-runtime/wasm/Cargo.lock +++ b/substrate/core/test-runtime/wasm/Cargo.lock @@ -6,6 +6,27 @@ dependencies = [ "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "backtrace" +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)", + "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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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 = "base58" version = "0.1.0" @@ -30,11 +51,35 @@ name = "byteorder" version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bytes" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.6 (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.25" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "cfg-if" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "chrono" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "cloudabi" version = "0.0.3" @@ -48,6 +93,11 @@ name = "constant_time_eq" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crossbeam" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "crossbeam-deque" version = "0.2.0" @@ -57,6 +107,15 @@ dependencies = [ "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-deque" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam-epoch" version = "0.3.1" @@ -71,6 +130,19 @@ dependencies = [ "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-epoch" +version = "0.5.2" +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.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.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)", +] + [[package]] name = "crossbeam-utils" version = "0.2.2" @@ -79,6 +151,11 @@ dependencies = [ "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-utils" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "crunchy" version = "0.1.6" @@ -102,6 +179,14 @@ name = "environmental" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "error-chain" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fixed-hash" version = "0.3.0-beta.3" @@ -115,6 +200,24 @@ dependencies = [ "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "fuchsia-zircon" version = "0.3.3" @@ -129,6 +232,11 @@ name = "fuchsia-zircon-sys" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "futures" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "gcc" version = "0.3.54" @@ -172,11 +280,58 @@ dependencies = [ "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "httparse" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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-sqrt" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kvdb" +version = "0.1.0" +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)", + "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "lazy_static" version = "0.2.11" @@ -190,11 +345,25 @@ dependencies = [ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "lazycell" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "libc" version = "0.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "lock_api" +version = "0.1.4" +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)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "log" version = "0.3.9" @@ -229,6 +398,11 @@ dependencies = [ "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "memoffset" version = "0.2.1" @@ -248,16 +422,84 @@ name = "memory_units" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "mio" +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 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.5 (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.5 (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" +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.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (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 = "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)", + "libc 0.2.43 (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" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "num-integer" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num-traits" version = "0.2.6" @@ -271,6 +513,30 @@ dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "openssl" +version = "0.10.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (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)", + "libc 0.2.43 (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-sys" +version = "0.9.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.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.3.3" @@ -279,6 +545,11 @@ 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 = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "parity-codec" version = "2.1.5" @@ -315,6 +586,15 @@ dependencies = [ "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "parking_lot" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.4 (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]] name = "parking_lot_core" version = "0.2.14" @@ -326,6 +606,28 @@ dependencies = [ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "parking_lot_core" +version = "0.3.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)", + "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.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 = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pkg-config" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "proc-macro-hack" version = "0.4.1" @@ -401,6 +703,11 @@ dependencies = [ "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "redox_syscall" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "ring" version = "0.12.1" @@ -413,6 +720,11 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rustc-demangle" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc-hex" version = "2.0.1" @@ -426,6 +738,11 @@ dependencies = [ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "ryu" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "scopeguard" version = "0.3.3" @@ -459,6 +776,62 @@ dependencies = [ "syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "serde_json" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.79 (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 = "slab" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slog" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slog-async" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slog-json" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slog-scope" +version = "4.0.1" +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.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "smallvec" version = "0.6.5" @@ -467,16 +840,6 @@ dependencies = [ "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "sr-api" -version = "0.1.0" -dependencies = [ - "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-primitives 0.1.0", - "sr-std 0.1.0", - "sr-version 0.1.0", -] - [[package]] name = "sr-io" version = "0.1.0" @@ -534,6 +897,8 @@ dependencies = [ "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-std 0.1.0", + "substrate-primitives 0.1.0", ] [[package]] @@ -561,6 +926,77 @@ 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" +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.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)", + "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (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)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "sr-version 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-executor 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-telemetry 0.3.0", + "substrate-trie 0.4.0", +] + +[[package]] +name = "substrate-consensus-common" +version = "0.1.0" +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", + "sr-version 0.1.0", + "substrate-primitives 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-executor" +version = "0.1.0" +dependencies = [ + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain 0.12.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.5 (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.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", + "sr-version 0.1.0", + "substrate-primitives 0.1.0", + "substrate-serializer 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-trie 0.4.0", + "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-keyring" +version = "0.1.0" +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)", + "substrate-primitives 0.1.0", +] + [[package]] name = "substrate-primitives" version = "0.1.0" @@ -586,6 +1022,14 @@ dependencies = [ "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "substrate-serializer" +version = "0.1.0" +dependencies = [ + "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "substrate-state-machine" version = "0.1.0" @@ -602,6 +1046,20 @@ dependencies = [ "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] +[[package]] +name = "substrate-telemetry" +version = "0.3.0" +dependencies = [ + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (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.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)", + "ws 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "substrate-test-runtime" version = "0.1.0" @@ -610,12 +1068,12 @@ dependencies = [ "log 0.4.5 (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-api 0.1.0", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", "sr-version 0.1.0", "srml-support 0.1.0", + "substrate-client 0.1.0", "substrate-primitives 0.1.0", ] @@ -650,6 +1108,182 @@ dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "take_mut" +version = "0.2.2" +source = "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.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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 = "tokio-current-thread" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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]] +name = "tokio-executor" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.6" +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.25 (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.5 (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.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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.6.1 (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.5 (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.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.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.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.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.5 (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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.5 (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.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 = "trie-db" version = "0.9.0" @@ -687,6 +1321,19 @@ dependencies = [ "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicode-xid" version = "0.1.0" @@ -705,6 +1352,21 @@ name = "untrusted" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "url" +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.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 = "vcpkg" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "version_check" version = "0.1.5" @@ -726,6 +1388,11 @@ dependencies = [ "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "winapi" version = "0.3.6" @@ -735,6 +1402,11 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -745,52 +1417,115 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (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.5 (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]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (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 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 base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" "checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781" +"checksum bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ce55bd354b095246fc34caf4e9e242f5297a7fd938b090cadfea6eee614aa62" +"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" "checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3" +"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" +"checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" +"checksum crossbeam-deque 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3486aefc4c0487b9cb52372c97df0a48b8c249514af1ee99703bf70d2f2ceda1" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" +"checksum crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30fecfcac6abfef8771151f8be4abc9e4edc112c2bcb233314cafde2680536e9" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" +"checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" "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 elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" "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 fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" +"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 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.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "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 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.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ea155abb3ba6f382a75f1418988c05fe82959ed9ce727de427f9cfd425b0c903" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "72ae89206cea31c32014b39d5a454b96135894221610dbfd19cf4d2d044fa546" "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 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 lock_api 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" "checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f" "checksum mashup 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d886e371548f5c66258a99df9ec03366bff02cc96ea3d3f8f346b5d2d6836de7" "checksum mashup-impl 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8d426741e35fab52542d84dfee615f442c2b37247bee8b1ed5c25ca723487580" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "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 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 nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f" +"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 num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" "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 openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613" +"checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +"checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" "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-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" +"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 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.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" "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.19 (registry+https://github.com/rust-lang/crates.io-index)" = "ffe022fb8c8bd254524b0b3305906c1921fa37a84a644e29079a9e62200c3901" @@ -800,29 +1535,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "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 ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" +"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" "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 ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "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.79 (registry+https://github.com/rust-lang/crates.io-index)" = "84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9" "checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe" +"checksum serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)" = "43344e7ce05d0d8280c5940cabb4964bea626aa58b1ec0e8c73fa2a8512a38ce" +"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +"checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" +"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.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "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 syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" "checksum syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)" = "854b08a640fc8f54728fb95321e3ec485b365a97fe47609797c671addd1dde69" +"checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" +"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 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-current-thread 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f90fcd90952f0a496d438a976afba8e5c205fb12123f813d8ab3aa1c8436638c" +"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-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 trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" "checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" +"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-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 untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" "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 wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d184c4b7081f30316f74f8d73c197314dcb56ea7af9323522b42a2fa9cb19453" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "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-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"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" diff --git a/substrate/core/test-runtime/wasm/Cargo.toml b/substrate/core/test-runtime/wasm/Cargo.toml index f606a6b300..02b97a2c7e 100644 --- a/substrate/core/test-runtime/wasm/Cargo.toml +++ b/substrate/core/test-runtime/wasm/Cargo.toml @@ -9,7 +9,7 @@ hex-literal = { version = "0.1.0", optional = true } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } substrate-primitives = { path = "../../primitives", default-features = false } -sr-api = { path = "../../sr-api", default-features = false } +substrate-client = { path = "../../client", default-features = false } sr-std = { path = "../../sr-std", default-features = false } sr-io = { path = "../../sr-io", default-features = false } sr-version = { path = "../../sr-version", default-features = false } @@ -22,12 +22,12 @@ std = [ "log", "hex-literal", "parity-codec/std", - "sr-api/std", "sr-std/std", "sr-io/std", "srml-support/std", "sr-version/std", "substrate-primitives/std", + "substrate-client/std", "sr-primitives/std" ] diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index c526eacd1f6de9e9567014c2f14dd520dcceb777..76ec888e142aeab6808077bf9e13aa9ff43b221c 100644 GIT binary patch delta 6764 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 B@h|`Y diff --git a/substrate/core/transaction-pool/src/api.rs b/substrate/core/transaction-pool/src/api.rs index a8cb3ada50..a29010b50c 100644 --- a/substrate/core/transaction-pool/src/api.rs +++ b/substrate/core/transaction-pool/src/api.rs @@ -18,8 +18,9 @@ use std::{ sync::Arc, + marker::PhantomData, }; -use client::{self, runtime_api::TaggedTransactionQueue}; +use client::{runtime_api::TaggedTransactionQueue, blockchain::HeaderBackend}; use parity_codec::Encode; use txpool; use substrate_primitives::{ @@ -36,30 +37,34 @@ use sr_primitives::{ use error; /// The transaction pool logic -pub struct ChainApi { - client: Arc>, +pub struct ChainApi { + client: Arc, + _marker: PhantomData, } -impl ChainApi { +impl ChainApi where + Block: traits::Block, + T: traits::ProvideRuntimeApi + HeaderBackend { /// Create new transaction pool logic. - pub fn new(client: Arc>) -> Self { + pub fn new(client: Arc) -> Self { ChainApi { client, + _marker: Default::default() } } } -impl txpool::ChainApi for ChainApi where +impl txpool::ChainApi for ChainApi where Block: traits::Block, - B: client::backend::Backend + Send + Sync + 'static, - E: client::CallExecutor + Send + Sync + Clone + 'static, + T: traits::ProvideRuntimeApi + HeaderBackend, + T::Api: TaggedTransactionQueue { type Block = Block; type Hash = H256; type Error = error::Error; fn validate_transaction(&self, at: &BlockId, uxt: &txpool::ExtrinsicFor) -> error::Result { - Ok(self.client.validate_transaction(at, uxt)?) + Ok(self.client.runtime_api().validate_transaction(at, uxt)?) } // TODO [toDr] Use proper lbock number type diff --git a/substrate/node/cli/src/lib.rs b/substrate/node/cli/src/lib.rs index 078ee5e143..8a56e2edfa 100644 --- a/substrate/node/cli/src/lib.rs +++ b/substrate/node/cli/src/lib.rs @@ -33,6 +33,7 @@ extern crate substrate_transaction_pool as transaction_pool; #[macro_use] extern crate substrate_network as network; extern crate substrate_consensus_aura as consensus; +extern crate substrate_client as client; extern crate node_primitives; #[macro_use] extern crate substrate_service; @@ -49,6 +50,7 @@ mod service; use tokio::runtime::Runtime; pub use cli::{VersionInfo, IntoExit}; use substrate_service::{ServiceFactory, Roles as ServiceRoles}; +use std::ops::Deref; /// The chain specification option. #[derive(Clone, Debug)] @@ -118,12 +120,13 @@ pub fn run(args: I, exit: E, version: cli::VersionInfo) -> error::Resul Ok(()) } -fn run_until_exit( +fn run_until_exit( runtime: &mut Runtime, - service: service::Service, + service: T, e: E, ) -> error::Result<()> where + T: Deref>, C: substrate_service::Components, E: IntoExit, { diff --git a/substrate/node/cli/src/service.rs b/substrate/node/cli/src/service.rs index d02ea48767..820c1dee26 100644 --- a/substrate/node/cli/src/service.rs +++ b/substrate/node/cli/src/service.rs @@ -20,8 +20,8 @@ use std::sync::Arc; use transaction_pool::{self, txpool::{Pool as TransactionPool}}; +use node_runtime::{GenesisConfig, ClientWithApi}; use node_primitives::Block; -use node_runtime::GenesisConfig; use substrate_service::{ FactoryFullConfiguration, LightComponents, FullComponents, FullBackend, FullClient, LightClient, LightBackend, FullExecutor, LightExecutor, @@ -29,6 +29,7 @@ use substrate_service::{ }; use node_executor; use consensus::{import_queue, start_aura, Config as AuraConfig, AuraImportQueue}; +use client; const AURA_SLOT_DURATION: u64 = 6; @@ -37,23 +38,22 @@ construct_simple_protocol! { pub struct NodeProtocol where Block = Block { } } -construct_simple_service!(Service); - construct_service_factory! { struct Factory { Block = Block, + RuntimeApi = ClientWithApi, NetworkProtocol = NodeProtocol { |config| Ok(NodeProtocol::new()) }, RuntimeDispatch = node_executor::Executor, - FullTransactionPoolApi = transaction_pool::ChainApi, FullExecutor, Block> + FullTransactionPoolApi = transaction_pool::ChainApi, FullExecutor, Block, ClientWithApi>, Block> { |config, client| Ok(TransactionPool::new(config, transaction_pool::ChainApi::new(client))) }, - LightTransactionPoolApi = transaction_pool::ChainApi, LightExecutor, Block> + LightTransactionPoolApi = transaction_pool::ChainApi, LightExecutor, Block, ClientWithApi>, Block> { |config, client| Ok(TransactionPool::new(config, transaction_pool::ChainApi::new(client))) }, Genesis = GenesisConfig, Configuration = (), - FullService = Service> + FullService = FullComponents { |config: FactoryFullConfiguration, executor: TaskExecutor| { let is_auth = config.roles == Roles::AUTHORITY; - Service::>::new(config, executor.clone()).map(move |service|{ + 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, ""))) @@ -77,18 +77,20 @@ construct_service_factory! { }) } }, - LightService = Service> - { |config, executor| Service::>::new(config, executor) }, + LightService = LightComponents + { |config, executor| >::new(config, executor) }, FullImportQueue = AuraImportQueue> { |config, client| Ok(import_queue(AuraConfig { local_key: None, slot_duration: 5 }, client)) }, LightImportQueue = AuraImportQueue> - { |config, client| Ok(import_queue(AuraConfig { - local_key: None, - slot_duration: 5 - }, client)) }, + { |config, client| Ok( + import_queue(AuraConfig { + local_key: None, + slot_duration: 5 + }, client)) + }, } } diff --git a/substrate/node/runtime/Cargo.toml b/substrate/node/runtime/Cargo.toml index 6c86355b25..1f6ccad0c3 100644 --- a/substrate/node/runtime/Cargo.toml +++ b/substrate/node/runtime/Cargo.toml @@ -11,10 +11,10 @@ serde_derive = { version = "1.0", optional = true } safe-mix = { version = "1.0", default-features = false } parity-codec = "2.1" parity-codec-derive = "2.1" -sr-api = { path = "../../core/sr-api", default-features = false } sr-std = { path = "../../core/sr-std" } srml-support = { path = "../../srml/support" } substrate-primitives = { path = "../../core/primitives" } +substrate-client = { path = "../../core/client", optional = true } substrate-keyring = { path = "../../core/keyring" } srml-balances = { path = "../../srml/balances" } srml-consensus = { path = "../../srml/consensus" } @@ -37,7 +37,6 @@ default = ["std"] std = [ "parity-codec/std", "substrate-primitives/std", - "sr-api/std", "sr-std/std", "srml-support/std", "srml-balances/std", @@ -57,5 +56,6 @@ std = [ "node-primitives/std", "serde_derive", "serde/std", - "safe-mix/std" + "safe-mix/std", + "substrate-client", ] diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 8a982b9ff8..84ffbb4ab0 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -20,9 +20,6 @@ // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. #![recursion_limit="256"] -#[macro_use] -extern crate sr_api as runtime_api; - #[macro_use] extern crate srml_support; @@ -35,9 +32,14 @@ extern crate serde_derive; extern crate substrate_primitives; +#[macro_use] +extern crate substrate_client as client; + #[macro_use] extern crate parity_codec_derive; +extern crate parity_codec as codec; + extern crate sr_std as rstd; extern crate srml_balances as balances; extern crate srml_consensus as consensus; @@ -55,23 +57,33 @@ extern crate srml_upgrade_key as upgrade_key; extern crate sr_version as version; extern crate node_primitives; +#[cfg(feature = "std")] +use codec::{Encode, Decode}; use rstd::prelude::*; use substrate_primitives::u32_trait::{_2, _4}; use node_primitives::{ - AccountId, AccountIndex, Balance, BlockNumber, Hash, Index, - SessionKey, Signature + AccountId, AccountIndex, Balance, BlockNumber, Hash, Index, SessionKey, Signature }; -use runtime_api::{runtime::*, id::*}; +#[cfg(feature = "std")] +use node_primitives::Block as GBlock; +use client::{block_builder::api::runtime::*, runtime_api::{runtime::*, id::*}}; +#[cfg(feature = "std")] +use client::runtime_api::ApiExt; use runtime_primitives::ApplyResult; use runtime_primitives::transaction_validity::TransactionValidity; use runtime_primitives::generic; use runtime_primitives::traits::{Convert, BlakeTwo256, Block as BlockT}; +#[cfg(feature = "std")] +use runtime_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")] 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 runtime_primitives::BuildStorage; @@ -236,8 +248,155 @@ pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = executive::Executive, Balances, AllModules>; -impl_apis! { - impl Core for Runtime { +#[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, +} + +#[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(); + } + } + } +} + +#[cfg(feature = "std")] +type GBlockId = generic::BlockId; + +#[cfg(feature = "std")] +impl client::runtime_api::Core for ClientWithApi { + fn version(&self, at: &GBlockId) -> Result { + self.call_api_at(at, "version", &()) + } + + fn authorities(&self, at: &GBlockId) -> Result, client::error::Error> { + self.call_api_at(at, "authorities", &()) + } + + fn execute_block(&self, at: &GBlockId, block: &GBlock) -> Result<(), client::error::Error> { + self.call_api_at(at, "execute_block", block) + } + + 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", &()) + } +} + +impl_runtime_apis! { + impl Core for Runtime { fn version() -> RuntimeVersion { VERSION } @@ -249,19 +408,19 @@ impl_apis! { fn execute_block(block: Block) { Executive::execute_block(block) } + + fn initialise_block(header: ::Header) { + Executive::initialise_block(&header) + } } - impl Metadata for Runtime { - fn metadata() -> RuntimeMetadata { - Runtime::metadata() + impl Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + Runtime::metadata().into() } } impl BlockBuilder for Runtime { - fn initialise_block(header: ::Header) { - Executive::initialise_block(&header) - } - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyResult { Executive::apply_extrinsic(extrinsic) } @@ -283,7 +442,7 @@ impl_apis! { } } - impl TaggedTransactionQueue for Runtime { + impl TaggedTransactionQueue for Runtime { fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity { Executive::validate_transaction(tx) } diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index 85a0109be8..bb067bc400 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -6,6 +6,27 @@ dependencies = [ "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "backtrace" +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)", + "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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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 = "base58" version = "0.1.0" @@ -30,11 +51,35 @@ name = "byteorder" version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bytes" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.6 (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.25" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "cfg-if" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "chrono" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "cloudabi" version = "0.0.3" @@ -48,6 +93,11 @@ name = "constant_time_eq" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crossbeam" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "crossbeam-deque" version = "0.2.0" @@ -57,6 +107,15 @@ dependencies = [ "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-deque" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam-epoch" version = "0.3.1" @@ -71,6 +130,19 @@ dependencies = [ "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-epoch" +version = "0.5.2" +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.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.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)", +] + [[package]] name = "crossbeam-utils" version = "0.2.2" @@ -79,6 +151,11 @@ dependencies = [ "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-utils" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "crunchy" version = "0.1.6" @@ -102,6 +179,14 @@ name = "environmental" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "error-chain" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fixed-hash" version = "0.3.0-beta.3" @@ -115,6 +200,24 @@ dependencies = [ "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "fuchsia-zircon" version = "0.3.3" @@ -129,6 +232,11 @@ name = "fuchsia-zircon-sys" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "futures" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "gcc" version = "0.3.54" @@ -172,11 +280,58 @@ dependencies = [ "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "httparse" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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-sqrt" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kvdb" +version = "0.1.0" +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)", + "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "lazy_static" version = "0.2.11" @@ -190,11 +345,25 @@ dependencies = [ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "lazycell" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "libc" version = "0.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "lock_api" +version = "0.1.4" +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)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "log" version = "0.3.9" @@ -229,6 +398,11 @@ dependencies = [ "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "memoffset" version = "0.2.1" @@ -248,11 +422,71 @@ name = "memory_units" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "mio" +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 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.5 (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.5 (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" +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.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (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 = "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)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "node-primitives" version = "0.1.0" @@ -275,7 +509,6 @@ 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)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-api 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", "sr-version 0.1.0", @@ -292,6 +525,7 @@ dependencies = [ "srml-timestamp 0.1.0", "srml-treasury 0.1.0", "srml-upgrade-key 0.1.0", + "substrate-client 0.1.0", "substrate-primitives 0.1.0", ] @@ -300,6 +534,14 @@ name = "nodrop" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "num-integer" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num-traits" version = "0.2.6" @@ -313,6 +555,30 @@ dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "openssl" +version = "0.10.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.5 (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)", + "libc 0.2.43 (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-sys" +version = "0.9.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.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.3.3" @@ -321,6 +587,11 @@ 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 = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "parity-codec" version = "2.1.5" @@ -357,6 +628,15 @@ dependencies = [ "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "parking_lot" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.4 (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]] name = "parking_lot_core" version = "0.2.14" @@ -368,6 +648,28 @@ dependencies = [ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "parking_lot_core" +version = "0.3.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)", + "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.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 = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pkg-config" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "proc-macro-hack" version = "0.4.1" @@ -453,6 +755,11 @@ dependencies = [ "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "redox_syscall" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "ring" version = "0.12.1" @@ -465,6 +772,11 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rustc-demangle" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc-hex" version = "2.0.1" @@ -478,6 +790,11 @@ dependencies = [ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "ryu" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "safe-mix" version = "1.0.0" @@ -519,6 +836,62 @@ dependencies = [ "syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "serde_json" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.79 (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 = "slab" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slog" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slog-async" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slog-json" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slog-scope" +version = "4.0.1" +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.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "smallvec" version = "0.6.5" @@ -527,16 +900,6 @@ dependencies = [ "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "sr-api" -version = "0.1.0" -dependencies = [ - "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-primitives 0.1.0", - "sr-std 0.1.0", - "sr-version 0.1.0", -] - [[package]] name = "sr-io" version = "0.1.0" @@ -710,6 +1073,8 @@ dependencies = [ "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-std 0.1.0", + "substrate-primitives 0.1.0", ] [[package]] @@ -845,6 +1210,68 @@ 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" +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.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)", + "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (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)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "sr-version 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-executor 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-telemetry 0.3.0", + "substrate-trie 0.4.0", +] + +[[package]] +name = "substrate-consensus-common" +version = "0.1.0" +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", + "sr-version 0.1.0", + "substrate-primitives 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-executor" +version = "0.1.0" +dependencies = [ + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain 0.12.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.5 (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.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", + "sr-version 0.1.0", + "substrate-primitives 0.1.0", + "substrate-serializer 0.1.0", + "substrate-state-machine 0.1.0", + "substrate-trie 0.4.0", + "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "substrate-keyring" version = "0.1.0" @@ -879,6 +1306,14 @@ dependencies = [ "wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "substrate-serializer" +version = "0.1.0" +dependencies = [ + "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "substrate-state-machine" version = "0.1.0" @@ -895,6 +1330,20 @@ dependencies = [ "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] +[[package]] +name = "substrate-telemetry" +version = "0.3.0" +dependencies = [ + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (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.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)", + "ws 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "substrate-trie" version = "0.4.0" @@ -926,6 +1375,182 @@ dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "take_mut" +version = "0.2.2" +source = "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.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time" +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.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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 = "tokio-current-thread" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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]] +name = "tokio-executor" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.6" +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.25 (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.5 (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.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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.6.1 (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.5 (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.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.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.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.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.5 (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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.10 (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.5 (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.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 = "trie-db" version = "0.9.0" @@ -963,6 +1588,19 @@ dependencies = [ "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicode-xid" version = "0.1.0" @@ -981,6 +1619,21 @@ name = "untrusted" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "url" +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.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 = "vcpkg" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "version_check" version = "0.1.5" @@ -1002,6 +1655,11 @@ dependencies = [ "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "winapi" version = "0.3.6" @@ -1011,6 +1669,11 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -1021,52 +1684,115 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.10 (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.5 (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]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (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 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 base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" "checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781" +"checksum bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ce55bd354b095246fc34caf4e9e242f5297a7fd938b090cadfea6eee614aa62" +"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" "checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3" +"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" +"checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" +"checksum crossbeam-deque 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3486aefc4c0487b9cb52372c97df0a48b8c249514af1ee99703bf70d2f2ceda1" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" +"checksum crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30fecfcac6abfef8771151f8be4abc9e4edc112c2bcb233314cafde2680536e9" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" +"checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" "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 elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" "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 fixed-hash 0.3.0-beta.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e71c99c903a9fe54baed1bc701b43daba8c6dc6d4aec89a32f667ab6b3094c4" +"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 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.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "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 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.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ea155abb3ba6f382a75f1418988c05fe82959ed9ce727de427f9cfd425b0c903" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "72ae89206cea31c32014b39d5a454b96135894221610dbfd19cf4d2d044fa546" "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 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 lock_api 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" "checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f" "checksum mashup 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d886e371548f5c66258a99df9ec03366bff02cc96ea3d3f8f346b5d2d6836de7" "checksum mashup-impl 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8d426741e35fab52542d84dfee615f442c2b37247bee8b1ed5c25ca723487580" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "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 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 nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f" +"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 num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" "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 openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613" +"checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +"checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" "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-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" +"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 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.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" "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.19 (registry+https://github.com/rust-lang/crates.io-index)" = "ffe022fb8c8bd254524b0b3305906c1921fa37a84a644e29079a9e62200c3901" @@ -1077,30 +1803,63 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "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 ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" +"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" "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 ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7" "checksum safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f7bf422d23a88c16d5090d455f182bc99c60af4df6a345c63428acf5129e347" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "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.79 (registry+https://github.com/rust-lang/crates.io-index)" = "84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9" "checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe" +"checksum serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)" = "43344e7ce05d0d8280c5940cabb4964bea626aa58b1ec0e8c73fa2a8512a38ce" +"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +"checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" +"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.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d" "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 syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" "checksum syn 0.15.6 (registry+https://github.com/rust-lang/crates.io-index)" = "854b08a640fc8f54728fb95321e3ec485b365a97fe47609797c671addd1dde69" +"checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" +"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 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-current-thread 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f90fcd90952f0a496d438a976afba8e5c205fb12123f813d8ab3aa1c8436638c" +"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-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 trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" "checksum uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4630460173a57c0af94b8306091e018025d988473f641a4af754b6cde980e1e3" +"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-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 untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" "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 wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d184c4b7081f30316f74f8d73c197314dcb56ea7af9323522b42a2fa9cb19453" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "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-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"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" diff --git a/substrate/node/runtime/wasm/Cargo.toml b/substrate/node/runtime/wasm/Cargo.toml index 17ae789bdf..9e74ff9d5d 100644 --- a/substrate/node/runtime/wasm/Cargo.toml +++ b/substrate/node/runtime/wasm/Cargo.toml @@ -8,11 +8,11 @@ crate-type = ["cdylib"] [dependencies] integer-sqrt = { version = "0.1.2" } -safe-mix = { version = "1.0", default-features = false} +safe-mix = { version = "1.0", default-features = false } parity-codec-derive = { version = "2.1" } parity-codec = { version = "2.1", default-features = false } substrate-primitives = { path = "../../../core/primitives", default-features = false } -sr-api = { path = "../../../core/sr-api", default-features = false } +substrate-client = { path = "../../../core/client", default-features = false } sr-std = { path = "../../../core/sr-std", default-features = false } srml-support = { path = "../../../srml/support", default-features = false } srml-balances = { path = "../../../srml/balances", default-features = false } @@ -37,7 +37,7 @@ std = [ "safe-mix/std", "parity-codec/std", "substrate-primitives/std", - "sr-api/std", + "substrate-client/std", "sr-std/std", "srml-support/std", "srml-balances/std", diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index aafdeedceb1d923b7286b845a5eb33e75a0b0ae7..766de4bda344ef0120ad9430fe43fcc41ecdabd8 100644 GIT binary patch delta 93323 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 delta 298880 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 z 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 diff --git a/substrate/srml/metadata/Cargo.toml b/substrate/srml/metadata/Cargo.toml index 24f0a21b33..d442a5e225 100644 --- a/substrate/srml/metadata/Cargo.toml +++ b/substrate/srml/metadata/Cargo.toml @@ -8,12 +8,16 @@ parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } serde = { version = "1.0", optional = true } serde_derive = { version = "1.0", optional = true } +sr-std = { path = "../../core/sr-std", default-features = false } +substrate-primitives = { path = "../../core/primitives", default-features = false } [features] default = ["std"] std = [ "parity-codec/std", "parity-codec-derive/std", + "sr-std/std", + "substrate-primitives/std", "serde", "serde_derive" ] diff --git a/substrate/srml/metadata/src/lib.rs b/substrate/srml/metadata/src/lib.rs index ea722a705e..0809531a9f 100644 --- a/substrate/srml/metadata/src/lib.rs +++ b/substrate/srml/metadata/src/lib.rs @@ -21,14 +21,12 @@ //! codec-encoded metadata. #![cfg_attr(not(feature = "std"), no_std)] -#![cfg_attr(not(feature = "std"), feature(alloc))] - -#[cfg(not(feature = "std"))] -extern crate alloc; #[macro_use] extern crate parity_codec_derive; extern crate parity_codec as codec; +extern crate sr_std as rstd; +extern crate substrate_primitives as primitives; #[cfg(feature = "std")] extern crate serde; @@ -36,17 +34,10 @@ extern crate serde; #[macro_use] extern crate serde_derive; -#[cfg(feature = "std")] -pub mod alloc { - pub use std::vec; -} - use codec::{Encode, Output}; #[cfg(feature = "std")] use codec::{Decode, Input}; - -// Make Vec available on `std` and `no_std` -use alloc::vec::Vec; +use rstd::vec::Vec; #[cfg(feature = "std")] type StringBuf = String; @@ -294,3 +285,9 @@ pub struct RuntimeMetadata { pub modules: DecodeDifferentArray, pub outer_dispatch: OuterDispatchMetadata, } + +impl Into for RuntimeMetadata { + fn into(self) -> primitives::OpaqueMetadata { + primitives::OpaqueMetadata::new(self.encode()) + } +} From f94bba080275b053ecd510017c98d61e58cf36d0 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Tue, 13 Nov 2018 16:26:53 +0100 Subject: [PATCH 23/26] Remove dependency on libp2p from cli (#1107) --- substrate/Cargo.lock | 1 - substrate/core/cli/Cargo.toml | 1 - substrate/core/cli/src/lib.rs | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index 371aa40d65..c9d66bbb6a 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -3027,7 +3027,6 @@ dependencies = [ "sr-primitives 0.1.0", "substrate-client 0.1.0", "substrate-network 0.1.0", - "substrate-network-libp2p 0.1.0", "substrate-primitives 0.1.0", "substrate-service 0.3.0", "substrate-telemetry 0.3.0", diff --git a/substrate/core/cli/Cargo.toml b/substrate/core/cli/Cargo.toml index 4fc17e34cb..1552791b26 100644 --- a/substrate/core/cli/Cargo.toml +++ b/substrate/core/cli/Cargo.toml @@ -25,7 +25,6 @@ exit-future = "0.1" sysinfo = "0.6.2" substrate-client = { path = "../../core/client" } substrate-network = { path = "../../core/network" } -substrate-network-libp2p = { path = "../../core/network-libp2p" } sr-primitives = { path = "../../core/sr-primitives" } substrate-primitives = { path = "../../core/primitives" } substrate-service = { path = "../../core/service" } diff --git a/substrate/core/cli/src/lib.rs b/substrate/core/cli/src/lib.rs index 5b82133d80..fc4ab029aa 100644 --- a/substrate/core/cli/src/lib.rs +++ b/substrate/core/cli/src/lib.rs @@ -34,7 +34,6 @@ extern crate sysinfo; extern crate substrate_client as client; extern crate substrate_network as network; -extern crate substrate_network_libp2p as network_libp2p; extern crate sr_primitives as runtime_primitives; extern crate substrate_service as service; extern crate substrate_primitives as primitives; @@ -56,13 +55,12 @@ pub mod error; pub mod informant; mod panic_hook; -use network_libp2p::Protocol; use runtime_primitives::traits::As; use service::{ ServiceFactory, FactoryFullConfiguration, RuntimeGenesis, FactoryGenesis, PruningMode, ChainSpec, }; -use network::NonReservedPeerMode; +use network::{NonReservedPeerMode, Protocol}; use primitives::H256; use std::io::{Write, Read, stdin, stdout}; From 6ad88fc623323d53324b0e9cb03a63ab6ba5457d Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Wed, 14 Nov 2018 08:59:54 +0100 Subject: [PATCH 24/26] Fix extrinsic impl. (#1109) --- .../src/generic/unchecked_extrinsic.rs | 18 ++++++++++++------ substrate/srml/support/src/dispatch.rs | 14 ++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs b/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs index ec3801591d..d6442cbc0b 100644 --- a/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs +++ b/substrate/core/sr-primitives/src/generic/unchecked_extrinsic.rs @@ -21,7 +21,7 @@ use std::fmt; use rstd::prelude::*; use codec::{Decode, Encode, Codec, Input, HasCompact}; -use traits::{self, Member, SimpleArithmetic, MaybeDisplay, Lookup}; +use traits::{self, Member, SimpleArithmetic, MaybeDisplay, Lookup, Extrinsic}; use super::CheckedExtrinsic; #[derive(PartialEq, Eq, Clone, Encode, Decode)] @@ -73,11 +73,6 @@ where function, } } - - /// `true` if there is a signature. - pub fn is_signed(&self) -> bool { - self.signature.is_some() - } } impl traits::Checkable @@ -113,6 +108,17 @@ where } } +impl< + Address: Codec, + Index: HasCompact + Codec, + Signature: Codec, + Call, +> Extrinsic for UncheckedExtrinsic { + fn is_signed(&self) -> Option { + Some(self.signature.is_some()) + } +} + impl Decode for UncheckedExtrinsic { diff --git a/substrate/srml/support/src/dispatch.rs b/substrate/srml/support/src/dispatch.rs index 08d73d59e4..cfcb3ae972 100644 --- a/substrate/srml/support/src/dispatch.rs +++ b/substrate/srml/support/src/dispatch.rs @@ -193,11 +193,8 @@ macro_rules! decl_module { $($rest:tt)* ) => { compile_error!("\ -First parameter of dispatch should be marked `origin` only, with no\n\ -type specified (a bit like `self`).\n\ -(For root-matching dispatches, ensure the first parameter does not use\n\ -the `T::Origin` type.)\ -") +first parameter of dispatch should be marked `origin` only, with no type specified (a bit like `self`)\n\ +(For root-matching dispatches, ensure the first parameter does not use the `T::Origin` type.)") }; (@normalize $(#[$attr:meta])* @@ -211,11 +208,8 @@ the `T::Origin` type.)\ $($rest:tt)* ) => { compile_error!("\ -First parameter of dispatch should be marked `origin` only, with no\n\ -type specified (a bit like `self`).\n\ -(For root-matching dispatches, ensure the first parameter is not named\n\ -`origin`.)\ -") +first parameter of dispatch should be marked `origin` only, with no type specified (a bit like `self`)\n\ +(For root-matching dispatches, ensure the first parameter is not named`origin`.)") }; (@normalize $(#[$attr:meta])* From 74e907f3cb6f8d6b55ebd0a7a695e5c0cee54cbb Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 14 Nov 2018 11:25:16 +0100 Subject: [PATCH 25/26] Some tweaks in the network crate (#1108) * Move Roles to network::config * Make network::config public * Move NetworkConfig and NonReservedMode to config * Move Params to config * Move node_id() to NetworkManager and fix tests * Rename Specialization to NetworkSpecialization --- substrate/core/cli/src/lib.rs | 2 +- substrate/core/consensus/aura/src/lib.rs | 2 +- substrate/core/network/src/config.rs | 55 ++++++++++- .../core/network/src/consensus_gossip.rs | 6 +- substrate/core/network/src/lib.rs | 7 +- substrate/core/network/src/message.rs | 2 +- substrate/core/network/src/on_demand.rs | 10 +- substrate/core/network/src/protocol.rs | 12 +-- substrate/core/network/src/service.rs | 96 +++++-------------- substrate/core/network/src/specialization.rs | 2 +- substrate/core/network/src/sync.rs | 2 +- substrate/core/network/src/test/mod.rs | 4 +- substrate/core/network/src/test/sync.rs | 2 +- substrate/core/service/src/components.rs | 18 ++-- substrate/core/service/src/config.rs | 3 +- substrate/core/service/test/src/lib.rs | 3 +- 16 files changed, 117 insertions(+), 109 deletions(-) diff --git a/substrate/core/cli/src/lib.rs b/substrate/core/cli/src/lib.rs index fc4ab029aa..8aec489457 100644 --- a/substrate/core/cli/src/lib.rs +++ b/substrate/core/cli/src/lib.rs @@ -60,7 +60,7 @@ use service::{ ServiceFactory, FactoryFullConfiguration, RuntimeGenesis, FactoryGenesis, PruningMode, ChainSpec, }; -use network::{NonReservedPeerMode, Protocol}; +use network::{Protocol, config::NonReservedPeerMode}; use primitives::H256; use std::io::{Write, Read, stdin, stdout}; diff --git a/substrate/core/consensus/aura/src/lib.rs b/substrate/core/consensus/aura/src/lib.rs index e55756eacf..6e993f1879 100644 --- a/substrate/core/consensus/aura/src/lib.rs +++ b/substrate/core/consensus/aura/src/lib.rs @@ -405,7 +405,7 @@ mod tests { use network::test::*; use network::test::{Block as TestBlock, PeersClient}; use runtime_primitives::traits::Block as BlockT; - use network::ProtocolConfig; + use network::config::ProtocolConfig; use parking_lot::Mutex; use tokio::runtime::current_thread; use keyring::Keyring; diff --git a/substrate/core/network/src/config.rs b/substrate/core/network/src/config.rs index fc6a1e374b..a7936ce491 100644 --- a/substrate/core/network/src/config.rs +++ b/substrate/core/network/src/config.rs @@ -14,9 +14,34 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -pub use service::Roles; +//! Configuration for the networking layer of Substrate. -/// Protocol configuration +pub use network_libp2p::{NonReservedPeerMode, NetworkConfiguration}; + +use chain::Client; +use codec; +use on_demand::OnDemandService; +use runtime_primitives::traits::{Block as BlockT}; +use service::{ExHashT, TransactionPool}; +use std::sync::Arc; + +/// Service initialization parameters. +pub struct Params { + /// Configuration. + pub config: ProtocolConfig, + /// Network layer configuration. + pub network_config: NetworkConfiguration, + /// Substrate relay chain access point. + pub chain: Arc>, + /// On-demand service reference. + pub on_demand: Option>>, + /// Transaction pool. + pub transaction_pool: Arc>, + /// Protocol specialization. + pub specialization: S, +} + +/// Configuration for the Substrate-specific part of the networking layer. #[derive(Clone)] pub struct ProtocolConfig { /// Assigned roles. @@ -30,3 +55,29 @@ impl Default for ProtocolConfig { } } } + +bitflags! { + /// Bitmask of the roles that a node fulfills. + pub struct Roles: u8 { + /// No network. + const NONE = 0b00000000; + /// Full node, does not participate in consensus. + const FULL = 0b00000001; + /// Light client node. + const LIGHT = 0b00000010; + /// Act as an authority + const AUTHORITY = 0b00000100; + } +} + +impl codec::Encode for Roles { + fn encode_to(&self, dest: &mut T) { + dest.push_byte(self.bits()) + } +} + +impl codec::Decode for Roles { + fn decode(input: &mut I) -> Option { + Self::from_bits(input.read_byte()?) + } +} diff --git a/substrate/core/network/src/consensus_gossip.rs b/substrate/core/network/src/consensus_gossip.rs index 0ecb0e5e68..882d2f02fd 100644 --- a/substrate/core/network/src/consensus_gossip.rs +++ b/substrate/core/network/src/consensus_gossip.rs @@ -26,8 +26,8 @@ use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, Hash, HashF use runtime_primitives::generic::BlockId; use message::generic::{Message, ConsensusMessage}; use protocol::Context; -use service::Roles; -use specialization::Specialization; +use config::Roles; +use specialization::NetworkSpecialization; use StatusMessage; use generic_message; @@ -262,7 +262,7 @@ where } } -impl Specialization for ConsensusGossip where +impl NetworkSpecialization for ConsensusGossip where Block::Header: HeaderT { fn status(&self) -> Vec { diff --git a/substrate/core/network/src/lib.rs b/substrate/core/network/src/lib.rs index fa9232970f..a8ad20496f 100644 --- a/substrate/core/network/src/lib.rs +++ b/substrate/core/network/src/lib.rs @@ -51,10 +51,10 @@ mod sync; #[macro_use] mod protocol; mod io; -mod config; mod chain; mod blocks; mod on_demand; +pub mod config; pub mod import_queue; pub mod consensus_gossip; pub mod error; @@ -65,13 +65,12 @@ pub mod specialization; pub mod test; pub use chain::Client as ClientHandle; -pub use service::{Service, FetchFuture, TransactionPool, Params, ManageNetwork, SyncProvider}; +pub use service::{Service, FetchFuture, TransactionPool, ManageNetwork, SyncProvider}; pub use protocol::{ProtocolStatus, PeerInfo, Context}; pub use sync::{Status as SyncStatus, SyncState}; -pub use network_libp2p::{NonReservedPeerMode, NetworkConfiguration, NodeIndex, ProtocolId, Severity, Protocol}; +pub use network_libp2p::{NodeIndex, ProtocolId, Severity, Protocol}; pub use message::{generic as generic_message, RequestId, Status as StatusMessage}; pub use error::Error; -pub use config::{Roles, ProtocolConfig}; pub use on_demand::{OnDemand, OnDemandService, RemoteResponse}; #[doc(hidden)] pub use runtime_primitives::traits::Block as BlockT; diff --git a/substrate/core/network/src/message.rs b/substrate/core/network/src/message.rs index f08fce3368..40cd9a435d 100644 --- a/substrate/core/network/src/message.rs +++ b/substrate/core/network/src/message.rs @@ -125,7 +125,7 @@ pub struct RemoteReadResponse { /// Generic types. pub mod generic { use runtime_primitives::Justification; - use service::Roles; + use config::Roles; use super::{ BlockAttributes, RemoteCallResponse, RemoteReadResponse, RequestId, Transactions, Direction diff --git a/substrate/core/network/src/on_demand.rs b/substrate/core/network/src/on_demand.rs index bc0f3aec9c..5fbf893714 100644 --- a/substrate/core/network/src/on_demand.rs +++ b/substrate/core/network/src/on_demand.rs @@ -30,6 +30,7 @@ use client::light::fetcher::{Fetcher, FetchChecker, RemoteHeaderRequest, use io::SyncIo; use message; use network_libp2p::{Severity, NodeIndex}; +use config::Roles; use service; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, NumberFor}; @@ -41,7 +42,7 @@ const RETRY_COUNT: usize = 1; /// On-demand service API. pub trait OnDemandService: Send + Sync { /// When new node is connected. - fn on_connect(&self, peer: NodeIndex, role: service::Roles, best_number: NumberFor); + fn on_connect(&self, peer: NodeIndex, role: Roles, best_number: NumberFor); /// When block is announced by the peer. fn on_block_announce(&self, peer: NodeIndex, best_number: NumberFor); @@ -211,8 +212,8 @@ impl OnDemandService for OnDemand where E: service::ExecuteInContext, B::Header: HeaderT, { - fn on_connect(&self, peer: NodeIndex, role: service::Roles, best_number: NumberFor) { - if !role.intersects(service::Roles::FULL | service::Roles::AUTHORITY) { // TODO: correct? + fn on_connect(&self, peer: NodeIndex, role: Roles, best_number: NumberFor) { + if !role.intersects(Roles::FULL | Roles::AUTHORITY) { // TODO: correct? return; } @@ -511,9 +512,10 @@ pub mod tests { use client::{self, error::{ErrorKind as ClientErrorKind, Result as ClientResult}}; use client::light::fetcher::{Fetcher, FetchChecker, RemoteHeaderRequest, RemoteCallRequest, RemoteReadRequest, RemoteChangesRequest}; + use config::Roles; use message; use network_libp2p::NodeIndex; - use service::{Roles, ExecuteInContext}; + use service::ExecuteInContext; use test::TestIo; use super::{REQUEST_TIMEOUT, OnDemand, OnDemandService}; use test_client::runtime::{changes_trie_config, Block, Header}; diff --git a/substrate/core/network/src/protocol.rs b/substrate/core/network/src/protocol.rs index 4e98ee8f80..af20a6b1bc 100644 --- a/substrate/core/network/src/protocol.rs +++ b/substrate/core/network/src/protocol.rs @@ -27,11 +27,11 @@ use codec::{Encode, Decode}; use message::{self, Message}; use message::generic::Message as GenericMessage; -use specialization::Specialization; +use specialization::NetworkSpecialization; use sync::{ChainSync, Status as SyncStatus, SyncState}; -use service::{Roles, TransactionPool, ExHashT}; +use service::{TransactionPool, ExHashT}; use import_queue::ImportQueue; -use config::ProtocolConfig; +use config::{ProtocolConfig, Roles}; use chain::Client; use on_demand::OnDemandService; use io::SyncIo; @@ -50,7 +50,7 @@ const MAX_BLOCK_DATA_RESPONSE: u32 = 128; const LIGHT_MAXIMAL_BLOCKS_DIFFERENCE: u64 = 8192; // Lock must always be taken in order declared here. -pub struct Protocol, H: ExHashT> { +pub struct Protocol, H: ExHashT> { config: ProtocolConfig, on_demand: Option>>, genesis_hash: B::Hash, @@ -184,7 +184,7 @@ pub(crate) struct ContextData { pub chain: Arc>, } -impl, H: ExHashT> Protocol { +impl, H: ExHashT> Protocol { /// Create a new instance. pub fn new>( config: ProtocolConfig, @@ -761,7 +761,7 @@ macro_rules! construct_simple_protocol { } } - impl $crate::specialization::Specialization<$block> for $protocol { + impl $crate::specialization::NetworkSpecialization<$block> for $protocol { fn status(&self) -> Vec { $( let status = self.$status_protocol_name.status(); diff --git a/substrate/core/network/src/service.rs b/substrate/core/network/src/service.rs index 6d38d4484f..92c9beea94 100644 --- a/substrate/core/network/src/service.rs +++ b/substrate/core/network/src/service.rs @@ -25,11 +25,9 @@ use network_libp2p::{start_service, Service as NetworkService, ServiceEvent as N use network_libp2p::{RegisteredProtocol, parse_str_addr, Protocol as Libp2pProtocol}; use io::NetSyncIo; use protocol::{self, Protocol, ProtocolContext, Context, ProtocolStatus}; -use config::{ProtocolConfig}; +use config::Params; use error::Error; -use chain::Client; -use specialization::Specialization; -use on_demand::OnDemandService; +use specialization::NetworkSpecialization; use import_queue::ImportQueue; use runtime_primitives::traits::{Block as BlockT}; use tokio::{runtime::Runtime, timer::Interval}; @@ -40,38 +38,10 @@ pub type FetchFuture = oneshot::Receiver>; const TICK_TIMEOUT: Duration = Duration::from_millis(1000); const PROPAGATE_TIMEOUT: Duration = Duration::from_millis(5000); -bitflags! { - /// Node roles bitmask. - pub struct Roles: u8 { - /// No network. - const NONE = 0b00000000; - /// Full node, does not participate in consensus. - const FULL = 0b00000001; - /// Light client node. - const LIGHT = 0b00000010; - /// Act as an authority - const AUTHORITY = 0b00000100; - } -} - -impl ::codec::Encode for Roles { - fn encode_to(&self, dest: &mut T) { - dest.push_byte(self.bits()) - } -} - -impl ::codec::Decode for Roles { - fn decode(input: &mut I) -> Option { - Self::from_bits(input.read_byte()?) - } -} - /// Sync status pub trait SyncProvider: Send + Sync { /// Get sync status fn status(&self) -> ProtocolStatus; - /// Get this node id if available. - fn node_id(&self) -> Option; } pub trait ExHashT: ::std::hash::Hash + Eq + ::std::fmt::Debug + Clone + Send + Sync + 'static {} @@ -93,24 +63,8 @@ pub trait ExecuteInContext: Send + Sync { fn execute_in_context)>(&self, closure: F); } -/// Service initialization parameters. -pub struct Params { - /// Configuration. - pub config: ProtocolConfig, - /// Network layer configuration. - pub network_config: NetworkConfiguration, - /// Substrate relay chain access point. - pub chain: Arc>, - /// On-demand service reference. - pub on_demand: Option>>, - /// Transaction pool. - pub transaction_pool: Arc>, - /// Protocol specialization. - pub specialization: S, -} - /// Substrate network service. Handles network IO and manages connectivity. -pub struct Service, H: ExHashT> { +pub struct Service, H: ExHashT> { /// Network service network: Arc>, /// Protocol handler @@ -123,7 +77,7 @@ pub struct Service, H: ExHashT> { bg_thread: Option<(oneshot::Sender<()>, thread::JoinHandle<()>)>, } -impl, H: ExHashT> Service { +impl, H: ExHashT> Service { /// Creates and register protocol with the network service pub fn new>( params: Params, @@ -178,13 +132,13 @@ impl, H: ExHashT> Service { } } -impl, H: ExHashT> ::consensus::SyncOracle for Service { +impl, H: ExHashT> ::consensus::SyncOracle for Service { fn is_major_syncing(&self) -> bool { self.handler.sync().read().status().is_major_syncing() } } -impl, H:ExHashT> Drop for Service { +impl, H:ExHashT> Drop for Service { fn drop(&mut self) { self.handler.stop(); if let Some((sender, join)) = self.bg_thread.take() { @@ -196,30 +150,17 @@ impl, H:ExHashT> Drop for Service, H: ExHashT> ExecuteInContext for Service { +impl, H: ExHashT> ExecuteInContext for Service { fn execute_in_context)>(&self, closure: F) { closure(&mut ProtocolContext::new(self.handler.context_data(), &mut NetSyncIo::new(&self.network, self.protocol_id))) } } -impl, H: ExHashT> SyncProvider for Service { +impl, H: ExHashT> SyncProvider for Service { /// Get sync status fn status(&self) -> ProtocolStatus { self.handler.status() } - - fn node_id(&self) -> Option { - let network = self.network.lock(); - let ret = network - .listeners() - .next() - .map(|addr| { - let mut addr = addr.clone(); - addr.append(Libp2pProtocol::P2p(network.peer_id().clone().into())); - addr.to_string() - }); - ret - } } /// Trait for managing network @@ -232,9 +173,11 @@ pub trait ManageNetwork: Send + Sync { fn remove_reserved_peer(&self, peer: PeerId); /// Add reserved peer fn add_reserved_peer(&self, peer: String) -> Result<(), String>; + /// Returns a user-friendly identifier of our node. + fn node_id(&self) -> Option; } -impl, H: ExHashT> ManageNetwork for Service { +impl, H: ExHashT> ManageNetwork for Service { fn accept_unreserved_peers(&self) { self.network.lock().accept_unreserved_peers(); } @@ -264,10 +207,23 @@ impl, H: ExHashT> ManageNetwork for Se self.network.lock().add_reserved_peer(addr, peer_id); Ok(()) } + + fn node_id(&self) -> Option { + let network = self.network.lock(); + let ret = network + .listeners() + .next() + .map(|addr| { + let mut addr = addr.clone(); + addr.append(Libp2pProtocol::P2p(network.peer_id().clone().into())); + addr.to_string() + }); + ret + } } /// Starts the background thread that handles the networking. -fn start_thread, H: ExHashT>( +fn start_thread, H: ExHashT>( config: NetworkConfiguration, protocol: Arc>, registered: RegisteredProtocol, @@ -308,7 +264,7 @@ fn start_thread, H: ExHashT>( } /// Runs the background thread that handles the networking. -fn run_thread, H: ExHashT>( +fn run_thread, H: ExHashT>( network_service: Arc>, protocol: Arc>, protocol_id: ProtocolId, diff --git a/substrate/core/network/src/specialization.rs b/substrate/core/network/src/specialization.rs index 70ad9e9b2e..d1cde8b33b 100644 --- a/substrate/core/network/src/specialization.rs +++ b/substrate/core/network/src/specialization.rs @@ -21,7 +21,7 @@ use runtime_primitives::traits::Block as BlockT; use protocol::Context; /// A specialization of the substrate network protocol. Handles events and sends messages. -pub trait Specialization: Send + Sync + 'static { +pub trait NetworkSpecialization: Send + Sync + 'static { /// Get the current specialization-status. fn status(&self) -> Vec; diff --git a/substrate/core/network/src/sync.rs b/substrate/core/network/src/sync.rs index e69b22fc57..1287beffe9 100644 --- a/substrate/core/network/src/sync.rs +++ b/substrate/core/network/src/sync.rs @@ -25,7 +25,7 @@ use blocks::{self, BlockCollection}; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As, NumberFor}; use runtime_primitives::generic::BlockId; use message::{self, generic::Message as GenericMessage}; -use service::Roles; +use config::Roles; use import_queue::ImportQueue; // Maximum blocks to request in a single packet. diff --git a/substrate/core/network/src/test/mod.rs b/substrate/core/network/src/test/mod.rs index f5b70f2e9a..458f659949 100644 --- a/substrate/core/network/src/test/mod.rs +++ b/substrate/core/network/src/test/mod.rs @@ -35,7 +35,7 @@ use keyring::Keyring; use codec::Encode; use import_queue::{SyncImportQueue, PassThroughVerifier, Verifier}; use consensus::BlockOrigin; -use specialization::Specialization; +use specialization::NetworkSpecialization; use consensus_gossip::ConsensusGossip; use import_queue::ImportQueue; use service::ExecuteInContext; @@ -62,7 +62,7 @@ pub struct DummySpecialization { pub gossip: ConsensusGossip, } -impl Specialization for DummySpecialization { +impl NetworkSpecialization for DummySpecialization { fn status(&self) -> Vec { vec![] } fn on_connect(&mut self, ctx: &mut Context, peer_id: NodeIndex, status: ::message::Status) { diff --git a/substrate/core/network/src/test/sync.rs b/substrate/core/network/src/test/sync.rs index 0f9e407828..479b96ecc0 100644 --- a/substrate/core/network/src/test/sync.rs +++ b/substrate/core/network/src/test/sync.rs @@ -16,9 +16,9 @@ use client::backend::Backend; use client::blockchain::HeaderBackend as BlockchainHeaderBackend; +use config::Roles; use consensus::BlockOrigin; use sync::SyncState; -use Roles; use super::*; #[test] diff --git a/substrate/core/service/src/components.rs b/substrate/core/service/src/components.rs index cde3a5aecb..0325b75e9e 100644 --- a/substrate/core/service/src/components.rs +++ b/substrate/core/service/src/components.rs @@ -175,12 +175,12 @@ impl StartRPC for T where pub trait CreateNetworkParams { fn create_network_params( client: Arc, C::RuntimeApi>>, - roles: network::Roles, - network_config: network::NetworkConfiguration, + roles: network::config::Roles, + network_config: network::config::NetworkConfiguration, on_demand: Option, NetworkService>>>, transaction_pool_adapter: TransactionPoolAdapter, specialization: S, - ) -> network::Params, S, ComponentExHash>; + ) -> network::config::Params, S, ComponentExHash>; } impl CreateNetworkParams for T where @@ -188,14 +188,14 @@ impl CreateNetworkParams for T where { fn create_network_params( client: Arc, T::RuntimeApi>>, - roles: network::Roles, - network_config: network::NetworkConfiguration, + roles: network::config::Roles, + network_config: network::config::NetworkConfiguration, on_demand: Option, NetworkService>>>, transaction_pool_adapter: TransactionPoolAdapter, specialization: S, - ) -> network::Params, S, ComponentExHash> { - network::Params { - config: network::ProtocolConfig { roles }, + ) -> network::config::Params, S, ComponentExHash> { + network::config::Params { + config: network::config::ProtocolConfig { roles }, network_config, chain: client, on_demand: on_demand.map(|d| d as Arc>>), @@ -225,7 +225,7 @@ pub trait ServiceFactory: 'static + Sized { /// The type that implements the runtime API. type RuntimeApi: Send + Sync; /// Network protocol extensions. - type NetworkProtocol: network::specialization::Specialization; + type NetworkProtocol: network::specialization::NetworkSpecialization; /// Chain runtime. type RuntimeDispatch: NativeExecutionDispatch + Send + Sync + 'static; /// Extrinsic pool backend type for the full client. diff --git a/substrate/core/service/src/config.rs b/substrate/core/service/src/config.rs index 00866d9563..b91c26ed04 100644 --- a/substrate/core/service/src/config.rs +++ b/substrate/core/service/src/config.rs @@ -20,9 +20,8 @@ use std::net::SocketAddr; use transaction_pool; use chain_spec::ChainSpec; pub use client::ExecutionStrategy; -pub use network::Roles; -pub use network::NetworkConfiguration; pub use client_db::PruningMode; +pub use network::config::{NetworkConfiguration, Roles}; use runtime_primitives::BuildStorage; use serde::{Serialize, de::DeserializeOwned}; use target_info::Target; diff --git a/substrate/core/service/test/src/lib.rs b/substrate/core/service/test/src/lib.rs index a155b18b37..7ffa783e97 100644 --- a/substrate/core/service/test/src/lib.rs +++ b/substrate/core/service/test/src/lib.rs @@ -47,7 +47,8 @@ use service::{ Roles, FactoryExtrinsic, }; -use network::{NetworkConfiguration, NonReservedPeerMode, Protocol, SyncProvider, ManageNetwork}; +use network::{Protocol, SyncProvider, ManageNetwork}; +use network::config::{NetworkConfiguration, NonReservedPeerMode}; use sr_primitives::traits::As; use sr_primitives::generic::BlockId; use consensus::{ImportBlock, BlockImport}; From 7f8ee0f53b404b1aba3d103b299779f4be083244 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Wed, 14 Nov 2018 07:39:38 -0500 Subject: [PATCH 26/26] Clean up justification (#1111) * adding mac libraries and how to start testnet * Clean up Justification struct, Issue #1033 * adding mac libraries and how to start testnet --- substrate/core/client/src/client.rs | 10 +++++----- substrate/core/consensus/aura/src/lib.rs | 8 ++++---- substrate/core/consensus/common/src/block_import.rs | 10 +++++----- substrate/core/consensus/rhd/src/lib.rs | 4 ++-- substrate/core/network/src/import_queue.rs | 4 ++-- substrate/core/test-client/src/client_ext.rs | 4 ++-- substrate/node/cli/src/service.rs | 2 +- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index c008f0d157..6cf62dca2c 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -962,8 +962,8 @@ impl consensus::BlockImport for Client let ImportBlock { origin, header, - external_justification, - post_runtime_digests, + justification, + post_digests, body, finalized, .. @@ -975,11 +975,11 @@ impl consensus::BlockImport for Client blockchain::BlockStatus::Unknown => return Ok(ImportResult::UnknownParent), } - let import_headers = if post_runtime_digests.is_empty() { + let import_headers = if post_digests.is_empty() { PrePostHeader::Same(header) } else { let mut post_header = header.clone(); - for item in post_runtime_digests { + for item in post_digests { post_header.digest_mut().push(item); } PrePostHeader::Different(header, post_header) @@ -994,7 +994,7 @@ impl consensus::BlockImport for Client origin, hash, import_headers, - external_justification, + justification, body, new_authorities, finalized, diff --git a/substrate/core/consensus/aura/src/lib.rs b/substrate/core/consensus/aura/src/lib.rs index 6e993f1879..029fbe8025 100644 --- a/substrate/core/consensus/aura/src/lib.rs +++ b/substrate/core/consensus/aura/src/lib.rs @@ -240,8 +240,8 @@ pub fn start_aura( let import_block = ImportBlock { origin: BlockOrigin::Own, header, - external_justification: Vec::new(), - post_runtime_digests: vec![item], + justification: Vec::new(), + post_digests: vec![item], body: Some(body), finalized: false, auxiliary: Vec::new(), @@ -365,8 +365,8 @@ impl Verifier for AuraVerifier where let import_block = ImportBlock { origin, header: pre_header, - external_justification: Vec::new(), - post_runtime_digests: vec![item], + justification: Vec::new(), + post_digests: vec![item], body, finalized: false, auxiliary: Vec::new(), diff --git a/substrate/core/consensus/common/src/block_import.rs b/substrate/core/consensus/common/src/block_import.rs index 582886d827..566e5bfb02 100644 --- a/substrate/core/consensus/common/src/block_import.rs +++ b/substrate/core/consensus/common/src/block_import.rs @@ -44,7 +44,7 @@ pub struct ImportBlock { /// /// Consensus engines which alter the header (by adding post-runtime digests) /// should strip those off in the initial verification process and pass them - /// via the `post_runtime_digests` field. During block authorship, they should + /// via the `post_digests` field. During block authorship, they should /// not be pushed to the header directly. /// /// The reason for this distinction is so the header can be directly @@ -52,10 +52,10 @@ pub struct ImportBlock { /// post-runtime digests are pushed back on after. pub header: Block::Header, /// Justification provided for this block from the outside:. - pub external_justification: Justification, + pub justification: Justification, /// Digest items that have been added after the runtime for external /// work, like a consensus signature. - pub post_runtime_digests: Vec>, + pub post_digests: Vec>, /// Block's body pub body: Option>, /// Is this block finalized already? @@ -82,8 +82,8 @@ impl ImportBlock { ( self.origin, self.header, - self.external_justification, - self.post_runtime_digests, + self.justification, + self.post_digests, self.body, self.finalized, self.auxiliary, diff --git a/substrate/core/consensus/rhd/src/lib.rs b/substrate/core/consensus/rhd/src/lib.rs index 4995592aaf..449f9c3ffa 100644 --- a/substrate/core/consensus/rhd/src/lib.rs +++ b/substrate/core/consensus/rhd/src/lib.rs @@ -417,10 +417,10 @@ impl Future for BftFuture Verifier for PassThroughVerifier { header, body, finalized: self.0, - external_justification: justification, - post_runtime_digests: vec![], + justification: justification, + post_digests: vec![], auxiliary: Vec::new(), }, None)) } diff --git a/substrate/core/test-client/src/client_ext.rs b/substrate/core/test-client/src/client_ext.rs index f16bfce40f..d0a8765255 100644 --- a/substrate/core/test-client/src/client_ext.rs +++ b/substrate/core/test-client/src/client_ext.rs @@ -47,8 +47,8 @@ impl TestClient for Client let import = ImportBlock { origin, header: block.header, - external_justification: vec![], - post_runtime_digests: vec![], + justification: vec![], + post_digests: vec![], body: Some(block.extrinsics), finalized: false, auxiliary: Vec::new(), diff --git a/substrate/node/cli/src/service.rs b/substrate/node/cli/src/service.rs index 820c1dee26..5a5edb89b0 100644 --- a/substrate/node/cli/src/service.rs +++ b/substrate/node/cli/src/service.rs @@ -124,7 +124,7 @@ mod tests { let block = proposer.propose().expect("Error making test block"); ImportBlock { origin: BlockOrigin::File, - external_justification: Vec::new(), + justification: Vec::new(), internal_justification: Vec::new(), finalized: true, body: Some(block.extrinsics),

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 LtA2(b^sN3L%9R@7 delta 93987 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 From 37e3fc37d74030dcd2afe7138d0a42a07651701e Mon Sep 17 00:00:00 2001 From: Chevdor Date: Mon, 12 Nov 2018 15:30:30 +0100 Subject: [PATCH 13/26] Fix docker image (#1101) Fix #1099 --- substrate/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/substrate/Dockerfile b/substrate/Dockerfile index 4e365fe43e..d4a43eda8d 100644 --- a/substrate/Dockerfile +++ b/substrate/Dockerfile @@ -1,12 +1,12 @@ -FROM frolvlad/alpine-glibc AS builder +FROM alpine:edge AS builder LABEL maintainer="chevdor@gmail.com" LABEL description="This is the build stage for Substrate. Here we create the binary." RUN apk add build-base \ cmake \ linux-headers \ - openssl-dev && \ - apk add --repository http://nl.alpinelinux.org/alpine/edge/community cargo + openssl-dev \ + cargo ARG PROFILE=release WORKDIR /substrate From b76ba0647228b71d0ae53642fd5ddebeac5555c4 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Mon, 12 Nov 2018 17:54:57 +0100 Subject: [PATCH 14/26] Some minor TODOs removal (#1102) * Only reconnect if topology changed * Minor changes --- .../core/network-libp2p/src/custom_proto.rs | 1 - substrate/core/network-libp2p/src/lib.rs | 6 ++--- .../core/network-libp2p/src/service_task.rs | 13 +++++++--- substrate/core/network-libp2p/src/topology.rs | 24 +++++++++++++++---- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/substrate/core/network-libp2p/src/custom_proto.rs b/substrate/core/network-libp2p/src/custom_proto.rs index 863e2d68b3..fd76581d3e 100644 --- a/substrate/core/network-libp2p/src/custom_proto.rs +++ b/substrate/core/network-libp2p/src/custom_proto.rs @@ -115,7 +115,6 @@ impl RegisteredProtocolSubstream { self.send_queue.push_back(data); // If the length of the queue goes over a certain arbitrary threshold, we print a warning. - // TODO: figure out a good threshold if self.send_queue.len() >= 2048 { warn!(target: "sub-libp2p", "Queue of packets to send over substream is pretty \ large: {}", self.send_queue.len()); diff --git a/substrate/core/network-libp2p/src/lib.rs b/substrate/core/network-libp2p/src/lib.rs index 9d53b01b01..4852f65d84 100644 --- a/substrate/core/network-libp2p/src/lib.rs +++ b/substrate/core/network-libp2p/src/lib.rs @@ -18,8 +18,7 @@ //! TODO: Missing doc // end::description[] -#![recursion_limit="128"] -#![type_length_limit = "268435456"] +#![recursion_limit = "128"] extern crate parking_lot; extern crate fnv; @@ -58,7 +57,8 @@ pub use custom_proto::RegisteredProtocol; pub use error::{Error, ErrorKind, DisconnectReason}; pub use libp2p::{Multiaddr, multiaddr::Protocol, PeerId}; pub use service_task::{start_service, Service, ServiceEvent}; -pub use traits::*; // TODO: expand to actual items +pub use traits::{NetworkConfiguration, NodeIndex, NodeId, NonReservedPeerMode}; +pub use traits::{ProtocolId, Secret, Severity}; /// Check if node url is valid pub fn validate_node_url(url: &str) -> Result<(), Error> { diff --git a/substrate/core/network-libp2p/src/service_task.rs b/substrate/core/network-libp2p/src/service_task.rs index e370a68c38..f40170b00c 100644 --- a/substrate/core/network-libp2p/src/service_task.rs +++ b/substrate/core/network-libp2p/src/service_task.rs @@ -567,6 +567,8 @@ impl Service { /// Adds a list of peers to the network topology. fn add_discovered_peers(&mut self, list: impl IntoIterator) { + let mut topology_has_changed = false; + for peer in list { let connected = match peer.connection_ty { KadConnectionType::NotConnected => false, @@ -575,15 +577,20 @@ impl Service { KadConnectionType::CannotConnect => continue, }; - self.topology.add_kademlia_discovered_addrs( + let changed = self.topology.add_kademlia_discovered_addrs( &peer.node_id, peer.multiaddrs.iter().map(|a| (a.clone(), connected)) ); + + if changed { + topology_has_changed = true; + } } // Potentially connect to the newly-discovered nodes. - // TODO: only do so if the topology reports that something new has been added - self.connect_to_nodes(); + if topology_has_changed { + self.connect_to_nodes(); + } } /// Handles the swarm opening a connection to the given peer. diff --git a/substrate/core/network-libp2p/src/topology.rs b/substrate/core/network-libp2p/src/topology.rs index ad92448c6a..061a3d1795 100644 --- a/substrate/core/network-libp2p/src/topology.rs +++ b/substrate/core/network-libp2p/src/topology.rs @@ -245,12 +245,16 @@ impl NetTopology { /// Adds addresses that a node says it is listening on. /// /// The addresses are most likely to be valid. + /// + /// Returns `true` if the topology has changed in some way. Returns `false` if calling this + /// method was a no-op. #[inline] pub fn add_self_reported_listen_addrs( &mut self, peer_id: &PeerId, addrs: I, - ) where I: Iterator { + ) -> bool + where I: Iterator { self.add_discovered_addrs(peer_id, addrs.map(|a| (a, true))) } @@ -260,21 +264,28 @@ impl NetTopology { /// /// For each address, incorporates a boolean. If true, that means we have some sort of hint /// that this address can be reached. + /// + /// Returns `true` if the topology has changed in some way. Returns `false` if calling this + /// method was a no-op. #[inline] pub fn add_kademlia_discovered_addrs( &mut self, peer_id: &PeerId, addrs: I, - ) where I: Iterator { + ) -> bool + where I: Iterator { self.add_discovered_addrs(peer_id, addrs) } - /// Inner implementaiton of the `add_*_discovered_addrs`. + /// Inner implementaiton of the `add_*_discovered_addrs` methods. + /// Returns `true` if the topology has changed in some way. Returns `false` if calling this + /// method was a no-op. fn add_discovered_addrs( &mut self, peer_id: &PeerId, addrs: I, - ) where I: Iterator { + ) -> bool + where I: Iterator { let mut addrs: Vec<_> = addrs.collect(); let now_systime = SystemTime::now(); let now = Instant::now(); @@ -291,6 +302,8 @@ impl NetTopology { true }); + let mut anything_changed = false; + if !addrs.is_empty() { trace!( target: "sub-libp2p", @@ -317,6 +330,7 @@ impl NetTopology { } } + anything_changed = true; peer.addrs.push(Addr { addr, expires: now_systime + KADEMLIA_DISCOVERY_EXPIRATION, @@ -329,6 +343,8 @@ impl NetTopology { }), }); } + + anything_changed } /// Indicates the peer store that we're connected to this given address. From 57b2896332b455f4c7bbc53fb162005061158bb6 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Mon, 12 Nov 2018 18:40:18 +0100 Subject: [PATCH 15/26] Remove unneeded Serde requirements (#1076) * Remove superfluous serde requirements. * Try to ensure hash is serde * Fixups * Building again * Attempt to reenable Block (doesn't build) * Fixes compilation for node cli * Fixes test compilation * Fix wasm * Fix tests * Remove unneeded changes * Fix up comments * Reenable some code * Compile error when origin misused. * Remove unnecessary includes of `serde_derive` * Cleanups --- substrate/Cargo.lock | 14 ----- substrate/core/client/src/client.rs | 6 +- substrate/core/rpc-servers/src/lib.rs | 10 +-- substrate/core/rpc/src/author/mod.rs | 24 +++---- substrate/core/rpc/src/author/tests.rs | 10 +-- substrate/core/rpc/src/chain/mod.rs | 8 +-- substrate/core/service/src/chain_ops.rs | 12 ++-- substrate/core/service/src/lib.rs | 7 +-- substrate/core/sr-api/src/lib.rs | 6 -- .../core/sr-primitives/src/generic/block.rs | 42 ++++++++++--- .../src/generic/checked_extrinsic.rs | 4 +- .../core/sr-primitives/src/generic/digest.rs | 7 ++- .../core/sr-primitives/src/generic/header.rs | 44 +++---------- .../core/sr-primitives/src/generic/tests.rs | 52 +-------------- .../src/generic/unchecked_extrinsic.rs | 11 +++- .../src/generic/unchecked_mortal_extrinsic.rs | 12 +++- substrate/core/sr-primitives/src/testing.rs | 40 +++++++++--- substrate/core/sr-primitives/src/traits.rs | 59 ++++++++++++------ substrate/core/test-runtime/src/lib.rs | 4 -- .../substrate_test_runtime.compact.wasm | Bin 44927 -> 44860 bytes .../transaction-pool/graph/src/base_pool.rs | 5 +- .../core/transaction-pool/graph/src/lib.rs | 1 + .../transaction-pool/graph/src/listener.rs | 3 +- .../core/transaction-pool/graph/src/pool.rs | 5 +- .../core/transaction-pool/graph/src/ready.rs | 3 +- substrate/node/runtime/src/lib.rs | 2 +- substrate/node/runtime/wasm/Cargo.lock | 12 ---- .../release/node_runtime.compact.wasm | Bin 624812 -> 624437 bytes substrate/srml/assets/Cargo.toml | 2 - substrate/srml/assets/src/lib.rs | 7 --- substrate/srml/balances/Cargo.toml | 2 - substrate/srml/balances/src/address.rs | 4 +- substrate/srml/balances/src/lib.rs | 4 -- substrate/srml/balances/src/mock.rs | 1 + substrate/srml/consensus/Cargo.toml | 2 - substrate/srml/consensus/src/lib.rs | 4 -- substrate/srml/contract/Cargo.toml | 2 - substrate/srml/contract/src/lib.rs | 4 -- substrate/srml/council/Cargo.toml | 2 - substrate/srml/council/src/lib.rs | 4 -- substrate/srml/council/src/motions.rs | 7 +-- substrate/srml/democracy/Cargo.toml | 2 - substrate/srml/democracy/src/lib.rs | 8 +-- substrate/srml/example/Cargo.toml | 2 - substrate/srml/example/src/lib.rs | 7 --- substrate/srml/executive/Cargo.toml | 2 - substrate/srml/executive/src/lib.rs | 6 +- substrate/srml/session/Cargo.toml | 2 - substrate/srml/session/src/lib.rs | 4 -- substrate/srml/staking/Cargo.toml | 2 - substrate/srml/staking/src/lib.rs | 7 +-- substrate/srml/support/src/dispatch.rs | 55 +++++++++++----- substrate/srml/support/src/event.rs | 10 +-- substrate/srml/support/src/lib.rs | 5 +- substrate/srml/system/Cargo.toml | 2 - substrate/srml/system/src/lib.rs | 17 +++-- substrate/srml/timestamp/Cargo.toml | 2 - substrate/srml/timestamp/src/lib.rs | 4 -- substrate/srml/treasury/Cargo.toml | 2 - substrate/srml/treasury/src/lib.rs | 4 -- substrate/srml/upgrade-key/Cargo.toml | 2 - substrate/srml/upgrade-key/src/lib.rs | 3 - 62 files changed, 253 insertions(+), 343 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index eabd0d765f..c17744a472 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -2653,7 +2653,6 @@ 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-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2671,7 +2670,6 @@ dependencies = [ "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.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", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2689,7 +2687,6 @@ 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-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2708,7 +2705,6 @@ dependencies = [ "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", "pwasm-utils 0.3.1 (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", "sr-primitives 0.1.0", "sr-sandbox 0.1.0", @@ -2729,7 +2725,6 @@ dependencies = [ "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.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", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2749,7 +2744,6 @@ dependencies = [ "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.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", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2767,7 +2761,6 @@ 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-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2785,7 +2778,6 @@ 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-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2804,7 +2796,6 @@ dependencies = [ "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.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", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2824,7 +2815,6 @@ dependencies = [ "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.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", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2864,7 +2854,6 @@ dependencies = [ "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.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", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2880,7 +2869,6 @@ 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-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2898,7 +2886,6 @@ 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-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2916,7 +2903,6 @@ 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-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index 4645a56a2f..1279bc486a 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -23,7 +23,7 @@ use parking_lot::{Mutex, RwLock}; use primitives::AuthorityId; use runtime_primitives::{ Justification, - generic::{BlockId, SignedBlock, Block as RuntimeBlock}, + generic::{BlockId, SignedBlock}, transaction_validity::{TransactionValidity, TransactionTag}, }; use consensus::{ImportBlock, ImportResult, BlockOrigin}; @@ -775,11 +775,11 @@ impl Client where /// Get full block by id. pub fn block(&self, id: &BlockId) - -> error::Result>> + -> error::Result>> { Ok(match (self.header(id)?, self.body(id)?, self.justification(id)?) { (Some(header), Some(extrinsics), Some(justification)) => - Some(SignedBlock { block: RuntimeBlock { header, extrinsics }, justification }), + Some(SignedBlock { block: Block::new(header, extrinsics), justification }), _ => None, }) } diff --git a/substrate/core/rpc-servers/src/lib.rs b/substrate/core/rpc-servers/src/lib.rs index 47934f805a..faa6f2bf41 100644 --- a/substrate/core/rpc-servers/src/lib.rs +++ b/substrate/core/rpc-servers/src/lib.rs @@ -32,7 +32,7 @@ extern crate sr_primitives; extern crate log; use std::io; -use sr_primitives::traits::{Block as BlockT, NumberFor}; +use sr_primitives::{traits::{Block as BlockT, NumberFor}, generic::SignedBlock}; type Metadata = apis::metadata::Metadata; type RpcHandler = pubsub::PubSubHandler; @@ -40,7 +40,7 @@ pub type HttpServer = http::Server; pub type WsServer = ws::Server; /// Construct rpc `IoHandler` -pub fn rpc_handler( +pub fn rpc_handler( state: S, chain: C, author: A, @@ -48,10 +48,10 @@ pub fn rpc_handler( ) -> RpcHandler where Block: BlockT + 'static, ExHash: Send + Sync + 'static + sr_primitives::Serialize + sr_primitives::DeserializeOwned, - PendingExtrinsics: serde::Serialize + serde::de::DeserializeOwned + Send + Sync + 'static, + SignedBlock: serde::Serialize + sr_primitives::DeserializeOwned, S: apis::state::StateApi, - C: apis::chain::ChainApi, Block::Extrinsic, Metadata=Metadata>, - A: apis::author::AuthorApi, + C: apis::chain::ChainApi, SignedBlock, Metadata=Metadata>, + A: apis::author::AuthorApi, Y: apis::system::SystemApi, { let mut io = pubsub::PubSubHandler::default(); diff --git a/substrate/core/rpc/src/author/mod.rs b/substrate/core/rpc/src/author/mod.rs index ff08c4c840..287b51dcc3 100644 --- a/substrate/core/rpc/src/author/mod.rs +++ b/substrate/core/rpc/src/author/mod.rs @@ -19,13 +19,12 @@ use std::sync::Arc; use client::{self, Client}; -use codec::Decode; +use codec::{Encode, Decode}; use transaction_pool::{ txpool::{ ChainApi as PoolChainApi, BlockHash, ExHash, - ExtrinsicFor, IntoPoolError, Pool, watcher::Status, @@ -47,19 +46,16 @@ use self::error::Result; build_rpc_trait! { /// Substrate authoring RPC API - pub trait AuthorApi { + pub trait AuthorApi { type Metadata; - /// Submit extrinsic for inclusion in block. - #[rpc(name = "author_submitRichExtrinsic")] - fn submit_rich_extrinsic(&self, Extrinsic) -> Result; /// Submit hex-encoded extrinsic for inclusion in block. #[rpc(name = "author_submitExtrinsic")] fn submit_extrinsic(&self, Bytes) -> Result; /// Returns all pending extrinsics, potentially grouped by sender. #[rpc(name = "author_pendingExtrinsics")] - fn pending_extrinsics(&self) -> Result; + fn pending_extrinsics(&self) -> Result>; #[pubsub(name = "author_extrinsicUpdate")] { /// Submit an extrinsic to watch. @@ -103,7 +99,7 @@ impl Author where } } -impl AuthorApi, BlockHash