Skip to content

Commit 54d2561

Browse files
authored
fix(anvil): unwrap panic in eth/backend/mem/mod.rs (#11141)
make typed request casting not panic and return useful error to user
1 parent e653dbf commit 54d2561

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

crates/anvil/src/eth/backend/mem/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,11 +1722,10 @@ impl Backend {
17221722
cache_db.commit(state);
17231723
gas_used += result.gas_used();
17241724

1725-
// TODO: this is likely incomplete
17261725
// create the transaction from a request
17271726
let from = request.from.unwrap_or_default();
1728-
let request =
1729-
transaction_request_to_typed(WithOtherFields::new(request)).unwrap();
1727+
let request = transaction_request_to_typed(WithOtherFields::new(request))
1728+
.ok_or(BlockchainError::MissingRequiredFields)?;
17301729
let tx = build_typed_transaction(
17311730
request,
17321731
Signature::new(Default::default(), Default::default(), false),

crates/anvil/src/eth/error.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ pub enum BlockchainError {
115115
/// Duration that was waited before timing out
116116
duration: Duration,
117117
},
118+
#[error("Failed to parse transaction request: missing required fields")]
119+
MissingRequiredFields,
118120
}
119121

120122
impl From<eyre::Report> for BlockchainError {
@@ -563,6 +565,9 @@ impl<T: Serialize> ToRpcResponseResult for Result<T> {
563565
err @ BlockchainError::UnknownTransactionType => {
564566
RpcError::invalid_params(err.to_string())
565567
}
568+
err @ BlockchainError::MissingRequiredFields => {
569+
RpcError::invalid_params(err.to_string())
570+
}
566571
}
567572
.into(),
568573
}

0 commit comments

Comments
 (0)