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(