axiom_codec/utils/
reader.rs

1use std::io::{Error, ErrorKind, Read, Result};
2
3use axiom_eth::halo2curves::CurveAffine;
4use ethers_core::types::{Address, H256, U256};
5
6use crate::Field;
7
8pub fn read_address(reader: &mut impl Read) -> Result<Address> {
9    let mut addr = [0u8; 20];
10    reader.read_exact(&mut addr)?;
11    Ok(Address::from_slice(&addr))
12}
13
14pub fn read_u256(reader: &mut impl Read) -> Result<U256> {
15    let mut word = [0u8; 32];
16    reader.read_exact(&mut word)?;
17    Ok(U256::from_big_endian(&word))
18}
19
20pub fn read_h256(reader: &mut impl Read) -> Result<H256> {
21    let mut hash = [0u8; 32];
22    reader.read_exact(&mut hash)?;
23    Ok(H256(hash))
24}
25
26pub fn read_field_le<F: Field>(reader: &mut impl Read) -> Result<F> {
27    let mut repr = [0u8; 32];
28    reader.read_exact(&mut repr)?;
29    Ok(F::from_bytes_le(&repr))
30}
31
32pub fn read_field_be<F: Field>(reader: &mut impl Read) -> Result<F> {
33    let mut repr = [0u8; 32];
34    reader.read_exact(&mut repr)?;
35    repr.reverse();
36    Ok(F::from_bytes_le(&repr))
37}
38
39pub fn read_curve_compressed<C: CurveAffine>(reader: &mut impl Read) -> Result<C> {
40    let mut compressed = C::Repr::default();
41    reader.read_exact(compressed.as_mut())?;
42    Option::from(C::from_bytes(&compressed))
43        .ok_or_else(|| Error::new(ErrorKind::Other, "Invalid compressed point encoding"))
44}