mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-01 03:21:02 +00:00
grandpa: update to finality-grandpa v0.12.0 (#5853)
* grandpa: update to v0.12.0 * grandpa: fix tests * grandpa: better validation of authority set invariants * grandpa: avoid duplicating invalid authority list check * grandpa: add missing doc * grandpa: better validation of expect proofs * grandpa: fix test compilation * grandpa: fix tests * grandpa: add test for AuthoritySet invariants * grandpa: bump finality-grandpa to v0.12.0
This commit is contained in:
@@ -1618,7 +1618,10 @@ mod tests {
|
||||
use crate::environment::VoterSetState;
|
||||
|
||||
let base = (H256::zero(), 0);
|
||||
let voters = AuthoritySet::genesis(Vec::new());
|
||||
|
||||
let voters = vec![(AuthorityId::from_slice(&[1; 32]), 1)];
|
||||
let voters = AuthoritySet::genesis(voters).unwrap();
|
||||
|
||||
let set_state = VoterSetState::live(
|
||||
0,
|
||||
&voters,
|
||||
|
||||
@@ -258,7 +258,7 @@ impl<B: BlockT, N: Network<B>> NetworkBridge<B, N> {
|
||||
// is a no-op if currently in that set.
|
||||
self.validator.note_set(
|
||||
set_id,
|
||||
voters.voters().iter().map(|(v, _)| v.clone()).collect(),
|
||||
voters.iter().map(|(v, _)| v.clone()).collect(),
|
||||
|to, neighbor| self.neighbor_sender.send(to, neighbor),
|
||||
);
|
||||
|
||||
@@ -289,7 +289,7 @@ impl<B: BlockT, N: Network<B>> NetworkBridge<B, N> {
|
||||
|
||||
let locals = local_key.and_then(|pair| {
|
||||
let id = pair.public();
|
||||
if voters.contains_key(&id) {
|
||||
if voters.contains(&id) {
|
||||
Some((pair, id))
|
||||
} else {
|
||||
None
|
||||
@@ -308,12 +308,12 @@ impl<B: BlockT, N: Network<B>> NetworkBridge<B, N> {
|
||||
}
|
||||
Ok(GossipMessage::Vote(msg)) => {
|
||||
// check signature.
|
||||
if !voters.contains_key(&msg.message.id) {
|
||||
if !voters.contains(&msg.message.id) {
|
||||
debug!(target: "afg", "Skipping message from unknown voter {}", msg.message.id);
|
||||
return future::ready(None);
|
||||
}
|
||||
|
||||
if voters.len() <= TELEMETRY_VOTERS_LIMIT {
|
||||
if voters.len().get() <= TELEMETRY_VOTERS_LIMIT {
|
||||
match &msg.message.message {
|
||||
PrimaryPropose(propose) => {
|
||||
telemetry!(CONSENSUS_INFO; "afg.received_propose";
|
||||
@@ -378,7 +378,7 @@ impl<B: BlockT, N: Network<B>> NetworkBridge<B, N> {
|
||||
) {
|
||||
self.validator.note_set(
|
||||
set_id,
|
||||
voters.voters().iter().map(|(v, _)| v.clone()).collect(),
|
||||
voters.iter().map(|(v, _)| v.clone()).collect(),
|
||||
|to, neighbor| self.neighbor_sender.send(to, neighbor),
|
||||
);
|
||||
|
||||
@@ -476,7 +476,7 @@ fn incoming_global<B: BlockT>(
|
||||
gossip_validator: &Arc<GossipValidator<B>>,
|
||||
voters: &VoterSet<AuthorityId>,
|
||||
| {
|
||||
if voters.len() <= TELEMETRY_VOTERS_LIMIT {
|
||||
if voters.len().get() <= TELEMETRY_VOTERS_LIMIT {
|
||||
let precommits_signed_by: Vec<String> =
|
||||
msg.message.auth_data.iter().map(move |(_, a)| {
|
||||
format!("{}", a)
|
||||
@@ -799,13 +799,13 @@ fn check_compact_commit<Block: BlockT>(
|
||||
) -> Result<(), ReputationChange> {
|
||||
// 4f + 1 = equivocations from f voters.
|
||||
let f = voters.total_weight() - voters.threshold();
|
||||
let full_threshold = voters.total_weight() + f;
|
||||
let full_threshold = (f + voters.total_weight()).0;
|
||||
|
||||
// check total weight is not out of range.
|
||||
let mut total_weight = 0;
|
||||
for (_, ref id) in &msg.auth_data {
|
||||
if let Some(weight) = voters.info(id).map(|info| info.weight()) {
|
||||
total_weight += weight;
|
||||
if let Some(weight) = voters.get(id).map(|info| info.weight()) {
|
||||
total_weight += weight.get();
|
||||
if total_weight > full_threshold {
|
||||
return Err(cost::MALFORMED_COMMIT);
|
||||
}
|
||||
@@ -815,7 +815,7 @@ fn check_compact_commit<Block: BlockT>(
|
||||
}
|
||||
}
|
||||
|
||||
if total_weight < voters.threshold() {
|
||||
if total_weight < voters.threshold().get() {
|
||||
return Err(cost::MALFORMED_COMMIT);
|
||||
}
|
||||
|
||||
@@ -860,7 +860,7 @@ fn check_catch_up<Block: BlockT>(
|
||||
) -> Result<(), ReputationChange> {
|
||||
// 4f + 1 = equivocations from f voters.
|
||||
let f = voters.total_weight() - voters.threshold();
|
||||
let full_threshold = voters.total_weight() + f;
|
||||
let full_threshold = (f + voters.total_weight()).0;
|
||||
|
||||
// check total weight is not out of range for a set of votes.
|
||||
fn check_weight<'a>(
|
||||
@@ -871,8 +871,8 @@ fn check_catch_up<Block: BlockT>(
|
||||
let mut total_weight = 0;
|
||||
|
||||
for id in votes {
|
||||
if let Some(weight) = voters.info(&id).map(|info| info.weight()) {
|
||||
total_weight += weight;
|
||||
if let Some(weight) = voters.get(&id).map(|info| info.weight()) {
|
||||
total_weight += weight.get();
|
||||
if total_weight > full_threshold {
|
||||
return Err(cost::MALFORMED_CATCH_UP);
|
||||
}
|
||||
@@ -882,7 +882,7 @@ fn check_catch_up<Block: BlockT>(
|
||||
}
|
||||
}
|
||||
|
||||
if total_weight < voters.threshold() {
|
||||
if total_weight < voters.threshold().get() {
|
||||
return Err(cost::MALFORMED_CATCH_UP);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ use std::{borrow::Cow, pin::Pin, task::{Context, Poll}};
|
||||
use crate::environment::SharedVoterSetState;
|
||||
use sp_finality_grandpa::{AuthorityList, GRANDPA_ENGINE_ID};
|
||||
use super::gossip::{self, GossipValidator};
|
||||
use super::{AuthorityId, VoterSet, Round, SetId};
|
||||
use super::{VoterSet, Round, SetId};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub(crate) enum Event {
|
||||
@@ -142,11 +142,15 @@ fn voter_set_state() -> SharedVoterSetState<Block> {
|
||||
use crate::authorities::AuthoritySet;
|
||||
use crate::environment::VoterSetState;
|
||||
use finality_grandpa::round::State as RoundState;
|
||||
use sp_core::H256;
|
||||
use sp_core::{crypto::Public, H256};
|
||||
use sp_finality_grandpa::AuthorityId;
|
||||
|
||||
let state = RoundState::genesis((H256::zero(), 0));
|
||||
let base = state.prevote_ghost.unwrap();
|
||||
let voters = AuthoritySet::genesis(Vec::new());
|
||||
|
||||
let voters = vec![(AuthorityId::from_slice(&[1; 32]), 1)];
|
||||
let voters = AuthoritySet::genesis(voters).unwrap();
|
||||
|
||||
let set_state = VoterSetState::live(
|
||||
0,
|
||||
&voters,
|
||||
@@ -212,7 +216,7 @@ impl sc_network_gossip::ValidatorContext<Block> for NoopContext {
|
||||
fn good_commit_leads_to_relay() {
|
||||
let private = [Ed25519Keyring::Alice, Ed25519Keyring::Bob, Ed25519Keyring::Charlie];
|
||||
let public = make_ids(&private[..]);
|
||||
let voter_set = Arc::new(public.iter().cloned().collect::<VoterSet<AuthorityId>>());
|
||||
let voter_set = Arc::new(VoterSet::new(public.iter().cloned()).unwrap());
|
||||
|
||||
let round = 1;
|
||||
let set_id = 1;
|
||||
@@ -360,7 +364,7 @@ fn bad_commit_leads_to_report() {
|
||||
let _ = env_logger::try_init();
|
||||
let private = [Ed25519Keyring::Alice, Ed25519Keyring::Bob, Ed25519Keyring::Charlie];
|
||||
let public = make_ids(&private[..]);
|
||||
let voter_set = Arc::new(public.iter().cloned().collect::<VoterSet<AuthorityId>>());
|
||||
let voter_set = Arc::new(VoterSet::new(public.iter().cloned()).unwrap());
|
||||
|
||||
let round = 1;
|
||||
let set_id = 1;
|
||||
|
||||
Reference in New Issue
Block a user