Get the result of block importing

This commit is contained in:
Luke Parker
2022-10-22 01:43:07 -04:00
parent 8ed0f1f1cf
commit 193281e387
5 changed files with 63 additions and 13 deletions

View File

@@ -180,7 +180,7 @@ pub trait Network: Send + Sync {
async fn slash(&mut self, validator: Self::ValidatorId);
/// Validate a block.
fn validate(&mut self, block: &Self::Block) -> Result<(), BlockError>;
async fn validate(&mut self, block: &Self::Block) -> Result<(), BlockError>;
/// Add a block, returning the proposal for the next one. It's possible a block, which was never
/// validated or even failed validation, may be passed here if a supermajority of validators did
/// consider it valid and created a commit for it. This deviates from the paper which will have a

View File

@@ -436,7 +436,7 @@ impl<N: Network + 'static> TendermintMachine<N> {
// 22-33
if self.step == Step::Propose {
// Delay error handling (triggering a slash) until after we vote.
let (valid, err) = match self.network.write().await.validate(block) {
let (valid, err) = match self.network.write().await.validate(block).await {
Ok(_) => (true, Ok(None)),
Err(BlockError::Temporal) => (false, Ok(None)),
Err(BlockError::Fatal) => (false, Err(TendermintError::Malicious(proposer))),
@@ -478,7 +478,7 @@ impl<N: Network + 'static> TendermintMachine<N> {
// being set, or only being set historically, means this has yet to be run
if self.log.has_consensus(self.round, Data::Prevote(Some(block.id()))) {
match self.network.write().await.validate(block) {
match self.network.write().await.validate(block).await {
Ok(_) => (),
Err(BlockError::Temporal) => (),
Err(BlockError::Fatal) => Err(TendermintError::Malicious(proposer))?,

View File

@@ -109,7 +109,7 @@ impl Network for TestNetwork {
todo!()
}
fn validate(&mut self, block: &TestBlock) -> Result<(), BlockError> {
async fn validate(&mut self, block: &TestBlock) -> Result<(), BlockError> {
block.valid
}