grandpa: Use storage proofs for Grandpa authorities (#3734)

* grandpa: Write Grandpa authorities to well known key.

Instead of requiring execution proofs for Grandpa authorities, this
enables much simpler storage proofs.

* grandpa: Introduce named AuthorityList type.

* grandpa: Storage migration for srml-grandpa module.

* Remove no-longer-used GrandpaApi runtime API.

* grandpa: Write AuthorityList to storage with encoding version.

We expect the AuthorityList type may change (eg. key changes). To make
upgrades smoother, include a version in the stored value.

* Bump node runtime spec version.

* Update srml/grandpa/src/lib.rs

Co-Authored-By: André Silva <andre.beat@gmail.com>
This commit is contained in:
Jim Posen
2019-10-31 14:33:34 +01:00
committed by GitHub
parent 3cbc28ab59
commit c0a1926704
18 changed files with 263 additions and 195 deletions
+1 -8
View File
@@ -23,8 +23,7 @@ use client::{
runtime_api as client_api, impl_runtime_apis
};
use aura_primitives::sr25519::AuthorityId as AuraId;
use grandpa::{AuthorityId as GrandpaId, AuthorityWeight as GrandpaWeight};
use grandpa::fg_primitives;
use grandpa::AuthorityId as GrandpaId;
use version::RuntimeVersion;
#[cfg(feature = "std")]
use version::NativeVersion;
@@ -353,10 +352,4 @@ impl_runtime_apis! {
opaque::SessionKeys::generate(seed)
}
}
impl fg_primitives::GrandpaApi<Block> for Runtime {
fn grandpa_authorities() -> Vec<(GrandpaId, GrandpaWeight)> {
Grandpa::grandpa_authorities()
}
}
}
+3 -3
View File
@@ -48,7 +48,7 @@ macro_rules! new_full_start {
.ok_or_else(|| substrate_service::Error::SelectChainRequired)?;
let (grandpa_block_import, grandpa_link) =
grandpa::block_import::<_, _, _, runtime::RuntimeApi, _, _>(
grandpa::block_import::<_, _, _, runtime::RuntimeApi, _>(
client.clone(), &*client, select_chain
)?;
@@ -197,8 +197,8 @@ pub fn new_light<C: Send + Default + 'static>(config: Configuration<C, GenesisCo
let fetch_checker = fetcher
.map(|fetcher| fetcher.checker().clone())
.ok_or_else(|| "Trying to start light import queue without active fetch checker")?;
let grandpa_block_import = grandpa::light_block_import::<_, _, _, RuntimeApi, _>(
client.clone(), backend, Arc::new(fetch_checker), client.clone()
let grandpa_block_import = grandpa::light_block_import::<_, _, _, RuntimeApi>(
client.clone(), backend, &*client.clone(), Arc::new(fetch_checker),
)?;
let finality_proof_import = grandpa_block_import.clone();
let finality_proof_request_builder =