use axiom_eth::halo2curves::bn256::G1Affine;
use ethers_core::types::{Address, Bytes, H256, U256};
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Clone, Debug, Serialize, Deserialize, Hash)]
#[serde(rename_all = "camelCase")]
pub struct AxiomV2ComputeQuery {
pub k: u8,
pub result_len: u16,
pub vkey: Vec<H256>,
pub compute_proof: Bytes,
}
#[derive(Clone, Debug)]
pub struct AxiomV2ComputeSnark {
pub kzg_accumulator: Option<(G1Affine, G1Affine)>,
pub compute_results: Vec<H256>,
pub proof_transcript: Vec<u8>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash)]
#[serde(rename_all = "camelCase")]
pub struct AxiomV2DataQuery {
pub source_chain_id: u64,
pub subqueries: Vec<Subquery>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash)]
#[serde(rename_all = "camelCase")]
pub struct SubqueryResult {
pub subquery: Subquery,
pub value: Bytes,
}
impl Default for SubqueryResult {
fn default() -> Self {
Self { subquery: Subquery::default(), value: Bytes::from([0u8; 32]) }
}
}
#[derive(Clone, Debug, Default, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "camelCase")]
pub struct Subquery {
pub subquery_type: SubqueryType,
pub encoded_subquery_data: Bytes,
}
#[derive(
Clone,
Copy,
Debug,
Default,
Serialize_repr,
Deserialize_repr,
Hash,
PartialEq,
Eq,
PartialOrd,
Ord,
)]
#[repr(u16)]
pub enum SubqueryType {
#[default]
Null = 0, Header = 1,
Account = 2,
Storage = 3,
Transaction = 4,
Receipt = 5,
SolidityNestedMapping = 6,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub enum AnySubquery {
Null,
Header(HeaderSubquery),
Account(AccountSubquery),
Storage(StorageSubquery),
Transaction(TxSubquery),
Receipt(ReceiptSubquery),
SolidityNestedMapping(SolidityNestedMappingSubquery),
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "camelCase")]
pub struct HeaderSubquery {
pub block_number: u32,
pub field_idx: u32,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "camelCase")]
pub struct AccountSubquery {
pub block_number: u32,
pub addr: Address,
pub field_idx: u32,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "camelCase")]
pub struct StorageSubquery {
pub block_number: u32,
pub addr: Address,
pub slot: U256,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "camelCase")]
pub struct TxSubquery {
pub block_number: u32,
pub tx_idx: u16,
pub field_or_calldata_idx: u32,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "camelCase")]
pub struct ReceiptSubquery {
pub block_number: u32,
pub tx_idx: u16,
pub field_or_log_idx: u32,
pub topic_or_data_or_address_idx: u32,
pub event_schema: H256,
}
#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "camelCase")]
pub struct SolidityNestedMappingSubquery {
pub block_number: u32,
pub addr: Address,
pub mapping_slot: U256,
pub mapping_depth: u8,
pub keys: Vec<H256>,
}