diff --git a/polkadot/Cargo.lock b/polkadot/Cargo.lock index 7e747b44e6..a7e9516b0b 100644 --- a/polkadot/Cargo.lock +++ b/polkadot/Cargo.lock @@ -5,7 +5,7 @@ name = "adder" version = "0.1.0" dependencies = [ "dlmalloc 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-parachain 0.1.0", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-wasm-builder-runner 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -225,11 +225,6 @@ name = "bitmask" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "bitvec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "bitvec" version = "0.11.3" @@ -309,6 +304,11 @@ name = "bumpalo" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "byte-slice-cast" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "byte-tools" version = "0.2.0" @@ -725,7 +725,7 @@ dependencies = [ "hashmap_core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -765,7 +765,7 @@ name = "fork-tree" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1142,7 +1142,7 @@ name = "impl-codec" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2176,11 +2176,12 @@ source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7 [[package]] name = "parity-codec" -version = "4.1.3" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "bitvec 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-slice-cast 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2404,7 +2405,7 @@ dependencies = [ "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)", "kvdb-rocksdb 0.1.4 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -2430,7 +2431,7 @@ dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "futures-preview 0.3.0-alpha.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-cli 0.5.0", "polkadot-network 0.1.0", "polkadot-primitives 0.1.0", @@ -2449,7 +2450,7 @@ dependencies = [ name = "polkadot-erasure-coding" version = "0.1.0" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "reed-solomon-erasure 4.0.0 (git+https://github.com/paritytech/reed-solomon-erasure)", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -2472,7 +2473,7 @@ dependencies = [ "exit-future 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-availability-store 0.1.0", "polkadot-primitives 0.1.0", @@ -2494,7 +2495,7 @@ dependencies = [ "halt 0.1.0", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "shared_memory 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2507,7 +2508,8 @@ dependencies = [ name = "polkadot-primitives" version = "0.1.0" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitvec 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-parachain 0.1.0", "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2523,11 +2525,11 @@ dependencies = [ name = "polkadot-runtime" version = "0.1.0" dependencies = [ - "bitvec 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitvec 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libsecp256k1 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)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2602,7 +2604,7 @@ dependencies = [ name = "polkadot-statement-table" version = "0.1.0" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", ] @@ -2611,13 +2613,14 @@ dependencies = [ name = "polkadot-validation" version = "0.1.0" dependencies = [ + "bitvec 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "futures-preview 0.3.0-alpha.17 (registry+https://github.com/rust-lang/crates.io-index)", "futures-timer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-availability-store 0.1.0", "polkadot-parachain 0.1.0", @@ -3273,7 +3276,7 @@ dependencies = [ "environmental 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "hash-db 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", "libsecp256k1 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3290,7 +3293,7 @@ dependencies = [ "integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "paste 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3312,7 +3315,7 @@ version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ "impl-serde 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3323,7 +3326,7 @@ name = "srml-aura" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3342,7 +3345,7 @@ name = "srml-authorship" version = "0.1.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3356,7 +3359,7 @@ name = "srml-balances" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3371,7 +3374,7 @@ name = "srml-collective" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3387,7 +3390,7 @@ name = "srml-democracy" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3402,7 +3405,7 @@ name = "srml-elections" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3418,7 +3421,7 @@ name = "srml-executive" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3432,7 +3435,7 @@ name = "srml-finality-tracker" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3446,7 +3449,7 @@ name = "srml-grandpa" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3463,7 +3466,7 @@ name = "srml-indices" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3480,7 +3483,7 @@ name = "srml-metadata" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3491,7 +3494,7 @@ name = "srml-session" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3508,7 +3511,7 @@ name = "srml-staking" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3526,7 +3529,7 @@ name = "srml-sudo" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3543,7 +3546,7 @@ source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e dependencies = [ "bitmask 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "once_cell 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "paste 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3594,7 +3597,7 @@ name = "srml-system" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (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.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3609,7 +3612,7 @@ name = "srml-timestamp" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3623,7 +3626,7 @@ name = "srml-treasury" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3762,7 +3765,7 @@ dependencies = [ "hex-literal 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-api-macros 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3789,7 +3792,7 @@ dependencies = [ "kvdb-rocksdb 0.1.4 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)", "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-client 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3810,7 +3813,7 @@ dependencies = [ "futures-preview 0.3.0-alpha.17 (registry+https://github.com/rust-lang/crates.io-index)", "futures-timer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3831,7 +3834,7 @@ name = "substrate-consensus-aura-primitives" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-client 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3848,7 +3851,7 @@ dependencies = [ "futures-timer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3865,7 +3868,7 @@ dependencies = [ "futures-preview 0.3.0-alpha.17 (registry+https://github.com/rust-lang/crates.io-index)", "futures-timer 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-client 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3884,7 +3887,7 @@ dependencies = [ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "libsecp256k1 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-version 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3907,7 +3910,7 @@ dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "futures-preview 0.3.0-alpha.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3930,7 +3933,7 @@ name = "substrate-finality-grandpa-primitives" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3943,7 +3946,7 @@ name = "substrate-inherents" version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -3994,7 +3997,7 @@ dependencies = [ "linked_hash_set 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4021,7 +4024,7 @@ source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e dependencies = [ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-client 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -4077,7 +4080,7 @@ dependencies = [ "impl-serde 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "primitive-types 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4107,7 +4110,7 @@ dependencies = [ "jsonrpc-derive 12.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-pubsub 12.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4155,7 +4158,7 @@ dependencies = [ "futures-preview 0.3.0-alpha.17 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parity-multiaddr 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4186,7 +4189,7 @@ version = "2.0.0" source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e5a3742cfecb7f8f89c7c961ae900cca645b65" dependencies = [ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", ] @@ -4199,7 +4202,7 @@ dependencies = [ "hash-db 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-panic-handler 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -4251,7 +4254,7 @@ dependencies = [ "derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-client 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", @@ -4266,7 +4269,7 @@ source = "git+https://github.com/paritytech/substrate?branch=polkadot-master#f9e dependencies = [ "hash-db 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", "memory-db 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "substrate-primitives 2.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-master)", "trie-db 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -5083,7 +5086,6 @@ dependencies = [ "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" "checksum bitmask 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5da9b3d9f6f585199287a473f4f8dfab6566cf827d15c00c219f53c645687ead" "checksum bitvec 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b67491e1cc6f37da6c4415cd743cb8d2e2c65388acc91ca3094a054cbf3cbd0c" -"checksum bitvec 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e37e2176261200377c7cde4c6de020394174df556c356f965e4bc239f5ce1c5a" "checksum blake2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "91721a6330935673395a0607df4d49a9cb90ae12d259f1b3e0a3f6e1d486872e" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" "checksum block-buffer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1339a1042f5d9f295737ad4d9a6ab6bf81c84a933dba110b9200cd6d1448b814" @@ -5093,6 +5095,7 @@ dependencies = [ "checksum bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0de79cfb98e7aa9988188784d8664b4b5dad6eaaa0863b91d9a4ed871d4f7a42" "checksum bstr 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e0a692f1c740e7e821ca71a22cf99b9b2322dfa94d10f71443befb1797b3946a" "checksum bumpalo 2.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2cd43d82f27d68911e6ee11ee791fb248f138f5d69424dc02e098d4f152b0b05" +"checksum byte-slice-cast 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7cbcbf18128ec71d8d4a0d054461ec59fff5b75b7d10a4c9b7c7cb1a379c3e77" "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" "checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" "checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" @@ -5283,7 +5286,7 @@ dependencies = [ "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)" = "" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)" = "" -"checksum parity-codec 4.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2900f06356edf90de66a2922db622b36178dca71e85625eae58d0d9cc6cff2ac" +"checksum parity-codec 4.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7c1a0e8c54ce49245caa93c1a4e11dc4da1d1e9cc8649ff30e57aa177d4abd55" "checksum parity-codec-derive 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "00a486fd383382ddcb2de928364b1f82571c1e48274fc43b7667a4738ee4056c" "checksum parity-multiaddr 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "045b3c7af871285146300da35b1932bb6e4639b66c7c98e85d06a32cbc4e8fa7" "checksum parity-multihash 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "df3a17dc27848fd99e4f87eb0f8c9baba6ede0a6d555400c850ca45254ef4ce3" diff --git a/polkadot/primitives/Cargo.toml b/polkadot/primitives/Cargo.toml index a775e14435..21726738b0 100644 --- a/polkadot/primitives/Cargo.toml +++ b/polkadot/primitives/Cargo.toml @@ -6,13 +6,14 @@ edition = "2018" [dependencies] serde = { version = "1.0", optional = true, features = ["derive"] } -parity-codec = { version = "4.1", default-features = false } +parity-codec = { version = "4.1", default-features = false, features = ["bit-vec"] } primitives = { package = "substrate-primitives", git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-master" } substrate-client = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-master" } sr-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-master" } rstd = { package = "sr-std", git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-master" } runtime_primitives = { package = "sr-primitives", git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-master" } polkadot-parachain = { path = "../parachain", default-features = false } +bitvec = { version = "0.11", default-features = false, features = ["alloc"] } [dev-dependencies] substrate-serializer = { git = "https://github.com/paritytech/substrate", branch = "polkadot-master" } @@ -29,4 +30,5 @@ std = [ "runtime_primitives/std", "serde", "polkadot-parachain/std", + "bitvec/std" ] diff --git a/polkadot/primitives/src/parachain.rs b/polkadot/primitives/src/parachain.rs index e8ffc48856..d846f90a82 100644 --- a/polkadot/primitives/src/parachain.rs +++ b/polkadot/primitives/src/parachain.rs @@ -19,6 +19,7 @@ use rstd::prelude::*; use rstd::cmp::Ordering; use parity_codec::{Encode, Decode}; +use bitvec::vec::BitVec; use super::{Hash, Balance, BlockNumber}; #[cfg(feature = "std")] @@ -305,7 +306,9 @@ pub struct AttestedCandidate { /// The candidate data. pub candidate: CandidateReceipt, /// Validity attestations. - pub validity_votes: Vec<(ValidatorIndex, ValidityAttestation)>, + pub validity_votes: Vec, + /// Indices of the corresponding validity votes. + pub validator_indices: BitVec, } impl AttestedCandidate { diff --git a/polkadot/runtime/Cargo.toml b/polkadot/runtime/Cargo.toml index 8c55ffed33..943fe17fc5 100644 --- a/polkadot/runtime/Cargo.toml +++ b/polkadot/runtime/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" build = "build.rs" [dependencies] -bitvec = { version = "0.8", default-features = false, features = ["alloc"] } +bitvec = { version = "0.11", default-features = false, features = ["alloc"] } rustc-hex = { version = "2.0.1", default-features = false } log = { version = "0.3", optional = true } serde = { version = "1.0", default-features = false } diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index 1030e91c79..f4083777bf 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -21,7 +21,6 @@ use rstd::collections::btree_map::BTreeMap; use parity_codec::{Decode, HasCompact}; use srml_support::{decl_storage, decl_module, fail, ensure}; -use bitvec::{bitvec, BigEndian}; use sr_primitives::traits::{Hash as HashT, BlakeTwo256, Member, CheckedConversion, Saturating, One}; use sr_primitives::weights::SimpleDispatchInfo; use primitives::{Hash, Balance, parachain::{ @@ -726,6 +725,11 @@ impl Module { "Not enough validity attestations" ); + ensure!( + candidate.validity_votes.len() <= authorities.len(), + "The number of attestations exceeds the number of authorities" + ); + let fees = candidate.candidate().fees; T::ParachainCurrency::deduct(para_id, fees)?; @@ -733,19 +737,15 @@ impl Module { let mut encoded_implicit = None; let mut encoded_explicit = None; - // track which voters have voted already, 1 bit per authority. - let mut track_voters = bitvec![0; authorities.len()]; - for (auth_index, validity_attestation) in &candidate.validity_votes { - let auth_index = *auth_index as usize; - // protect against double-votes. - match validator_group.iter().find(|&(idx, _)| *idx == auth_index) { - None => return Err("Attesting validator not on this chain's validation duty."), - Some(&(idx, _)) => { - if track_voters.get(idx) { - return Err("Voter already attested validity once") - } - track_voters.set(idx, true) - } + for ((auth_index, _), validity_attestation) in candidate.validator_indices + .iter() + .enumerate() + .filter(|(_, bit)| *bit) + .zip(candidate.validity_votes.iter()) + { + + if validator_group.iter().find(|&(idx, _)| *idx == auth_index).is_none() { + return Err("Attesting validator not on this chain's validation duty."); } let (payload, sig) = match validity_attestation { @@ -818,6 +818,7 @@ impl ProvideInherent for Module { mod tests { use super::*; use super::Call as ParachainsCall; + use bitvec::{bitvec, vec::BitVec}; use sr_io::{TestExternalities, with_externalities}; use substrate_primitives::{H256, Blake2Hasher}; use substrate_trie::NodeCodec; @@ -827,7 +828,7 @@ mod tests { testing::{UintAuthorityId, Header}, }; use primitives::{ - parachain::{CandidateReceipt, HeadData, ValidityAttestation, ValidatorIndex}, SessionKey, + parachain::{CandidateReceipt, HeadData, ValidityAttestation}, SessionKey, BlockNumber, AuraId, }; use keyring::Ed25519Keyring; @@ -1004,6 +1005,7 @@ mod tests { let validation_entries = duty_roster.validator_duty.iter() .enumerate(); + let mut validator_indices = BitVec::new(); for (idx, &duty) in validation_entries { if duty != Chain::Parachain(candidate.parachain_index()) { continue } vote_implicit = !vote_implicit; @@ -1019,17 +1021,24 @@ mod tests { let payload = localized_payload(statement, parent_hash); let signature = key.sign(&payload[..]).into(); - candidate.validity_votes.push((idx as ValidatorIndex, if vote_implicit { + candidate.validity_votes.push(if vote_implicit { ValidityAttestation::Implicit(signature) } else { ValidityAttestation::Explicit(signature) - })); + }); + + if validator_indices.len() <= idx { + validator_indices.resize(idx + 1, false); + } + validator_indices.set(idx, true); } + candidate.validator_indices = validator_indices; } fn new_candidate_with_egress_roots(egress_queue_roots: Vec<(ParaId, H256)>) -> AttestedCandidate { AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 0.into(), collator: Default::default(), @@ -1049,6 +1058,7 @@ mod tests { ) -> AttestedCandidate { AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: id.into(), collator: Default::default(), @@ -1411,6 +1421,7 @@ mod tests { with_externalities(&mut new_test_ext(parachains), || { let candidate = AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 0.into(), collator: Default::default(), @@ -1438,6 +1449,7 @@ mod tests { with_externalities(&mut new_test_ext(parachains), || { let mut candidate_a = AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 0.into(), collator: Default::default(), @@ -1452,6 +1464,7 @@ mod tests { let mut candidate_b = AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 1.into(), collator: Default::default(), @@ -1489,6 +1502,7 @@ mod tests { with_externalities(&mut new_test_ext(parachains), || { let mut candidate = AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 0.into(), collator: Default::default(), @@ -1505,6 +1519,7 @@ mod tests { let mut double_validity = candidate.clone(); double_validity.validity_votes.push(candidate.validity_votes[0].clone()); + double_validity.validator_indices.push(true); assert!(Parachains::dispatch( set_heads(vec![double_validity]), @@ -1513,6 +1528,42 @@ mod tests { }); } + #[test] + fn validators_not_from_group_is_rejected() { + let parachains = vec![ + (0u32.into(), vec![], vec![]), + (1u32.into(), vec![], vec![]), + ]; + + with_externalities(&mut new_test_ext(parachains), || { + let mut candidate = AttestedCandidate { + validity_votes: vec![], + validator_indices: BitVec::new(), + candidate: CandidateReceipt { + parachain_index: 0.into(), + collator: Default::default(), + signature: Default::default(), + head_data: HeadData(vec![1, 2, 3]), + egress_queue_roots: vec![], + fees: 0, + block_data_hash: Default::default(), + upward_messages: vec![], + } + }; + + make_attestations(&mut candidate); + + // Change the last vote index to make it not corresponding to the assigned group. + assert!(candidate.validator_indices.pop().is_some()); + candidate.validator_indices.append(&mut bitvec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]); + + assert!(Parachains::dispatch( + set_heads(vec![candidate]), + Origin::NONE, + ).is_err()); + }); + } + #[test] fn ingress_works() { use sr_primitives::traits::OnFinalize; @@ -1533,6 +1584,7 @@ mod tests { let from_a = vec![(1.into(), [i as u8; 32].into())]; let mut candidate_a = AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 0.into(), collator: Default::default(), @@ -1548,6 +1600,7 @@ mod tests { let from_b = vec![(99.into(), [i as u8; 32].into())]; let mut candidate_b = AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 1.into(), collator: Default::default(), @@ -1611,6 +1664,7 @@ mod tests { let mut candidate_c = AttestedCandidate { validity_votes: vec![], + validator_indices: BitVec::new(), candidate: CandidateReceipt { parachain_index: 99.into(), collator: Default::default(), diff --git a/polkadot/test-parachains/adder/Cargo.toml b/polkadot/test-parachains/adder/Cargo.toml index 39a8a66f80..e8e8b5cbb9 100644 --- a/polkadot/test-parachains/adder/Cargo.toml +++ b/polkadot/test-parachains/adder/Cargo.toml @@ -26,4 +26,4 @@ no_std = [ "parachain/wasm-api", "dlmalloc", ] -std = [] \ No newline at end of file +std = [] diff --git a/polkadot/validation/Cargo.toml b/polkadot/validation/Cargo.toml index 0b4b944191..e50438f6b5 100644 --- a/polkadot/validation/Cargo.toml +++ b/polkadot/validation/Cargo.toml @@ -30,6 +30,7 @@ runtime_aura = { package = "srml-aura", git = "https://github.com/paritytech/sub client = { package = "substrate-client", git = "https://github.com/paritytech/substrate", branch = "polkadot-master" } trie = { package = "substrate-trie", git = "https://github.com/paritytech/substrate", branch = "polkadot-master" } runtime_primitives = { package = "sr-primitives", git = "https://github.com/paritytech/substrate", branch = "polkadot-master" } +bitvec = { version = "0.11", default-features = false, features = ["alloc"] } [dev-dependencies] substrate-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-master" } diff --git a/polkadot/validation/src/shared_table/mod.rs b/polkadot/validation/src/shared_table/mod.rs index a72d4ab1ea..85fa3e8eba 100644 --- a/polkadot/validation/src/shared_table/mod.rs +++ b/polkadot/validation/src/shared_table/mod.rs @@ -30,6 +30,7 @@ use polkadot_primitives::parachain::{Id as ParaId, Collation, Extrinsic, Candida use parking_lot::Mutex; use futures::prelude::*; use log::{warn, debug}; +use bitvec::bitvec; use super::{GroupInfo, TableRouter}; use self::includable::IncludabilitySender; @@ -519,14 +520,26 @@ impl SharedTable { // aggregation in the future. let table_attestations = self.inner.lock().table.proposed_candidates(&*self.context); table_attestations.into_iter() - .map(|attested| AttestedCandidate { - candidate: attested.candidate, - validity_votes: attested.validity_votes.into_iter().map(|(a, v)| match v { - GAttestation::Implicit(s) => (a, ValidityAttestation::Implicit(s)), - GAttestation::Explicit(s) => (a, ValidityAttestation::Explicit(s)), - }).collect(), - }) - .collect() + .map(|attested| { + let mut validity_votes: Vec<_> = attested.validity_votes.into_iter().map(|(id, a)| { + (id as usize, match a { + GAttestation::Implicit(s) => ValidityAttestation::Implicit(s), + GAttestation::Explicit(s) => ValidityAttestation::Explicit(s), + }) + }).collect(); + validity_votes.sort_by(|(id1, _), (id2, _)| id1.cmp(id2)); + + let mut validator_indices = bitvec![0; validity_votes.last().map(|(i, _)| i + 1).unwrap_or_default()]; + for (id, _) in &validity_votes { + validator_indices.set(*id, true); + } + + AttestedCandidate { + candidate: attested.candidate, + validity_votes: validity_votes.into_iter().map(|(_, a)| a).collect(), + validator_indices, + } + }).collect() } /// Get the number of total parachains.