axiom_circuit/
types.rs

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}