mirror of
https://github.com/arnaucube/gnark-plonky2-verifier.git
synced 2026-01-12 09:01:32 +01:00
add observer for FriConfig & FriParams in verifier circuit, to match the updated version of plonky2 at PR#1678 (https://github.com/0xPolygonZero/plonky2/pull/1678)
This commit is contained in:
@@ -86,6 +86,29 @@ func (c *Chip) ObserveOpenings(openings fri.Openings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Chip) ObserveFriConfig(
|
||||||
|
config types.FriConfig,
|
||||||
|
) {
|
||||||
|
c.ObserveElement(gl.NewVariable(config.RateBits))
|
||||||
|
c.ObserveElement(gl.NewVariable(config.CapHeight))
|
||||||
|
c.ObserveElement(gl.NewVariable(config.ProofOfWorkBits))
|
||||||
|
for i := 0; i < len(config.ReductionStrategy); i++ {
|
||||||
|
c.ObserveElement(gl.NewVariable(config.ReductionStrategy[i]))
|
||||||
|
}
|
||||||
|
c.ObserveElement(gl.NewVariable(config.NumQueryRounds))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Chip) ObserveFriParams(
|
||||||
|
params types.FriParams,
|
||||||
|
) {
|
||||||
|
c.ObserveFriConfig(params.Config)
|
||||||
|
c.ObserveElement(gl.NewVariable(0)) // Hiding, should be always false as hiding is not supported in gnark-plonky2-verifier
|
||||||
|
c.ObserveElement(gl.NewVariable(params.DegreeBits))
|
||||||
|
for i := 0; i < len(params.ReductionArityBits); i++ {
|
||||||
|
c.ObserveElement(gl.NewVariable(params.ReductionArityBits[i]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Chip) GetChallenge() gl.Variable {
|
func (c *Chip) GetChallenge() gl.Variable {
|
||||||
if len(c.inputBuffer) != 0 || len(c.outputBuffer) == 0 {
|
if len(c.inputBuffer) != 0 || len(c.outputBuffer) == 0 {
|
||||||
c.duplexing()
|
c.duplexing()
|
||||||
|
|||||||
@@ -86,6 +86,13 @@ func ReadCommonCircuitData(path string) CommonCircuitData {
|
|||||||
commonCircuitData.Config.FriConfig.RateBits = raw.Config.FriConfig.RateBits
|
commonCircuitData.Config.FriConfig.RateBits = raw.Config.FriConfig.RateBits
|
||||||
commonCircuitData.Config.FriConfig.CapHeight = raw.Config.FriConfig.CapHeight
|
commonCircuitData.Config.FriConfig.CapHeight = raw.Config.FriConfig.CapHeight
|
||||||
commonCircuitData.Config.FriConfig.ProofOfWorkBits = raw.Config.FriConfig.ProofOfWorkBits
|
commonCircuitData.Config.FriConfig.ProofOfWorkBits = raw.Config.FriConfig.ProofOfWorkBits
|
||||||
|
// since the only reduction_strategy supported in gnark-plonky2-verifier is
|
||||||
|
// ConstantArityBits, set the first element of the array to 1 (following
|
||||||
|
// https://github.com/0xPolygonZero/plonky2/blob/main/plonky2/src/fri/reduction_strategies.rs#L70).
|
||||||
|
// Ideally this first value set to 1 would already be set by plonky2 serialization of the
|
||||||
|
// CommonCircuitData, but the serializer available in plonky2's implementation does not
|
||||||
|
// include this first value
|
||||||
|
commonCircuitData.Config.FriConfig.ReductionStrategy = append([]uint64{1}, raw.Config.FriConfig.ReductionStrategy.ConstantArityBits...)
|
||||||
commonCircuitData.Config.FriConfig.NumQueryRounds = raw.Config.FriConfig.NumQueryRounds
|
commonCircuitData.Config.FriConfig.NumQueryRounds = raw.Config.FriConfig.NumQueryRounds
|
||||||
|
|
||||||
commonCircuitData.FriParams.DegreeBits = raw.FriParams.DegreeBits
|
commonCircuitData.FriParams.DegreeBits = raw.FriParams.DegreeBits
|
||||||
@@ -93,6 +100,9 @@ func ReadCommonCircuitData(path string) CommonCircuitData {
|
|||||||
commonCircuitData.FriParams.Config.RateBits = raw.FriParams.Config.RateBits
|
commonCircuitData.FriParams.Config.RateBits = raw.FriParams.Config.RateBits
|
||||||
commonCircuitData.FriParams.Config.CapHeight = raw.FriParams.Config.CapHeight
|
commonCircuitData.FriParams.Config.CapHeight = raw.FriParams.Config.CapHeight
|
||||||
commonCircuitData.FriParams.Config.ProofOfWorkBits = raw.FriParams.Config.ProofOfWorkBits
|
commonCircuitData.FriParams.Config.ProofOfWorkBits = raw.FriParams.Config.ProofOfWorkBits
|
||||||
|
// set FriParams.ReductionStrategy[0]=1, for the same reason as in
|
||||||
|
// FriConfig.ReductionStrategy few lines above
|
||||||
|
commonCircuitData.FriParams.Config.ReductionStrategy = append([]uint64{1}, raw.FriParams.Config.ReductionStrategy.ConstantArityBits...)
|
||||||
commonCircuitData.FriParams.Config.NumQueryRounds = raw.FriParams.Config.NumQueryRounds
|
commonCircuitData.FriParams.Config.NumQueryRounds = raw.FriParams.Config.NumQueryRounds
|
||||||
commonCircuitData.FriParams.ReductionArityBits = raw.FriParams.ReductionArityBits
|
commonCircuitData.FriParams.ReductionArityBits = raw.FriParams.ReductionArityBits
|
||||||
|
|
||||||
|
|||||||
@@ -5,13 +5,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type FriConfig struct {
|
type FriConfig struct {
|
||||||
RateBits uint64
|
RateBits uint64
|
||||||
CapHeight uint64
|
CapHeight uint64
|
||||||
ProofOfWorkBits uint64
|
ProofOfWorkBits uint64
|
||||||
NumQueryRounds uint64
|
ReductionStrategy []uint64 // only ConstantArityBits is supported
|
||||||
// Note that we do not need `reduction_strategy` of type FriReductionStrategy as the plonky2 FriConfig has.
|
NumQueryRounds uint64
|
||||||
// reduction_strategy is only used for computing `reduction_arity_bits`, which is serialized in the
|
|
||||||
// CommonCircuitData.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fc *FriConfig) Rate() float64 {
|
func (fc *FriConfig) Rate() float64 {
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ func (c *VerifierChip) GetChallenges(
|
|||||||
|
|
||||||
var circuitDigest = verifierData.CircuitDigest
|
var circuitDigest = verifierData.CircuitDigest
|
||||||
|
|
||||||
|
challenger.ObserveFriParams(c.commonData.FriParams)
|
||||||
challenger.ObserveBN254Hash(circuitDigest)
|
challenger.ObserveBN254Hash(circuitDigest)
|
||||||
challenger.ObserveHash(publicInputsHash)
|
challenger.ObserveHash(publicInputsHash)
|
||||||
challenger.ObserveCap(proof.WiresCap)
|
challenger.ObserveCap(proof.WiresCap)
|
||||||
|
|||||||
Reference in New Issue
Block a user