babe: report equivocations (#6362)

* slots: create primitives crate for consensus slots

* offences: add method to check if an offence is unknown

* babe: initial equivocation reporting implementation

* babe: organize imports

* babe: working equivocation reporting

* babe: add slot number to equivocation proof

* session: move duplicate traits to session primitives

* babe: move equivocation stuff to its own file

* offences: fix test

* session: don't have primitives depend on frame_support

* babe: use opaque type for key owner proof

* babe: cleanup client equivocation reporting

* babe: cleanup equivocation code in pallet

* babe: allow sending signed equivocation reports

* node: fix compilation

* fix test compilation

* babe: return bool on check_equivocation_proof

* babe: add test for equivocation reporting

* babe: add more tests

* babe: add test for validate unsigned

* babe: take slot number in generate_key_ownership_proof API

* babe: add benchmark for equivocation proof checking

* session: add benchmark for membership proof checking

* offences: fix babe benchmark

* babe: add weights based on benchmark results

* babe: adjust weights after benchmarking on reference hardware

* babe: reorder checks in check_and_report_equivocation
This commit is contained in:
André Silva
2020-07-04 11:18:13 +01:00
committed by GitHub
parent 61635e75c1
commit a9c21b8b84
34 changed files with 2031 additions and 275 deletions
+28 -16
View File
@@ -13,40 +13,52 @@ targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "1.3.1", default-features = false, features = ["derive"] }
serde = { version = "1.0.101", optional = true }
sp-inherents = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/inherents" }
sp-application-crypto = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/application-crypto" }
sp-std = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/std" }
sp-runtime = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/runtime" }
sp-staking = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/staking" }
frame-benchmarking = { version = "2.0.0-rc4", default-features = false, path = "../benchmarking", optional = true }
frame-support = { version = "2.0.0-rc4", default-features = false, path = "../support" }
frame-system = { version = "2.0.0-rc4", default-features = false, path = "../system" }
pallet-timestamp = { version = "2.0.0-rc4", default-features = false, path = "../timestamp" }
sp-timestamp = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/timestamp" }
pallet-authorship = { version = "2.0.0-rc4", default-features = false, path = "../authorship" }
pallet-session = { version = "2.0.0-rc4", default-features = false, path = "../session" }
pallet-timestamp = { version = "2.0.0-rc4", default-features = false, path = "../timestamp" }
serde = { version = "1.0.101", optional = true }
sp-application-crypto = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/application-crypto" }
sp-consensus-babe = { version = "0.8.0-rc4", default-features = false, path = "../../primitives/consensus/babe" }
sp-consensus-vrf = { version = "0.8.0-rc4", default-features = false, path = "../../primitives/consensus/vrf" }
sp-inherents = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/inherents" }
sp-io = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/io" }
sp-runtime = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/runtime" }
sp-session = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/session" }
sp-staking = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/staking" }
sp-std = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/std" }
sp-timestamp = { version = "2.0.0-rc4", default-features = false, path = "../../primitives/timestamp" }
[dev-dependencies]
frame-benchmarking = { version = "2.0.0-rc4", path = "../benchmarking" }
pallet-balances = { version = "2.0.0-rc4", path = "../balances" }
pallet-offences = { version = "2.0.0-rc4", path = "../offences" }
pallet-staking = { version = "2.0.0-rc4", path = "../staking" }
pallet-staking-reward-curve = { version = "2.0.0-rc4", path = "../staking/reward-curve" }
sp-core = { version = "2.0.0-rc4", path = "../../primitives/core" }
[features]
default = ["std"]
std = [
"codec/std",
"serde",
"sp-std/std",
"sp-application-crypto/std",
"frame-benchmarking/std",
"frame-support/std",
"sp-runtime/std",
"sp-staking/std",
"frame-system/std",
"pallet-authorship/std",
"pallet-session/std",
"pallet-timestamp/std",
"sp-timestamp/std",
"sp-inherents/std",
"serde",
"sp-application-crypto/std",
"sp-consensus-babe/std",
"sp-consensus-vrf/std",
"pallet-session/std",
"sp-inherents/std",
"sp-io/std",
"sp-runtime/std",
"sp-session/std",
"sp-staking/std",
"sp-std/std",
"sp-timestamp/std",
]
runtime-benchmarks = ["frame-benchmarking"]