sonobe_fs/nova/instances/
mod.rs1use ark_ff::PrimeField;
5use sonobe_primitives::{
6 arithmetizations::ArithConfig, commitments::CommitmentDef, traits::Dummy,
7 transcripts::Absorbable,
8};
9
10use crate::FoldingInstance;
11
12pub mod circuits;
13
14#[derive(Clone, Debug, Eq, PartialEq)]
16pub struct RunningInstance<CM: CommitmentDef> {
17 pub cm_e: CM::Commitment,
19 pub u: CM::Scalar,
21 pub cm_w: CM::Commitment,
23 pub x: Vec<CM::Scalar>,
25}
26
27impl<CM: CommitmentDef> FoldingInstance<CM> for RunningInstance<CM> {
28 const N_COMMITMENTS: usize = 2;
29
30 fn commitments(&self) -> Vec<&CM::Commitment> {
31 vec![&self.cm_e, &self.cm_w]
32 }
33
34 fn public_inputs(&self) -> &[CM::Scalar] {
35 &self.x
36 }
37
38 fn public_inputs_mut(&mut self) -> &mut [CM::Scalar] {
39 &mut self.x
40 }
41}
42
43impl<CM: CommitmentDef> Dummy<&ArithConfig> for RunningInstance<CM> {
44 fn dummy(cfg: &ArithConfig) -> Self {
45 Self {
46 cm_e: Default::default(),
47 u: Default::default(),
48 cm_w: Default::default(),
49 x: vec![Default::default(); cfg.n_public_inputs],
50 }
51 }
52}
53
54impl<CM: CommitmentDef> Absorbable for RunningInstance<CM> {
55 fn absorb_into<F: PrimeField>(&self, dest: &mut Vec<F>) {
56 self.u.absorb_into(dest);
57 self.x.absorb_into(dest);
58 self.cm_e.absorb_into(dest);
59 self.cm_w.absorb_into(dest);
60 }
61}
62
63#[derive(Clone, Debug, Eq, PartialEq)]
65pub struct IncomingInstance<CM: CommitmentDef> {
66 pub cm_w: CM::Commitment,
68 pub x: Vec<CM::Scalar>,
70}
71
72impl<CM: CommitmentDef> FoldingInstance<CM> for IncomingInstance<CM> {
73 const N_COMMITMENTS: usize = 1;
74
75 fn commitments(&self) -> Vec<&CM::Commitment> {
76 vec![&self.cm_w]
77 }
78
79 fn public_inputs(&self) -> &[CM::Scalar] {
80 &self.x
81 }
82
83 fn public_inputs_mut(&mut self) -> &mut [CM::Scalar] {
84 &mut self.x
85 }
86}
87
88impl<CM: CommitmentDef> Dummy<&ArithConfig> for IncomingInstance<CM> {
89 fn dummy(cfg: &ArithConfig) -> Self {
90 Self {
91 cm_w: Default::default(),
92 x: vec![Default::default(); cfg.n_public_inputs],
93 }
94 }
95}
96
97impl<CM: CommitmentDef> Absorbable for IncomingInstance<CM> {
98 fn absorb_into<F: PrimeField>(&self, dest: &mut Vec<F>) {
99 self.x.absorb_into(dest);
100 self.cm_w.absorb_into(dest);
101 }
102}