Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
ec3d49d
feat(conglomeration): implements the context translation
AlexandreBelling Jan 16, 2025
2a8afe2
feat(runtime): hides the verifier and gnark verifier runtime under an…
AlexandreBelling Jan 16, 2025
67e6acd
feat(verifier): adds the require functionalities to the verifier runtime
AlexandreBelling Jan 16, 2025
4daaed8
feat(conglomeration): implements the pre-vortex verifier step
AlexandreBelling Jan 16, 2025
2554acf
feat(conglomeration): implements the pre-vortex prover step
AlexandreBelling Jan 17, 2025
27a2dc6
fixup
AlexandreBelling Jan 17, 2025
d6f9625
clean(vortex): remove the Dh field
AlexandreBelling Jan 17, 2025
ed3cc3a
feat(conglomeration): unifies the prover actions and verifier actions…
AlexandreBelling Jan 17, 2025
9d16c6f
feat(conglomeration): fix the vortex capture
AlexandreBelling Jan 17, 2025
b553efe
fixup(translator): make InsertCoin more helpful
AlexandreBelling Jan 17, 2025
8ecf792
feat(vortex): adds a prefix system for run.State objects
AlexandreBelling Jan 17, 2025
2da9f67
feat(conglomeration): adds the context recursion into the conglomeration
AlexandreBelling Jan 17, 2025
0412401
fix(fsHook): adds fsHook in the equalizer
AlexandreBelling Jan 18, 2025
71d3280
feat(wizard): adds ExtractProof and RunProverUntilRound
AlexandreBelling Jan 18, 2025
ed6b657
fix(typo): dh to rooth in the error message
AlexandreBelling Jan 18, 2025
e94f9cd
rename(fs): rename long method to AllKeysInProverTranscript
AlexandreBelling Jan 18, 2025
27fa36e
feat(fs): adds a possibility to explicitly ignore FS columns
AlexandreBelling Jan 18, 2025
c6a4801
fix(typo): improves the doc for IsCommitToPrecomputed
AlexandreBelling Jan 18, 2025
9e48b6a
fix(translator): fix TranslateUniEval
AlexandreBelling Jan 18, 2025
6351de1
fixup
AlexandreBelling Jan 18, 2025
696e978
feat(conglomeration): implements the main top-level function
AlexandreBelling Jan 18, 2025
68d5d62
various fixup while testing
AlexandreBelling Jan 18, 2025
d041d3a
implements a tests for pure vortex protocol
AlexandreBelling Jan 18, 2025
01b335e
feat(recursion): prefixs all the items of the self-recursion
AlexandreBelling Jan 18, 2025
819e390
fixup(test): fix appending to presized slice instead of len 0
AlexandreBelling Jan 18, 2025
3e08235
fixup(extract): check for nilness before casting to type
AlexandreBelling Jan 18, 2025
16d8e28
clean(vortex): make the vortex compiler rely on items.Name instead of…
AlexandreBelling Jan 18, 2025
0b410bb
fix(vortex): make the prefix be used when len>0 and not len==0
AlexandreBelling Jan 18, 2025
f893be9
doc(conglo): adds doc for ColumnIgnored
AlexandreBelling Jan 18, 2025
89e9854
fixup(conglo): adds the recursive compilation at the end
AlexandreBelling Jan 18, 2025
4b2f06b
fixup(conglo): assigns the ignored columns
AlexandreBelling Jan 18, 2025
167a51b
fixup(prover): safeguard check for the witness assignment
AlexandreBelling Jan 18, 2025
aec9f9f
fixup(conglo): adds a prover step to assign the vortex query
AlexandreBelling Jan 18, 2025
2c9c481
fixup(extractProof); fix the extract proof function for conglomeration
AlexandreBelling Jan 18, 2025
cf2c467
fixup(vortex): use the Merkle proof column name directly instead of r…
AlexandreBelling Jan 18, 2025
ec7cf1e
rename(srec): left, right into more explicit names
AlexandreBelling Jan 18, 2025
f77958c
fixup(conglo): remove unused method isPrefixed
AlexandreBelling Jan 18, 2025
e3746ae
feat(conglo): adds an option in vortex to pre-announce that the conte…
AlexandreBelling Jan 18, 2025
23ee220
feat(vortex): various features to fixup bugs in conglo
AlexandreBelling Jan 19, 2025
2cad230
fixup(fs): fix the implementation of isExcludedFromProverFS
AlexandreBelling Jan 19, 2025
868b156
Merge remote-tracking branch 'origin/prover/limitless-top-level' into…
AlexandreBelling Jan 19, 2025
cc58d1d
fixup(typo): not -> note
AlexandreBelling Jan 19, 2025
1838328
feat(conglo): implements the fs joint
AlexandreBelling Jan 20, 2025
a96e038
fixup: assigns the correct round for the fsProverJoinStep
AlexandreBelling Jan 20, 2025
f6309ac
cleanup: clean the fsHistory in-line with the fs.state in prover-join-fs
AlexandreBelling Jan 20, 2025
e8134fa
code(fs): remove redundant sanity-check for prover-fs
AlexandreBelling Jan 20, 2025
d6ada88
fixup(fs): declare pre-vortex-verifier-steps as a fs-hook
AlexandreBelling Jan 20, 2025
f4c9216
test(conglomeration): adds a multi-round test
AlexandreBelling Jan 20, 2025
1e59cf7
fix(lint): skip math.Rand error for the encoding
AlexandreBelling Jan 20, 2025
2c495ad
fixup(lint): preallocating slice before appending
AlexandreBelling Jan 20, 2025
25585b1
fixup(init-fs): ensure the sub-fs-initialize is run before the pre-vo…
AlexandreBelling Jan 21, 2025
9314ec7
* minor(vortex): exporting the Tree field for the precomputed
AlexandreBelling Jan 22, 2025
f4930c4
fixup
AlexandreBelling Jan 22, 2025
9a30baa
testing(conglo): complete testing using sophisticated suites as input…
AlexandreBelling Jan 24, 2025
1fbf002
fixup(printf): remove trailing printf
AlexandreBelling Jan 24, 2025
9f51da0
simplify(wizard): remove the assert consistent round sanity-check fun…
AlexandreBelling Jan 24, 2025
ac8d5f3
ci(test): skip the very heavy conglomeration test
AlexandreBelling Jan 24, 2025
a6a465e
fixup(translator): the existence check for the translated column was …
AlexandreBelling Feb 3, 2025
b04df26
testing(conglo): reduces the computation footprint
AlexandreBelling Feb 3, 2025
a2c25b5
clean(from_alleged_ys): adds a panic clause if a column is not found.
AlexandreBelling Feb 3, 2025
e38398a
Merge branch 'prover/limitless-top-level' of github.com:Consensys/lin…
AlexandreBelling Feb 3, 2025
d08ae87
Merge branch 'prover/limitless-top-level' of github.com:Consensys/lin…
AlexandreBelling Feb 4, 2025
7e97447
fixup: missed merge change
AlexandreBelling Feb 4, 2025
9b60dc5
clean(legacy): remove deprecated PublicInput column status
AlexandreBelling Feb 4, 2025
f22c034
feat(conglo): integrates the cross-consistency checking in the public…
AlexandreBelling Feb 4, 2025
0e300c2
doc(com): adds some doc to explain how the input compiledIOP should b…
AlexandreBelling Feb 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 36 additions & 4 deletions prover/crypto/vortex/opening_prover.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ type OpeningProof struct {
// functions and is motivated by the fact that this is simpler to construct in
// our settings.
func (params *Params) InitOpeningWithLC(committedSV []smartvectors.SmartVector, randomCoin field.Element) *OpeningProof {
proof := OpeningProof{}

if len(committedSV) == 0 {
utils.Panic("attempted to open an empty witness")
Expand All @@ -55,15 +54,48 @@ func (params *Params) InitOpeningWithLC(committedSV []smartvectors.SmartVector,
for i := range committedSV {
subTask = append(subTask, committedSV[i].SubVector(start, stop))
}
// Collect the result in the larger slice at the end

// Collect the result in the larger slice at the end
subResult := smartvectors.PolyEval(subTask, randomCoin)
subResult.WriteInSlice(linComb[start:stop])
})

linCombSV := smartvectors.NewRegular(linComb)
proof.LinearCombination = params.rsEncode(linCombSV, nil)
return &proof

return &OpeningProof{
LinearCombination: params.rsEncode(linCombSV, nil),
}
}

// InitOpeningFromAlreadyEncodedLC initiates the construction of a Vortex proof
// by returning the encoding of the linear combinations of the committed
// row-vectors contained in committedSV by the successive powers of randomCoin.
//
// The returned proof is partially assigned and must be completed using
// [WithEntryList] to conclude the opening protocol.
func (params *Params) InitOpeningFromAlreadyEncodedLC(rsCommittedSV EncodedMatrix, randomCoin field.Element) *OpeningProof {

if len(rsCommittedSV) == 0 {
utils.Panic("attempted to open an empty witness")
}

// Compute the linear combination
linComb := make([]field.Element, params.NumEncodedCols())

parallel.ExecuteChunky(len(linComb), func(start, stop int) {
subTask := make([]smartvectors.SmartVector, 0, len(rsCommittedSV))
for i := range rsCommittedSV {
subTask = append(subTask, rsCommittedSV[i].SubVector(start, stop))
}

// Collect the result in the larger slice at the end
subResult := smartvectors.PolyEval(subTask, randomCoin)
subResult.WriteInSlice(linComb[start:stop])
})

return &OpeningProof{
LinearCombination: smartvectors.NewRegular(linComb),
}
}

// Complete completes the proof adding the columns pointed by entryList
Expand Down
6 changes: 2 additions & 4 deletions prover/protocol/column/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ const (
// protocol. Meaning that this is not part of the proof.
//
// Deprecated: we don't really use this to create public inputs.
PublicInput
_
// VerifyingKey indicates the column is defined offline during the definition
// of the protocol or the compilation and that the column is directly
// available to the verifier. It is preferable to avoid tagging large
Expand All @@ -82,8 +82,6 @@ func (s Status) String() string {
return "PROOF"
case Precomputed:
return "PRECOMPUTED"
case PublicInput:
return "PUBLIC_INPUT"
case VerifyingKey:
return "VERIFYING_KEY"
case VerifierDefined:
Expand All @@ -95,7 +93,7 @@ func (s Status) String() string {
// IsPublic returns true if the column is visible to the verifier
func (s Status) IsPublic() bool {
switch s {
case Proof, PublicInput, VerifyingKey, VerifierDefined:
case Proof, VerifyingKey, VerifierDefined:
return true
default:
return false
Expand Down
80 changes: 38 additions & 42 deletions prover/protocol/column/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ type storedColumnInfo struct {
// FullRecursion. This field is only meaningfull for [Ignored] columns as
// they are excluded by default.
IncludeInProverFS bool
// ExcludeFromProverFS states the prover should not include the column in
// his FS transcript. This overrides [IncludeInProverFS], meaning that if
// [IncludeInProverFS] is true but ExcludeFromProverFS is true, the column
// will still be excluded from the transcript. This is used explicit FS
// compilation.
ExcludeFromProverFS bool
}

// AddToRound constructs a [Natural], registers it in the [Store] and returns
Expand Down Expand Up @@ -165,19 +171,6 @@ func (r *Store) AllKeysProof() []ifaces.ColID {
return res
}

// AllKeysPublicInput returns the list of the [PublicInput] column's ID ordered
// by rounds and then by order ot insertion.
func (r *Store) AllKeysPublicInput() []ifaces.ColID {
res := []ifaces.ColID{}

for round := 0; round < r.NumRounds(); round++ {
proof := r.AllKeysPublicInputAt(round)
res = append(res, proof...)
}

return res
}

// AllKeysCommitted returns the list of all the IDs of the all the [Committed]
// columns ordered by rounds and then by IDs.
func (r *Store) AllKeysCommitted() []ifaces.ColID {
Expand Down Expand Up @@ -227,22 +220,6 @@ func (r *Store) AllKeysProofAt(round int) []ifaces.ColID {
return res
}

// AllKeysPublicInputAt returns the list of all the prover messages in a given
// round. The resulting slice is ordered by order of insertion.
func (r *Store) AllKeysPublicInputAt(round int) []ifaces.ColID {
res := []ifaces.ColID{}
rnd := r.byRounds.MustGet(round)

for i, info := range rnd {
if info.Status != PublicInput {
continue
}
res = append(res, rnd[i].ID)
}

return res
}

// Returns the list of all the [Precomputed] columns' ID. The returned slice is
// ordered by rounds and then by order of insertion.
func (r *Store) AllPrecomputed() []ifaces.ColID {
Expand Down Expand Up @@ -442,10 +419,6 @@ func assertCorrectStatusTransition(old, new Status) {
// If it's ignored, it's ignored
case old == Ignored && new != Ignored:
forbiddenTransition = true
// You can't change the status of the public inputs because that would
// change the statement of the zkEVM.
case old == PublicInput && new != PublicInput:
forbiddenTransition = true
// It's a special status and cannot be changed.
case old == VerifierDefined && new != VerifierDefined:
forbiddenTransition = true
Expand All @@ -466,23 +439,46 @@ func (s *Store) IgnoreButKeepInProverTranscript(colName ifaces.ColID) {
in.IncludeInProverFS = true
}

// IsIgnoredAndNotKeptInTranscript indicates whether the column can be ignored
// from the transcript and is used during the Fiat-Shamir randomness generation.
func (s *Store) IsIgnoredAndNotKeptInTranscript(colName ifaces.ColID) bool {
// ExcludeFromProverFS marks a column as excluded from the FS transcript but
// without changing its status. This is used as part of the conglomeration
// where the imported columns take part in a separate FS transcript from the
// canonical of the host wizard.
func (s *Store) ExcludeFromProverFS(colName ifaces.ColID) {
in := s.info(colName)
return in.Status == Ignored && !in.IncludeInProverFS
in.ExcludeFromProverFS = true
}

// isExcludedFromProverFS returns true if the passed column ID relates to a column
// that does not take part in the FS transcript.
func (in *storedColumnInfo) isExcludedFromProverFS() bool {

if in.ExcludeFromProverFS {
return true
}

if in.IncludeInProverFS {
return false
}

return true
}

// IsExplicitlyExcludedFromProverFS returns true if the passed column ID relates to
// a column explicitly marked as excluded from the FS transcript.
func (s *Store) IsExplicitlyExcludedFromProverFS(colName ifaces.ColID) bool {
info := s.info(colName)
return info.ExcludeFromProverFS
}

// AllKeysProofsOrIgnoredButKeptInProverTranscript returns the list of the
// columns to be used as part of the FS transcript.
func (s *Store) AllKeysProofsOrIgnoredButKeptInProverTranscript(round int) []ifaces.ColID {
// AllKeysInProverTranscript returns the list of the columns to
// be used as part of the FS transcript.
func (s *Store) AllKeysInProverTranscript(round int) []ifaces.ColID {
res := []ifaces.ColID{}
rnd := s.byRounds.MustGet(round) // precomputed are always at round zero

for i, info := range rnd {

ok := (info.Status == Proof) || (info.Status == Ignored && info.IncludeInProverFS)
if !ok {
if info.isExcludedFromProverFS() {
continue
}

Expand Down
5 changes: 2 additions & 3 deletions prover/protocol/column/verifiercol/from_alleged_ys.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/consensys/linea-monorepo/prover/protocol/ifaces"
"github.com/consensys/linea-monorepo/prover/protocol/query"
"github.com/consensys/linea-monorepo/prover/protocol/wizard"
"github.com/sirupsen/logrus"
"github.com/consensys/linea-monorepo/prover/utils"
)

// compile check to enforce the struct to belong to the corresponding interface
Expand Down Expand Up @@ -39,10 +39,9 @@ func NewFromYs(comp *wizard.CompiledIOP, q query.UnivariateEval, ranges []ifaces
nameMap[polName.GetColID()] = struct{}{}
}

// No make the explicit check
for _, rangeName := range ranges {
if _, ok := nameMap[rangeName]; !ok && !strings.Contains(string(rangeName), "SHADOW") {
logrus.Debugf("NewFromYs : %v is not part of the query %v. It will be zeroized", rangeName, q.QueryID)
utils.Panic("NewFromYs : %v is not part of the query %v", rangeName, q.QueryID)
}
}

Expand Down
4 changes: 2 additions & 2 deletions prover/protocol/compiler/dummy/dummy.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func Compile(comp *wizard.CompiledIOP) {
One step to be run at the end, by verifying every constraint
"a la mano"
*/
verifier := func(run *wizard.VerifierRuntime) error {
verifier := func(run wizard.Runtime) error {

logrus.Infof("started to run the dummy verifier")

Expand Down Expand Up @@ -137,6 +137,6 @@ func Compile(comp *wizard.CompiledIOP) {
}

logrus.Debugf("NB: The gnark circuit does not check the verifier of the dummy reduction\n")
comp.InsertVerifier(numRounds-1, verifier, func(frontend.API, *wizard.WizardVerifierCircuit) {})
comp.InsertVerifier(numRounds-1, verifier, func(frontend.API, wizard.GnarkRuntime) {})

}
16 changes: 8 additions & 8 deletions prover/protocol/compiler/fullrecursion/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ func (c LocalOpeningAssignment) Run(run *wizard.ProverRuntime) {
}
}

func (c *ConsistencyCheck) Run(run *wizard.VerifierRuntime) error {
func (c *ConsistencyCheck) Run(run wizard.Runtime) error {

var (
initialFsCirc = run.GetLocalPointEvalParams(c.LocalOpenings[0].ID).Y
initialFsRt = run.FiatShamirHistory[c.FirstRound+1][0][0]
initialFsRt = run.FsHistory()[c.FirstRound+1][0][0]
piCursor = 2
)

Expand Down Expand Up @@ -131,11 +131,11 @@ func (c *ConsistencyCheck) Run(run *wizard.VerifierRuntime) error {
return nil
}

func (c *ConsistencyCheck) RunGnark(api frontend.API, run *wizard.WizardVerifierCircuit) {
func (c *ConsistencyCheck) RunGnark(api frontend.API, run wizard.GnarkRuntime) {

var (
initialFsCirc = run.GetLocalPointEvalParams(c.LocalOpenings[0].ID).Y
initialFsRt = run.FiatShamirHistory[c.FirstRound+1][0][0]
initialFsRt = run.FsHistory()[c.FirstRound+1][0][0]
piCursor = 2
)

Expand Down Expand Up @@ -187,15 +187,15 @@ func (c *ConsistencyCheck) IsSkipped() bool {
return c.isSkipped
}

func (r *ResetFsActions) Run(run *wizard.VerifierRuntime) error {
func (r *ResetFsActions) Run(run wizard.Runtime) error {
finalFsCirc := run.GetLocalPointEvalParams(r.LocalOpenings[1].ID).Y
run.FS.SetState([]field.Element{finalFsCirc})
run.Fs().SetState([]field.Element{finalFsCirc})
return nil
}

func (r *ResetFsActions) RunGnark(api frontend.API, run *wizard.WizardVerifierCircuit) {
func (r *ResetFsActions) RunGnark(api frontend.API, run wizard.GnarkRuntime) {
finalFsCirc := run.GetLocalPointEvalParams(r.LocalOpenings[1].ID).Y
run.FS.SetState([]frontend.Variable{finalFsCirc})
run.Fs().SetState([]frontend.Variable{finalFsCirc})
}

func (r *ResetFsActions) Skip() {
Expand Down
11 changes: 8 additions & 3 deletions prover/protocol/compiler/fullrecursion/circuit.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ type gnarkCircuit struct {
X frontend.Variable `gnark:",public"`
Ys []frontend.Variable `gnark:",public"`
Pubs []frontend.Variable `gnark:",public"`
WizardVerifier *wizard.WizardVerifierCircuit
WizardVerifier wizard.GnarkRuntime
comp *wizard.CompiledIOP `gnark:"-"`
ctx *fullRecursionCtx `gnark:"-"`
withoutGkr bool `gnark:"-"`
Expand Down Expand Up @@ -66,7 +66,7 @@ func allocateGnarkCircuit(comp *wizard.CompiledIOP, ctx *fullRecursionCtx) *gnar

func (c *gnarkCircuit) Define(api frontend.API) error {

w := c.WizardVerifier
w := c.WizardVerifier.(*wizard.WizardVerifierCircuit)

if c.withoutGkr {
w.FS = fiatshamir.NewGnarkFiatShamir(api, nil)
Expand Down Expand Up @@ -116,7 +116,7 @@ func (c *gnarkCircuit) generateAllRandomCoins(api frontend.API) {

var (
ctx = c.ctx
w = c.WizardVerifier
w = c.WizardVerifier.(*wizard.WizardVerifierCircuit)
)

w.FS.SetState([]frontend.Variable{c.InitialFsState})
Expand All @@ -129,6 +129,11 @@ func (c *gnarkCircuit) generateAllRandomCoins(api frontend.API) {

toUpdateFS := ctx.Columns[currRound-1]
for _, msg := range toUpdateFS {

if c.comp.Columns.IsExplicitlyExcludedFromProverFS(msg.GetColID()) {
continue
}

val := w.GetColumn(msg.GetColID())
w.FS.UpdateVec(val)
}
Expand Down
8 changes: 4 additions & 4 deletions prover/protocol/compiler/globalcs/evaluation.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ func (pa evaluationProver) Run(run *wizard.ProverRuntime) {
}

// Run evaluate the constraint and checks that
func (ctx *evaluationVerifier) Run(run *wizard.VerifierRuntime) error {
func (ctx *evaluationVerifier) Run(run wizard.Runtime) error {

var (
// Will be assigned to "X", the random point at which we check the constraint.
Expand Down Expand Up @@ -239,7 +239,7 @@ func (ctx *evaluationVerifier) Run(run *wizard.VerifierRuntime) error {
}

// Verifier step, evaluate the constraint and checks that
func (ctx *evaluationVerifier) RunGnark(api frontend.API, c *wizard.WizardVerifierCircuit) {
func (ctx *evaluationVerifier) RunGnark(api frontend.API, c wizard.GnarkRuntime) {

// Will be assigned to "X", the random point at which we check the constraint.
r := c.GetRandomCoinField(ctx.EvalCoin.Name)
Expand Down Expand Up @@ -299,7 +299,7 @@ func (ctx *evaluationVerifier) RunGnark(api frontend.API, c *wizard.WizardVerifi

// recombineQuotientSharesEvaluation returns the evaluations of the quotients
// on point r
func (ctx evaluationVerifier) recombineQuotientSharesEvaluation(run *wizard.VerifierRuntime, r field.Element) ([]field.Element, error) {
func (ctx evaluationVerifier) recombineQuotientSharesEvaluation(run wizard.Runtime, r field.Element) ([]field.Element, error) {

var (
// res stores the list of the recombined quotient evaluations for each
Expand Down Expand Up @@ -386,7 +386,7 @@ func (ctx evaluationVerifier) recombineQuotientSharesEvaluation(run *wizard.Veri

// recombineQuotientSharesEvaluation returns the evaluations of the quotients
// on point r
func (ctx evaluationVerifier) recombineQuotientSharesEvaluationGnark(api frontend.API, run *wizard.WizardVerifierCircuit, r frontend.Variable) []frontend.Variable {
func (ctx evaluationVerifier) recombineQuotientSharesEvaluationGnark(api frontend.API, run wizard.GnarkRuntime, r frontend.Variable) []frontend.Variable {

var (
// res stores the list of the recombined quotient evaluations for each
Expand Down
4 changes: 2 additions & 2 deletions prover/protocol/compiler/grandproduct/compiler.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ type FinalProductCheck struct {
}

// Run implements the [wizard.VerifierAction]
func (f *FinalProductCheck) Run(run *wizard.VerifierRuntime) error {
func (f *FinalProductCheck) Run(run wizard.Runtime) error {

// zProd stores the product of the ending values of the zs as queried
// in the protocol via the local opening queries.
Expand All @@ -122,7 +122,7 @@ func (f *FinalProductCheck) Run(run *wizard.VerifierRuntime) error {
}

// RunGnark implements the [wizard.VerifierAction]
func (f *FinalProductCheck) RunGnark(api frontend.API, run *wizard.WizardVerifierCircuit) {
func (f *FinalProductCheck) RunGnark(api frontend.API, run wizard.GnarkRuntime) {

claimedProd := run.GetGrandProductParams(f.GrandProductID).Prod
// zProd stores the product of the ending values of the z columns
Expand Down
Loading