reth_rpc/eth/helpers/
types.rs

1//! L1 `eth` API types.
2
3use alloy_network::Ethereum;
4use reth_evm_ethereum::EthEvmConfig;
5use reth_rpc_convert::RpcConverter;
6use reth_rpc_eth_types::receipt::EthReceiptConverter;
7
8/// An [`RpcConverter`] with its generics set to Ethereum specific.
9pub type EthRpcConverter<ChainSpec> =
10    RpcConverter<Ethereum, EthEvmConfig, EthReceiptConverter<ChainSpec>>;
11
12//tests for simulate
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use alloy_consensus::{Transaction, TxType};
17    use alloy_rpc_types_eth::TransactionRequest;
18    use reth_chainspec::MAINNET;
19    use reth_rpc_eth_types::simulate::resolve_transaction;
20    use revm::database::CacheDB;
21
22    #[test]
23    fn test_resolve_transaction_empty_request() {
24        let builder = EthRpcConverter::new(EthReceiptConverter::new(MAINNET.clone()));
25        let mut db = CacheDB::<reth_revm::db::EmptyDBTyped<reth_errors::ProviderError>>::default();
26        let tx = TransactionRequest::default();
27        let result = resolve_transaction(tx, 21000, 0, 1, &mut db, &builder).unwrap();
28
29        // For an empty request, we should get a valid transaction with defaults
30        let tx = result.into_inner();
31        assert_eq!(tx.max_fee_per_gas(), 0);
32        assert_eq!(tx.max_priority_fee_per_gas(), Some(0));
33        assert_eq!(tx.gas_price(), None);
34    }
35
36    #[test]
37    fn test_resolve_transaction_legacy() {
38        let mut db = CacheDB::<reth_revm::db::EmptyDBTyped<reth_errors::ProviderError>>::default();
39        let builder = EthRpcConverter::new(EthReceiptConverter::new(MAINNET.clone()));
40
41        let tx = TransactionRequest { gas_price: Some(100), ..Default::default() };
42
43        let tx = resolve_transaction(tx, 21000, 0, 1, &mut db, &builder).unwrap();
44
45        assert_eq!(tx.tx_type(), TxType::Legacy);
46
47        let tx = tx.into_inner();
48        assert_eq!(tx.gas_price(), Some(100));
49        assert_eq!(tx.max_priority_fee_per_gas(), None);
50    }
51
52    #[test]
53    fn test_resolve_transaction_partial_eip1559() {
54        let mut db = CacheDB::<reth_revm::db::EmptyDBTyped<reth_errors::ProviderError>>::default();
55        let rpc_converter = EthRpcConverter::new(EthReceiptConverter::new(MAINNET.clone()));
56
57        let tx = TransactionRequest {
58            max_fee_per_gas: Some(200),
59            max_priority_fee_per_gas: Some(10),
60            ..Default::default()
61        };
62
63        let result = resolve_transaction(tx, 21000, 0, 1, &mut db, &rpc_converter).unwrap();
64
65        assert_eq!(result.tx_type(), TxType::Eip1559);
66        let tx = result.into_inner();
67        assert_eq!(tx.max_fee_per_gas(), 200);
68        assert_eq!(tx.max_priority_fee_per_gas(), Some(10));
69        assert_eq!(tx.gas_price(), None);
70    }
71}