diff --git a/crates/rpc/rpc-types/src/eth/call.rs b/crates/rpc/rpc-types/src/eth/call.rs
index 507cc5271d..49b5b7613d 100644
--- a/crates/rpc/rpc-types/src/eth/call.rs
+++ b/crates/rpc/rpc-types/src/eth/call.rs
@@ -1,9 +1,9 @@
-use reth_primitives::{AccessList, Address, Bytes, U256, U64};
+use reth_primitives::{AccessList, Address, Bytes, U256, U64, U8};
use serde::{Deserialize, Serialize};
/// Call request
#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize)]
-#[serde(default, rename_all = "camelCase", deny_unknown_fields)]
+#[serde(default, rename_all = "camelCase")]
pub struct CallRequest {
/// From
pub from: Option
,
@@ -19,7 +19,10 @@ pub struct CallRequest {
pub gas: Option,
/// Value
pub value: Option,
- /// Data
+ /// Transaction data
+ ///
+ /// This accepts both `input` and `data`
+ #[serde(alias = "input")]
pub data: Option,
/// Nonce
pub nonce: Option,
@@ -27,6 +30,9 @@ pub struct CallRequest {
pub chain_id: Option,
/// AccessList
pub access_list: Option,
+ /// EIP-2718 type
+ #[serde(rename = "type")]
+ pub transaction_type: Option,
}
impl CallRequest {
@@ -37,3 +43,14 @@ impl CallRequest {
self.gas_price.or(self.max_fee_per_gas)
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn serde_call_request() {
+ let s = r#"{"accessList":[],"data":"0x0902f1ac","to":"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11","type":"0x02"}"#;
+ let _req = serde_json::from_str::(s).unwrap();
+ }
+}
diff --git a/crates/rpc/rpc-types/src/eth/transaction/request.rs b/crates/rpc/rpc-types/src/eth/transaction/request.rs
index 80c0b36c67..132deacef6 100644
--- a/crates/rpc/rpc-types/src/eth/transaction/request.rs
+++ b/crates/rpc/rpc-types/src/eth/transaction/request.rs
@@ -2,7 +2,7 @@ use crate::eth::transaction::typed::{
EIP1559TransactionRequest, EIP2930TransactionRequest, LegacyTransactionRequest,
TransactionKind, TypedTransactionRequest,
};
-use reth_primitives::{AccessList, Address, Bytes, U128, U256};
+use reth_primitives::{AccessList, Address, Bytes, U128, U256, U8};
use serde::{Deserialize, Serialize};
/// Represents _all_ transaction requests received from RPC
@@ -28,6 +28,7 @@ pub struct TransactionRequest {
/// value of th tx in wei
pub value: Option,
/// Any additional data sent
+ #[serde(alias = "input")]
pub data: Option,
/// Transaction nonce
pub nonce: Option,
@@ -36,7 +37,7 @@ pub struct TransactionRequest {
pub access_list: Option,
/// EIP-2718 type
#[serde(rename = "type")]
- pub transaction_type: Option,
+ pub transaction_type: Option,
}
// == impl TransactionRequest ==
diff --git a/crates/rpc/rpc/src/eth/api/transactions.rs b/crates/rpc/rpc/src/eth/api/transactions.rs
index c9adcd860b..0119ab201d 100644
--- a/crates/rpc/rpc/src/eth/api/transactions.rs
+++ b/crates/rpc/rpc/src/eth/api/transactions.rs
@@ -368,6 +368,7 @@ where
chain_id: Some(chain_id),
access_list: request.access_list.clone(),
max_priority_fee_per_gas: Some(U256::from(max_fee_per_gas)),
+ transaction_type: None,
},
BlockId::Number(BlockNumberOrTag::Pending),
)
diff --git a/crates/rpc/rpc/src/eth/revm_utils.rs b/crates/rpc/rpc/src/eth/revm_utils.rs
index 8d9f6cadad..fe79aba323 100644
--- a/crates/rpc/rpc/src/eth/revm_utils.rs
+++ b/crates/rpc/rpc/src/eth/revm_utils.rs
@@ -211,6 +211,7 @@ pub(crate) fn create_txn_env(block_env: &BlockEnv, request: CallRequest) -> EthR
nonce,
access_list,
chain_id,
+ ..
} = request;
let CallFees { max_priority_fee_per_gas, gas_price } = CallFees::ensure_fees(