Skip to content

Commit

Permalink
add interface and impl
Browse files Browse the repository at this point in the history
  • Loading branch information
Ubuntu committed Jul 9, 2024
1 parent 2e75b94 commit 7712368
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 25 deletions.
23 changes: 17 additions & 6 deletions encoding/kzg/prover/compute_proof.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,29 @@ import (
"math"
"time"

"github.com/Layr-Labs/eigenda/encoding/fft"
"github.com/Layr-Labs/eigenda/encoding/kzg"
"github.com/Layr-Labs/eigenda/encoding/utils/toeplitz"
"github.com/consensys/gnark-crypto/ecc"
"github.com/consensys/gnark-crypto/ecc/bn254"
"github.com/consensys/gnark-crypto/ecc/bn254/fr"
)

type CpuComputer struct {
*kzg.KzgConfig
Fs *fft.FFTSettings
FFTPointsT [][]bn254.G1Affine // transpose of FFTPoints
SFs *fft.FFTSettings
Srs *kzg.SRS
G2Trailing []bn254.G2Affine
}

type WorkerResult struct {
points []bn254.G1Affine
err error
}

func (p *ParametrizedProver) ComputeLengthProof(coeffs []fr.Element) (*bn254.G2Affine, error) {
func (p *CpuComputer) ComputeLengthProof(coeffs []fr.Element) (*bn254.G2Affine, error) {
inputLength := uint64(len(coeffs))
shiftedSecret := p.G2Trailing[p.KzgConfig.SRSNumberToLoad-inputLength:]
config := ecc.MultiExpConfig{}
Expand All @@ -29,7 +40,7 @@ func (p *ParametrizedProver) ComputeLengthProof(coeffs []fr.Element) (*bn254.G2A
return &lengthProof, nil
}

func (p *ParametrizedProver) ComputeCommitment(coeffs []fr.Element) (*bn254.G1Affine, error) {
func (p *CpuComputer) ComputeCommitment(coeffs []fr.Element) (*bn254.G1Affine, error) {
// compute commit for the full poly
config := ecc.MultiExpConfig{}
var commitment bn254.G1Affine
Expand All @@ -40,7 +51,7 @@ func (p *ParametrizedProver) ComputeCommitment(coeffs []fr.Element) (*bn254.G1Af
return &commitment, nil
}

func (p *ParametrizedProver) ComputeLengthCommitment(coeffs []fr.Element) (*bn254.G2Affine, error) {
func (p *CpuComputer) ComputeLengthCommitment(coeffs []fr.Element) (*bn254.G2Affine, error) {
config := ecc.MultiExpConfig{}

var lengthCommitment bn254.G2Affine
Expand All @@ -51,7 +62,7 @@ func (p *ParametrizedProver) ComputeLengthCommitment(coeffs []fr.Element) (*bn25
return &lengthCommitment, nil
}

func (p *ParametrizedProver) ComputeMultiFrameProof(polyFr []fr.Element, numChunks, chunkLen, numWorker uint64) ([]bn254.G1Affine, error) {
func (p *CpuComputer) ComputeMultiFrameProof(polyFr []fr.Element, numChunks, chunkLen, numWorker uint64) ([]bn254.G1Affine, error) {
begin := time.Now()
// Robert: Standardizing this to use the same math used in precomputeSRS
dimE := numChunks
Expand Down Expand Up @@ -134,7 +145,7 @@ func (p *ParametrizedProver) ComputeMultiFrameProof(polyFr []fr.Element, numChun
return proofs, nil
}

func (p *ParametrizedProver) proofWorker(
func (p *CpuComputer) proofWorker(
polyFr []fr.Element,
jobChan <-chan uint64,
l uint64,
Expand Down Expand Up @@ -167,7 +178,7 @@ func (p *ParametrizedProver) proofWorker(
// phi ^ (coset size ) = 1
//
// implicitly pad slices to power of 2
func (p *ParametrizedProver) GetSlicesCoeff(polyFr []fr.Element, dimE, j, l uint64) ([]fr.Element, error) {
func (p *CpuComputer) GetSlicesCoeff(polyFr []fr.Element, dimE, j, l uint64) ([]fr.Element, error) {
// there is a constant term
m := uint64(len(polyFr)) - 1
dim := (m - j) / l
Expand Down
14 changes: 14 additions & 0 deletions encoding/kzg/prover/encode.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package prover

import (
"github.com/consensys/gnark-crypto/ecc/bn254"
"github.com/consensys/gnark-crypto/ecc/bn254/fr"
)

type ProofComputeDevice interface {
// blobFr are coefficients
ComputeCommitment(blobFr []fr.Element) (*bn254.G1Affine, error)
ComputeMultiFrameProof(blobFr []fr.Element, numChunks, chunkLen, numWorker uint64) ([]bn254.G1Affine, error)
ComputeLengthCommitment(blobFr []fr.Element) (*bn254.G2Affine, error)
ComputeLengthProof(blobFr []fr.Element) (*bn254.G2Affine, error)
}
19 changes: 7 additions & 12 deletions encoding/kzg/prover/parametrized_prover.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"github.com/Layr-Labs/eigenda/encoding"
"github.com/hashicorp/go-multierror"

"github.com/Layr-Labs/eigenda/encoding/fft"
"github.com/Layr-Labs/eigenda/encoding/kzg"
"github.com/Layr-Labs/eigenda/encoding/rs"
"github.com/consensys/gnark-crypto/ecc/bn254"
Expand All @@ -19,13 +18,9 @@ type ParametrizedProver struct {
*rs.Encoder

*kzg.KzgConfig
Srs *kzg.SRS
G2Trailing []bn254.G2Affine
Ks *kzg.KZGSettings

Fs *fft.FFTSettings
Ks *kzg.KZGSettings
SFs *fft.FFTSettings // fft used for submatrix product helper
FFTPointsT [][]bn254.G1Affine // transpose of FFTPoints
Computer ProofComputeDevice
}

type RsEncodeResult struct {
Expand Down Expand Up @@ -94,7 +89,7 @@ func (g *ParametrizedProver) Encode(inputFr []fr.Element) (*bn254.G1Affine, *bn2
// compute commit for the full poly
go func() {
start := time.Now()
commit, err := g.ComputeCommitment(inputFr)
commit, err := g.Computer.ComputeCommitment(inputFr)
commitmentChan <- CommitmentResult{
Commitment: *commit,
Err: err,
Expand All @@ -104,7 +99,7 @@ func (g *ParametrizedProver) Encode(inputFr []fr.Element) (*bn254.G1Affine, *bn2

go func() {
start := time.Now()
lengthCommitment, err := g.ComputeLengthCommitment(inputFr)
lengthCommitment, err := g.Computer.ComputeLengthCommitment(inputFr)
lengthCommitmentChan <- LengthCommitmentResult{
LengthCommitment: *lengthCommitment,
Err: err,
Expand All @@ -114,7 +109,7 @@ func (g *ParametrizedProver) Encode(inputFr []fr.Element) (*bn254.G1Affine, *bn2

go func() {
start := time.Now()
lengthProof, err := g.ComputeLengthProof(inputFr)
lengthProof, err := g.Computer.ComputeLengthProof(inputFr)
lengthProofChan <- LengthProofResult{
LengthProof: *lengthProof,
Err: err,
Expand All @@ -135,7 +130,7 @@ func (g *ParametrizedProver) Encode(inputFr []fr.Element) (*bn254.G1Affine, *bn2
flatpaddedCoeffs = append(flatpaddedCoeffs, paddedCoeffs...)
}

proofs, err := g.ComputeMultiFrameProof(flatpaddedCoeffs, g.NumChunks, g.ChunkLength, g.NumWorker)
proofs, err := g.Computer.ComputeMultiFrameProof(flatpaddedCoeffs, g.NumChunks, g.ChunkLength, g.NumWorker)
proofChan <- ProofsResult{
Proofs: proofs,
Err: err,
Expand All @@ -162,7 +157,7 @@ func (g *ParametrizedProver) Encode(inputFr []fr.Element) (*bn254.G1Affine, *bn2
lengthCommitmentResult.Duration,
lengthProofResult.Duration,
proofsResult.Duration,
len(g.Srs.G2),
g.SRSOrder,
g.SRSOrder-uint64(len(inputFr)),
)

Expand Down
19 changes: 12 additions & 7 deletions encoding/kzg/prover/prover.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,15 +236,20 @@ func (g *Prover) newProver(params encoding.EncodingParams) (*ParametrizedProver,
t := uint8(math.Log2(float64(2 * encoder.NumChunks)))
sfs := fft.NewFFTSettings(t)

return &ParametrizedProver{
Encoder: encoder,
KzgConfig: g.KzgConfig,
Srs: g.Srs,
G2Trailing: g.G2Trailing,
computer := &CpuComputer{
Fs: fs,
Ks: ks,
SFs: sfs,
FFTPointsT: fftPointsT,
SFs: sfs,
Srs: g.Srs,
G2Trailing: g.G2Trailing,
KzgConfig: g.KzgConfig,
}

return &ParametrizedProver{
Encoder: encoder,
KzgConfig: g.KzgConfig,
Ks: ks,
Computer: computer,
}, nil
}

Expand Down

0 comments on commit 7712368

Please sign in to comment.