diff --git a/substrate/consensus/src/import_queue.rs b/substrate/consensus/src/import_queue.rs index ef74bc6c..4a5a3031 100644 --- a/substrate/consensus/src/import_queue.rs +++ b/substrate/consensus/src/import_queue.rs @@ -26,7 +26,7 @@ use tendermint_machine::{ use crate::{ CONSENSUS_ID, - signature_scheme::TendermintSigner, + validators::TendermintValidators, tendermint::{TendermintClient, TendermintImport}, Announce, }; @@ -116,7 +116,7 @@ where Ok(best) => BlockNumber(best), Err(_) => panic!("BlockNumber exceeded u64"), }, - Commit::::decode( + Commit::::decode( &mut import_clone .client .justifications(&BlockId::Number(best)) diff --git a/substrate/consensus/src/lib.rs b/substrate/consensus/src/lib.rs index 99c1f2c8..5c6413b4 100644 --- a/substrate/consensus/src/lib.rs +++ b/substrate/consensus/src/lib.rs @@ -11,8 +11,7 @@ use substrate_prometheus_endpoint::Registry; use serai_runtime::{self, opaque::Block, RuntimeApi}; -mod signature_scheme; -mod weights; +mod validators; mod tendermint; mod block_import; diff --git a/substrate/consensus/src/tendermint.rs b/substrate/consensus/src/tendermint.rs index 077be1a5..2b92c004 100644 --- a/substrate/consensus/src/tendermint.rs +++ b/substrate/consensus/src/tendermint.rs @@ -33,8 +33,7 @@ use tendermint_machine::{ use crate::{ CONSENSUS_ID, - signature_scheme::TendermintSigner, - weights::TendermintWeights, + validators::TendermintValidators, import_queue::{ImportFuture, TendermintImportQueue}, Announce, }; @@ -197,7 +196,7 @@ where Err(Error::InvalidJustification)?; } - let commit: Commit = + let commit: Commit = Commit::decode(&mut justification.1.as_ref()).map_err(|_| Error::InvalidJustification)?; if !self.verify_commit(hash, &commit) { Err(Error::InvalidJustification)?; @@ -312,18 +311,18 @@ where TransactionFor: Send + Sync + 'static, { type ValidatorId = u16; - type SignatureScheme = TendermintSigner; - type Weights = TendermintWeights; + type SignatureScheme = TendermintValidators; + type Weights = TendermintValidators; type Block = B; const BLOCK_TIME: u32 = { (serai_runtime::MILLISECS_PER_BLOCK / 1000) as u32 }; - fn signature_scheme(&self) -> Arc { - Arc::new(TendermintSigner::new()) + fn signature_scheme(&self) -> Arc { + Arc::new(TendermintValidators::new()) } - fn weights(&self) -> Arc { - Arc::new(TendermintWeights) + fn weights(&self) -> Arc { + Arc::new(TendermintValidators::new()) } async fn broadcast(&mut self, msg: SignedMessage) { @@ -391,7 +390,7 @@ where Ok(()) } - async fn add_block(&mut self, block: B, commit: Commit) -> B { + async fn add_block(&mut self, block: B, commit: Commit) -> B { let hash = block.hash(); let justification = (CONSENSUS_ID, commit.encode()); debug_assert!(self.verify_justification(hash, &justification).is_ok()); diff --git a/substrate/consensus/src/signature_scheme.rs b/substrate/consensus/src/validators.rs similarity index 50% rename from substrate/consensus/src/signature_scheme.rs rename to substrate/consensus/src/validators.rs index bf552f36..d537ffd5 100644 --- a/substrate/consensus/src/signature_scheme.rs +++ b/substrate/consensus/src/validators.rs @@ -1,24 +1,27 @@ +// TODO: This should be built around pallet_sessions (and pallet_staking?). + use sp_application_crypto::{ RuntimePublic as PublicTrait, Pair as PairTrait, sr25519::{Public, Pair, Signature}, }; -use tendermint_machine::ext::SignatureScheme; +use tendermint_machine::ext::{BlockNumber, Round, Weights, SignatureScheme}; -pub(crate) struct TendermintSigner { - keys: Pair, - lookup: Vec, +const VALIDATORS: usize = 1; + +pub(crate) struct TendermintValidators { + keys: Pair, // sp_keystore + lookup: Vec, // sessions } -impl TendermintSigner { - pub(crate) fn new() -> TendermintSigner { - // TODO +impl TendermintValidators { + pub(crate) fn new() -> TendermintValidators { let keys = Pair::from_string("//Alice", None).unwrap(); - TendermintSigner { lookup: vec![keys.public()], keys } + TendermintValidators { lookup: vec![keys.public()], keys } } } -impl SignatureScheme for TendermintSigner { +impl SignatureScheme for TendermintValidators { type ValidatorId = u16; type Signature = Signature; type AggregateSignature = Vec; @@ -47,3 +50,18 @@ impl SignatureScheme for TendermintSigner { true } } + +impl Weights for TendermintValidators { + type ValidatorId = u16; + + fn total_weight(&self) -> u64 { + VALIDATORS.try_into().unwrap() + } + fn weight(&self, id: u16) -> u64 { + [1; VALIDATORS][usize::try_from(id).unwrap()] + } + + fn proposer(&self, number: BlockNumber, round: Round) -> u16 { + u16::try_from((number.0 + u64::from(round.0)) % u64::try_from(VALIDATORS).unwrap()).unwrap() + } +} diff --git a/substrate/consensus/src/weights.rs b/substrate/consensus/src/weights.rs deleted file mode 100644 index f6c801e1..00000000 --- a/substrate/consensus/src/weights.rs +++ /dev/null @@ -1,22 +0,0 @@ -// TODO - -use tendermint_machine::ext::{BlockNumber, Round, Weights}; - -const VALIDATORS: usize = 1; - -// TODO: Move to sp_session -pub(crate) struct TendermintWeights; -impl Weights for TendermintWeights { - type ValidatorId = u16; - - fn total_weight(&self) -> u64 { - VALIDATORS.try_into().unwrap() - } - fn weight(&self, id: u16) -> u64 { - [1; VALIDATORS][usize::try_from(id).unwrap()] - } - - fn proposer(&self, number: BlockNumber, round: Round) -> u16 { - u16::try_from((number.0 + u64::from(round.0)) % u64::try_from(VALIDATORS).unwrap()).unwrap() - } -}