1use axiom_codec::types::native::AxiomV2ComputeQuery;
2use axiom_query::axiom_eth::{
3 halo2_base::gates::circuit::{BaseCircuitParams, BaseConfig},
4 rlc::{
5 circuit::{RlcCircuitParams, RlcConfig},
6 virtual_region::RlcThreadBreakPoints,
7 },
8 snark_verifier_sdk::Snark,
9 utils::keccak::decorator::{RlcKeccakCircuitParams, RlcKeccakConfig},
10 Field,
11};
12use ethers::types::H256;
13use serde::{Deserialize, Serialize};
14
15use crate::subquery::types::Subquery;
16
17#[derive(Clone, Debug)]
18pub enum AxiomCircuitConfig<F: Field> {
19 Base(BaseConfig<F>),
20 Rlc(RlcConfig<F>),
21 Keccak(RlcKeccakConfig<F>),
22}
23
24#[derive(Clone, Debug, Serialize, Deserialize)]
25pub enum AxiomCircuitParams {
26 Base(BaseCircuitParams),
27 Rlc(RlcCircuitParams),
28 Keccak(RlcKeccakCircuitParams),
29}
30
31impl Default for AxiomCircuitParams {
32 fn default() -> Self {
33 Self::Base(BaseCircuitParams::default())
34 }
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct AxiomCircuitPinning {
39 pub params: AxiomCircuitParams,
40 pub break_points: RlcThreadBreakPoints,
41}
42
43#[derive(Debug, Serialize, Clone, Default)]
44#[serde(rename_all = "camelCase")]
45pub struct AxiomV2DataAndResults {
46 pub(crate) data_query: Vec<Subquery>,
47 pub(crate) compute_results: Vec<H256>,
48}
49
50#[derive(Debug, Serialize, Clone)]
51#[serde(rename_all = "camelCase")]
52pub struct AxiomV2CircuitOutput {
53 pub compute_query: AxiomV2ComputeQuery,
54 #[serde(flatten)]
55 pub data: AxiomV2DataAndResults,
56 #[serde(skip_serializing)]
57 pub snark: Snark,
58}
59
60impl From<AxiomCircuitParams> for RlcKeccakCircuitParams {
61 fn from(value: AxiomCircuitParams) -> Self {
62 match value {
63 AxiomCircuitParams::Base(params) => RlcKeccakCircuitParams {
64 keccak_rows_per_round: 0,
65 rlc: RlcCircuitParams {
66 base: params,
67 num_rlc_columns: 0,
68 },
69 },
70 AxiomCircuitParams::Rlc(params) => RlcKeccakCircuitParams {
71 keccak_rows_per_round: 0,
72 rlc: params,
73 },
74 AxiomCircuitParams::Keccak(params) => params,
75 }
76 }
77}