ethrex_rpc/types/
account_proof.rs1use ethrex_common::{Address, H256, U256, serde_utils};
2use serde::{Serialize, Serializer, ser::SerializeSeq};
3
4#[derive(Debug, Serialize)]
5#[serde(rename_all = "camelCase")]
6pub struct AccountProof {
7 #[serde(serialize_with = "serialize_proofs")]
8 pub account_proof: Vec<Vec<u8>>,
9 pub address: Address,
10 pub balance: U256,
11 pub code_hash: H256,
12 #[serde(with = "serde_utils::u64::hex_str")]
13 pub nonce: u64,
14 pub storage_hash: H256,
15 pub storage_proof: Vec<StorageProof>,
16}
17
18#[derive(Debug, Serialize)]
19#[serde(rename_all = "camelCase")]
20pub struct StorageProof {
21 pub key: U256,
22 #[serde(serialize_with = "serialize_proofs")]
23 pub proof: Vec<Vec<u8>>,
24 pub value: U256,
25}
26
27pub fn serialize_proofs<S>(value: &Vec<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
28where
29 S: Serializer,
30{
31 let mut seq_serializer = serializer.serialize_seq(Some(value.len()))?;
32 for encoded_node in value {
33 seq_serializer.serialize_element(&format!("0x{}", hex::encode(encoded_node)))?;
34 }
35 seq_serializer.end()
36}