1use axiom_eth::halo2curves::bn256::G1Affine;
2use ethers_core::types::{Address, Bytes, H256, U256};
3use serde::{Deserialize, Serialize};
4use serde_repr::{Deserialize_repr, Serialize_repr};
5
6#[derive(Clone, Debug, Serialize, Deserialize, Hash)]
7#[serde(rename_all = "camelCase")]
8pub struct AxiomV2ComputeQuery {
9 pub k: u8,
10 pub result_len: u16,
11 pub vkey: Vec<H256>,
14 pub compute_proof: Bytes,
16}
17
18#[derive(Clone, Debug)]
19pub struct AxiomV2ComputeSnark {
20 pub kzg_accumulator: Option<(G1Affine, G1Affine)>,
22 pub compute_results: Vec<H256>,
23 pub proof_transcript: Vec<u8>,
24}
25
26#[derive(Clone, Debug, Serialize, Deserialize, Hash)]
27#[serde(rename_all = "camelCase")]
28pub struct AxiomV2DataQuery {
29 pub source_chain_id: u64,
30 pub subqueries: Vec<Subquery>,
31}
32
33#[derive(Clone, Debug, Serialize, Deserialize, Hash)]
34#[serde(rename_all = "camelCase")]
35pub struct SubqueryResult {
36 pub subquery: Subquery,
37 pub value: Bytes,
39}
40
41impl Default for SubqueryResult {
42 fn default() -> Self {
43 Self { subquery: Subquery::default(), value: Bytes::from([0u8; 32]) }
44 }
45}
46
47#[derive(Clone, Debug, Default, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
48#[serde(rename_all = "camelCase")]
49pub struct Subquery {
50 pub subquery_type: SubqueryType,
52 pub encoded_subquery_data: Bytes,
54}
55
56#[derive(
57 Clone,
58 Copy,
59 Debug,
60 Default,
61 Serialize_repr,
62 Deserialize_repr,
63 Hash,
64 PartialEq,
65 Eq,
66 PartialOrd,
67 Ord,
68)]
69#[repr(u16)]
70pub enum SubqueryType {
71 #[default]
72 Null = 0, Header = 1,
74 Account = 2,
75 Storage = 3,
76 Transaction = 4,
77 Receipt = 5,
78 SolidityNestedMapping = 6,
79 }
81
82#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
83pub enum AnySubquery {
84 Null,
85 Header(HeaderSubquery),
86 Account(AccountSubquery),
87 Storage(StorageSubquery),
88 Transaction(TxSubquery),
89 Receipt(ReceiptSubquery),
90 SolidityNestedMapping(SolidityNestedMappingSubquery),
91}
92
93#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
94#[serde(rename_all = "camelCase")]
95pub struct HeaderSubquery {
96 pub block_number: u32,
97 pub field_idx: u32,
98}
99
100#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
101#[serde(rename_all = "camelCase")]
102pub struct AccountSubquery {
103 pub block_number: u32,
104 pub addr: Address,
105 pub field_idx: u32,
106}
107
108#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
109#[serde(rename_all = "camelCase")]
110pub struct StorageSubquery {
111 pub block_number: u32,
112 pub addr: Address,
113 pub slot: U256,
114}
115
116#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
117#[serde(rename_all = "camelCase")]
118pub struct TxSubquery {
119 pub block_number: u32,
121 pub tx_idx: u16,
123 pub field_or_calldata_idx: u32,
125}
126
127#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
128#[serde(rename_all = "camelCase")]
129pub struct ReceiptSubquery {
130 pub block_number: u32,
132 pub tx_idx: u16,
134 pub field_or_log_idx: u32,
136 pub topic_or_data_or_address_idx: u32,
137 pub event_schema: H256,
138}
139
140#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
141#[serde(rename_all = "camelCase")]
142pub struct SolidityNestedMappingSubquery {
143 pub block_number: u32,
144 pub addr: Address,
145 pub mapping_slot: U256,
146 pub mapping_depth: u8,
148 pub keys: Vec<H256>,
149}