Skip to main content

ethrex_rpc/types/
account_proof.rs

1use 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}