openvm_recursion_circuit/gkr/
bus.rs

1use openvm_recursion_circuit_derive::AlignedBorrow;
2use openvm_stark_sdk::config::baby_bear_poseidon2::D_EF;
3
4use crate::define_typed_per_proof_permutation_bus;
5
6#[repr(C)]
7#[derive(AlignedBorrow, Debug, Clone)]
8pub struct GkrXiSamplerMessage<T> {
9    pub idx: T,
10    pub tidx: T,
11}
12
13define_typed_per_proof_permutation_bus!(GkrXiSamplerBus, GkrXiSamplerMessage);
14
15/// Message sent from GkrInputAir to GkrLayerAir
16#[repr(C)]
17#[derive(AlignedBorrow, Debug, Clone)]
18pub struct GkrLayerInputMessage<T> {
19    pub tidx: T,
20    pub q0_claim: [T; D_EF],
21}
22
23define_typed_per_proof_permutation_bus!(GkrLayerInputBus, GkrLayerInputMessage);
24
25/// Message sent from GkrInputAir to GkrLayerAir
26#[repr(C)]
27#[derive(AlignedBorrow, Debug, Clone)]
28pub struct GkrLayerOutputMessage<T> {
29    pub tidx: T,
30    pub layer_idx_end: T,
31    pub input_layer_claim: [[T; D_EF]; 2],
32}
33
34define_typed_per_proof_permutation_bus!(GkrLayerOutputBus, GkrLayerOutputMessage);
35
36/// Message sent from GkrLayerAir to GkrLayerSumcheckAir
37#[repr(C)]
38#[derive(AlignedBorrow, Debug, Clone)]
39pub struct GkrSumcheckInputMessage<T> {
40    /// GKR layer index
41    pub layer_idx: T,
42    pub is_last_layer: T,
43    /// Transcript index for sumcheck
44    pub tidx: T,
45    /// Combined claim to verify
46    pub claim: [T; D_EF],
47}
48
49define_typed_per_proof_permutation_bus!(GkrSumcheckInputBus, GkrSumcheckInputMessage);
50
51/// Message sent from GkrLayerSumcheckAir to GkrLayerAir
52#[repr(C)]
53#[derive(AlignedBorrow, Debug, Clone)]
54pub struct GkrSumcheckOutputMessage<T> {
55    /// GKR layer index
56    pub layer_idx: T,
57    /// Transcript index after sumcheck
58    pub tidx: T,
59    /// New claim after sumcheck
60    pub claim_out: [T; D_EF],
61    /// Equality polynomial evaluation at r'
62    pub eq_at_r_prime: [T; D_EF],
63}
64
65define_typed_per_proof_permutation_bus!(GkrSumcheckOutputBus, GkrSumcheckOutputMessage);
66
67/// Message for passing challenges between consecutive sumcheck sub-rounds
68#[repr(C)]
69#[derive(AlignedBorrow, Debug, Clone)]
70pub struct GkrSumcheckChallengeMessage<T> {
71    /// GKR layer index
72    pub layer_idx: T,
73    /// Sumcheck round number
74    pub sumcheck_round: T,
75    /// The challenge value
76    pub challenge: [T; D_EF],
77}
78
79define_typed_per_proof_permutation_bus!(GkrSumcheckChallengeBus, GkrSumcheckChallengeMessage);