Skip to content

Commit

Permalink
chore(batcher): verify block number on propose block
Browse files Browse the repository at this point in the history
  • Loading branch information
ArniStarkware committed Nov 28, 2024
1 parent 3021db8 commit 7fc654e
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 6 deletions.
32 changes: 30 additions & 2 deletions crates/starknet_batcher/src/batcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,11 @@ impl Batcher {
propose_block_input: ProposeBlockInput,
) -> BatcherResult<()> {
let active_height = self.active_height.ok_or(BatcherError::NoActiveHeight)?;
verify_block_input(active_height, propose_block_input.retrospective_block_hash)?;
verify_block_input(
active_height,
propose_block_input.block_info.block_number,
propose_block_input.retrospective_block_hash,
)?;

let proposal_id = propose_block_input.proposal_id;
let deadline = deadline_as_instant(propose_block_input.deadline)?;
Expand Down Expand Up @@ -154,7 +158,11 @@ impl Batcher {
validate_block_input: ValidateBlockInput,
) -> BatcherResult<()> {
let active_height = self.active_height.ok_or(BatcherError::NoActiveHeight)?;
verify_block_input(active_height, validate_block_input.retrospective_block_hash)?;
verify_block_input(
active_height,
validate_block_input.block_info.block_number,
validate_block_input.retrospective_block_hash,
)?;

let proposal_id = validate_block_input.proposal_id;
let deadline = deadline_as_instant(validate_block_input.deadline)?;
Expand Down Expand Up @@ -413,6 +421,17 @@ pub fn deadline_as_instant(deadline: chrono::DateTime<Utc>) -> BatcherResult<tok
}

fn verify_block_input(
height: BlockNumber,
block_number: BlockNumber,
retrospective_block_hash: Option<BlockHashAndNumber>,
) -> BatcherResult<()> {
verify_non_empty_retrospective_block_hash(height, retrospective_block_hash)?;
verify_block_number(height, block_number)?;

Ok(())
}

fn verify_non_empty_retrospective_block_hash(
height: BlockNumber,
retrospective_block_hash: Option<BlockHashAndNumber>,
) -> BatcherResult<()> {
Expand All @@ -421,5 +440,14 @@ fn verify_block_input(
{
return Err(BatcherError::MissingRetrospectiveBlockHash);
}

Ok(())
}

fn verify_block_number(height: BlockNumber, block_number: BlockNumber) -> BatcherResult<()> {
if block_number != height {
return Err(BatcherError::InvalidBlockNumber { active_height: height, block_number });
}

Ok(())
}
8 changes: 4 additions & 4 deletions crates/starknet_batcher/src/batcher_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use futures::FutureExt;
use mockall::automock;
use mockall::predicate::{always, eq};
use rstest::{fixture, rstest};
use starknet_api::block::{BlockHashAndNumber, BlockNumber};
use starknet_api::block::{BlockHashAndNumber, BlockInfo, BlockNumber};
use starknet_api::core::{ContractAddress, Nonce, StateDiffCommitment};
use starknet_api::executable_transaction::Transaction;
use starknet_api::hash::PoseidonHash;
Expand Down Expand Up @@ -231,7 +231,7 @@ async fn validate_block_full_flow() {
proposal_id: PROPOSAL_ID,
deadline: deadline(),
retrospective_block_hash: None,
block_info: Default::default(),
block_info: BlockInfo { block_number: INITIAL_HEIGHT, ..Default::default() },
};
batcher.validate_block(validate_block_input).await.unwrap();

Expand Down Expand Up @@ -350,7 +350,7 @@ async fn send_finish_to_an_invalid_proposal() {
proposal_id: PROPOSAL_ID,
deadline: deadline(),
retrospective_block_hash: None,
block_info: Default::default(),
block_info: BlockInfo { block_number: INITIAL_HEIGHT, ..Default::default() },
};
batcher.validate_block(validate_block_input).await.unwrap();

Expand Down Expand Up @@ -383,7 +383,7 @@ async fn propose_block_full_flow() {
proposal_id: PROPOSAL_ID,
retrospective_block_hash: None,
deadline: chrono::Utc::now() + chrono::Duration::seconds(1),
block_info: Default::default(),
block_info: BlockInfo { block_number: INITIAL_HEIGHT, ..Default::default() },
})
.await
.unwrap();
Expand Down
2 changes: 2 additions & 0 deletions crates/starknet_batcher_types/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ pub enum BatcherError {
HeightInProgress,
#[error("Internal server error.")]
InternalError,
#[error("Invalid block number. The active height is {active_height}, got {block_number}.")]
InvalidBlockNumber { active_height: BlockNumber, block_number: BlockNumber },
#[error("Missing retrospective block hash.")]
MissingRetrospectiveBlockHash,
#[error("Attempt to start proposal with no active height.")]
Expand Down

0 comments on commit 7fc654e

Please sign in to comment.