Skip to content

Commit

Permalink
refactor(gateway): prepare run_validate for mocking
Browse files Browse the repository at this point in the history
  • Loading branch information
yair-starkware committed Jul 7, 2024
1 parent 33cc1d3 commit a41e852
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 19 deletions.
3 changes: 2 additions & 1 deletion crates/gateway/src/gateway.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,9 @@ fn process_tx(
};

// TODO(Yael, 19/5/2024): pass the relevant deploy_account_hash.
let blockifier_validator = stateful_tx_validator.prepare_validate(state_reader_factory)?;
let tx_hash =
stateful_tx_validator.run_validate(state_reader_factory, &tx, optional_class_info, None)?;
stateful_tx_validator.run_validate(&tx, optional_class_info, None, blockifier_validator)?;

// TODO(Arni): Add the Sierra and the Casm to the mempool input.
Ok(MempoolInput {
Expand Down
33 changes: 21 additions & 12 deletions crates/gateway/src/stateful_transaction_validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,31 @@ pub struct StatefulTransactionValidator {
pub config: StatefulTransactionValidatorConfig,
}

type ConcreteBlockifierStatefulValidator =
BlockifierStatefulValidator<CachedState<Box<dyn MempoolStateReader>>>;

impl StatefulTransactionValidator {
pub fn run_validate(
&self,
state_reader_factory: &dyn StateReaderFactory,
external_tx: &RPCTransaction,
optional_class_info: Option<ClassInfo>,
deploy_account_tx_hash: Option<TransactionHash>,
mut validator: ConcreteBlockifierStatefulValidator,
) -> StatefulTransactionValidatorResult<TransactionHash> {
let account_tx = external_tx_to_account_tx(
external_tx,
optional_class_info,
&self.config.chain_info.chain_id,
)?;
let tx_hash = get_tx_hash(&account_tx);
validator.perform_validations(account_tx, deploy_account_tx_hash)?;
Ok(tx_hash)
}

pub fn prepare_validate(
&self,
state_reader_factory: &dyn StateReaderFactory,
) -> StatefulTransactionValidatorResult<ConcreteBlockifierStatefulValidator> {
// TODO(yael 6/5/2024): consider storing the block_info as part of the
// StatefulTransactionValidator and update it only once a new block is created.
let latest_block_info = get_latest_block_info(state_reader_factory)?;
Expand All @@ -52,20 +69,12 @@ impl StatefulTransactionValidator {
&versioned_constants,
);

let mut validator = BlockifierStatefulValidator::create(
state,
Ok(BlockifierStatefulValidator::create(
state.into(),
block_context,
self.config.max_nonce_for_validation_skip,
BouncerConfig::max(),
);
let account_tx = external_tx_to_account_tx(
external_tx,
optional_class_info,
&self.config.chain_info.chain_id,
)?;
let tx_hash = get_tx_hash(&account_tx);
validator.perform_validations(account_tx, deploy_account_tx_hash)?;
Ok(tx_hash)
))
}
}

Expand Down
10 changes: 4 additions & 6 deletions crates/gateway/src/stateful_transaction_validator_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,9 @@ fn test_stateful_tx_validator(
_ => None,
};

let result = stateful_validator.run_validate(
&state_reader_factory,
&external_tx,
optional_class_info,
None,
);
let validator = stateful_validator.prepare_validate(&state_reader_factory).unwrap();

let result =
stateful_validator.run_validate(&external_tx, optional_class_info, None, validator);
assert_eq!(format!("{:?}", result), format!("{:?}", expected_result));
}

0 comments on commit a41e852

Please sign in to comment.