diff --git a/bins/revme/src/cmd/statetest/models/mod.rs b/bins/revme/src/cmd/statetest/models/mod.rs index 8162dc6e26..a165177bf7 100644 --- a/bins/revme/src/cmd/statetest/models/mod.rs +++ b/bins/revme/src/cmd/statetest/models/mod.rs @@ -9,7 +9,7 @@ use revm::primitives::{ RecoveredAuthorization, Signature, B256, U256, }; use serde::{Deserialize, Serialize}; -use std::{collections::BTreeMap, u64}; +use std::{collections::BTreeMap, fmt}; #[derive(Debug, PartialEq, Eq, Deserialize)] pub struct TestSuite(pub BTreeMap); @@ -108,14 +108,28 @@ pub struct TransactionParts { #[serde(default)] pub access_lists: Vec>, - // Some tx may not have authorization list #[serde(default)] - pub authorization_list: Option>, + pub authorization_list: Vec, #[serde(default)] pub blob_versioned_hashes: Vec, pub max_fee_per_blob_gas: Option, } +#[derive(Debug)] +pub enum TransactionException { + Type4InvalidAuthoritySignature, +} + +impl fmt::Display for TransactionException { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + TransactionException::Type4InvalidAuthoritySignature => { + write!(f, "TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE") + } + } + } +} + #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone, Copy)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct TestAuthorization { @@ -135,7 +149,7 @@ impl TestAuthorization { Signature::from_rs_and_parity(self.r, self.s, parity).unwrap() } - pub fn into_recovered(self) -> RecoveredAuthorization { + pub fn into_recovered(self) -> Result { let authorization = Authorization { chain_id: self.chain_id, address: self.address, @@ -144,11 +158,11 @@ impl TestAuthorization { let authority = self .signature() .recover_address_from_prehash(&authorization.signature_hash()) - .ok(); - RecoveredAuthorization::new_unchecked( + .map_err(|_| TransactionException::Type4InvalidAuthoritySignature); + Ok(RecoveredAuthorization::new_unchecked( authorization.into_signed(self.signature()), - authority, - ) + authority.ok(), + )) } } diff --git a/bins/revme/src/cmd/statetest/runner.rs b/bins/revme/src/cmd/statetest/runner.rs index 4c6b25de85..0827e27569 100644 --- a/bins/revme/src/cmd/statetest/runner.rs +++ b/bins/revme/src/cmd/statetest/runner.rs @@ -373,14 +373,16 @@ pub fn execute_test_suite( .cloned() .unwrap_or_default(); - match unit.transaction.authorization_list { - Some(ref auths) => { - env.tx.authorization_list = Some(AuthorizationList::Recovered( - auths.iter().map(|auth| auth.into_recovered()).collect(), - )); - } - None => continue, + if unit.transaction.authorization_list.is_empty() { + continue; } + env.tx.authorization_list = Some(AuthorizationList::Recovered( + unit.transaction + .authorization_list + .iter() + .filter_map(|auth| auth.into_recovered().ok()) + .collect(), + )); let to = match unit.transaction.to { Some(add) => TxKind::Call(add),