1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
5pub struct JsonRpcRequest {
6 pub method: String,
8 pub params: Value,
10 pub id: String,
12 pub jsonrpc: String,
14}
15
16#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
17#[serde(untagged)]
18pub enum JsonResult {
19 String(String),
21 JsonRpcResult(JsonRpcResult),
23}
24
25#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
26#[serde(untagged)]
27pub enum TransactionResult {
28 String(String),
30 Transaction(Transaction),
32}
33
34
35#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
36#[serde(untagged)]
37pub enum ResultJson {
38 JsonResult(JsonResult),
40 LogsFilter(Vec<LogsFilter>)
42}
43
44
45#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
46pub struct JsonRpc {
47 #[serde(rename = "jsonrpc")]
49 pub json_rpc: String,
50 pub id: String,
52 pub result: Option<ResultJson>,
54 pub error: Option<String>,
56}
57
58#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
59pub struct JsonRpcResult {
60 #[serde(rename = "baseFeePerGas")]
62 pub base_fee_per_gas: Option<String>,
63 pub difficulty: Option<String>,
65 #[serde(rename = "extraData")]
67 pub extra_data: Option<String>,
68 #[serde(rename = "gasLimit")]
70 pub gas_limit: Option<String>,
71 #[serde(rename = "gasUsed")]
73 pub gas_used: Option<String>,
74 pub hash: Option<String>,
76 #[serde(rename = "logsBloom")]
78 pub logs_bloom: Option<String>,
79 pub miner: Option<String>,
81 #[serde(rename = "mixHash")]
83 pub mix_hash: Option<String>,
84 pub nonce: Option<String>,
86 pub number: Option<String>,
88 #[serde(rename = "parentHash")]
90 pub parent_hash: Option<String>,
91 #[serde(rename = "receiptsRoot")]
93 pub receipts_root: Option<String>,
94 #[serde(rename = "sha3Uncles")]
96 pub sha3_uncles: Option<String>,
97 pub size: Option<String>,
99 #[serde(rename = "stateRoot")]
101 pub state_root: Option<String>,
102 pub timestamp: Option<String>,
104 #[serde(rename = "totalDifficulty")]
106 pub total_difficulty: Option<String>,
107 pub transactions: Option<Vec<TransactionResult>>,
109 #[serde(rename = "transactionsRoot")]
111 pub transactions_root: Option<String>,
112 pub uncles: Option<Vec<String>>,
114 #[serde(rename = "blockHash")]
116 pub block_hash: Option<String>,
117 #[serde(rename = "blockNumber")]
119 pub block_number: Option<String>,
120 #[serde(rename = "contractAddress")]
122 pub contract_address: Option<String>,
123 #[serde(rename = "cumulativeGasUsed")]
125 pub cumulative_gas_used: Option<String>,
126 #[serde(rename = "effectiveGasPrice")]
128 pub effective_gas_price: Option<String>,
129 pub from: Option<String>,
131 pub logs: Option<Vec<TransactionReceiptLogs>>,
133 pub status: Option<String>,
135 pub to: Option<String>,
137 #[serde(rename = "transactionHash")]
139 pub transaction_hash: Option<String>,
140 #[serde(rename = "transactionIndex")]
142 pub transaction_index: Option<String>,
143 pub r#type: Option<String>,
145}
146
147#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
148pub struct Transaction {
149 #[serde(rename = "blockHash")]
151 pub block_hash: Option<String>,
152 #[serde(rename = "blockNumber")]
154 pub block_number: Option<String>,
155 pub from: Option<String>,
157 pub gas: Option<String>,
159 #[serde(rename = "gasPrice")]
161 pub gas_price: Option<String>,
162 #[serde(rename = "maxFeePerGas")]
164 pub max_fee_per_gas: Option<String>,
165 #[serde(rename = "maxPriorityFeePerGas")]
167 pub max_priority_fee_per_gas: Option<String>,
168 pub hash: Option<String>,
170 pub input: Option<String>,
172 pub nonce: Option<String>,
174 pub to: Option<String>,
176 #[serde(rename = "transactionIndex")]
178 pub transaction_index: Option<String>,
179 pub value: Option<String>,
181 pub r#type: Option<String>,
183 #[serde(rename = "accessList")]
185 pub access_list: Option<Vec<AccessList>>,
186 #[serde(rename = "chainId")]
188 pub chain_id: Option<String>,
189 pub v: Option<String>,
191 pub r: Option<String>,
193 pub s: Option<String>,
195}
196
197#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
198pub struct TransactionReceiptLogs {
199 pub address: Option<String>,
201 pub topics: Option<Vec<String>>,
203 pub data: Option<String>,
205 #[serde(rename = "blockNumber")]
207 pub block_number: Option<String>,
208 #[serde(rename = "transactionHash")]
210 pub transaction_hash: Option<String>,
211 #[serde(rename = "transactionIndex")]
213 pub transaction_index: Option<String>,
214 #[serde(rename = "blockHash")]
216 pub block_hash: Option<String>,
217 #[serde(rename = "logIndex")]
219 pub log_index: Option<String>,
220 pub removed: Option<bool>,
222}
223
224#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
225pub struct AccessList {
226 pub address: String,
228 #[serde(rename = "storageKeys")]
230 pub storage_keys: Vec<String>,
231}
232
233#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
234pub struct LogsFilter {
235 pub address: Option<String>,
237 pub topics: Option<Vec<String>>,
239 pub data: Option<String>,
241 #[serde(rename="blockNumber")]
243 pub block_number: Option<String>,
244 #[serde(rename="transactionHash")]
246 pub transaction_hash: Option<String>,
247 #[serde(rename="transactionIndex")]
249 pub transaction_index: Option<String>,
250 #[serde(rename="blockHash")]
252 pub block_hash: Option<String>,
253 #[serde(rename="logIndex")]
255 pub log_index: Option<String>,
256 pub removed: Option<bool>
258}