Skip to content

Commit

Permalink
test: test exception
Browse files Browse the repository at this point in the history
  • Loading branch information
royvardhan committed Sep 17, 2024
1 parent 6fb844d commit 8dfee10
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 15 deletions.
30 changes: 22 additions & 8 deletions bins/revme/src/cmd/statetest/models/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, TestUnit>);
Expand Down Expand Up @@ -108,14 +108,28 @@ pub struct TransactionParts {

#[serde(default)]
pub access_lists: Vec<Option<AccessList>>,
// Some tx may not have authorization list
#[serde(default)]
pub authorization_list: Option<Vec<TestAuthorization>>,
pub authorization_list: Vec<TestAuthorization>,
#[serde(default)]
pub blob_versioned_hashes: Vec<B256>,
pub max_fee_per_blob_gas: Option<U256>,
}

#[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 {
Expand All @@ -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<RecoveredAuthorization, TransactionException> {
let authorization = Authorization {
chain_id: self.chain_id,
address: self.address,
Expand All @@ -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(),
))
}
}

Expand Down
16 changes: 9 additions & 7 deletions bins/revme/src/cmd/statetest/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down

0 comments on commit 8dfee10

Please sign in to comment.