Skip to content

Commit b8f489b

Browse files
feat(blockifier): better errors in OsResources::validate (#6159)
* feat(blockifier): deserialize GasCosts from raw + test * feat(blockifier): deserialize OsConstants from raw + test * feat(blockifier): better errors in OsResources::validate
1 parent 95a7d1f commit b8f489b

1 file changed

Lines changed: 17 additions & 15 deletions

File tree

crates/blockifier/src/blockifier_versioned_constants.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,16 @@ pub struct EventLimits {
560560
pub max_n_emitted_events: usize,
561561
}
562562

563+
#[derive(Error, Debug)]
564+
pub enum RawOsResourcesError {
565+
#[error("os_resources.execute_syscalls are missing a selector: {0:?}")]
566+
MissingSelector(SyscallSelector),
567+
#[error("os_resources.execute_tx_inner is missing transaction_type: {0:?}")]
568+
MissingTxType(TransactionType),
569+
#[error("unknown os resource {0}")]
570+
UnknownResource(String),
571+
}
572+
563573
// TODO(Dori): Remove `Deserialize` derive here.
564574
#[derive(Clone, Debug, Default, Deserialize)]
565575
// Serde trick for adding validations via a customr deserializer, without forgoing the derive.
@@ -583,24 +593,16 @@ pub struct OsResources {
583593
}
584594

585595
impl OsResources {
586-
pub fn validate<'de, D: Deserializer<'de>>(
587-
&self,
588-
) -> Result<(), <D as Deserializer<'de>>::Error> {
596+
pub fn validate(&self) -> Result<(), RawOsResourcesError> {
589597
for tx_type in TransactionType::iter() {
590598
if !self.execute_txs_inner.contains_key(&tx_type) {
591-
return Err(DeserializationError::custom(format!(
592-
"ValidationError: os_resources.execute_tx_inner is missing transaction_type: \
593-
{tx_type:?}"
594-
)));
599+
return Err(RawOsResourcesError::MissingTxType(tx_type));
595600
}
596601
}
597602

598603
for syscall_handler in SyscallSelector::iter() {
599604
if !self.execute_syscalls.contains_key(&syscall_handler) {
600-
return Err(DeserializationError::custom(format!(
601-
"ValidationError: os_resources.execute_syscalls are missing syscall handler: \
602-
{syscall_handler:?}"
603-
)));
605+
return Err(RawOsResourcesError::MissingSelector(syscall_handler));
604606
}
605607
}
606608

@@ -633,9 +635,7 @@ impl OsResources {
633635
execution_resources.flat_map(|resources| resources.builtin_instance_counter.keys());
634636
for builtin_name in builtin_names {
635637
if !(known_builtin_names.contains(builtin_name.to_str_with_suffix())) {
636-
return Err(DeserializationError::custom(format!(
637-
"ValidationError: unknown os resource {builtin_name}"
638-
)));
638+
return Err(RawOsResourcesError::UnknownResource(builtin_name.to_string()));
639639
}
640640
}
641641

@@ -768,7 +768,9 @@ impl<'de> Deserialize<'de> for OsResources {
768768
// Validations.
769769

770770
#[cfg(not(test))]
771-
os_resources.validate::<D>()?;
771+
os_resources
772+
.validate()
773+
.map_err(|error| DeserializationError::custom(format!("ValidationError: {error}")))?;
772774

773775
Ok(os_resources)
774776
}

0 commit comments

Comments
 (0)