package types
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
type ProofWithPublicInputsRaw struct {
|
|
Proof struct {
|
|
WiresCap []string `json:"wires_cap"`
|
|
PlonkZsPartialProductsCap []string `json:"plonk_zs_partial_products_cap"`
|
|
QuotientPolysCap []string `json:"quotient_polys_cap"`
|
|
Openings struct {
|
|
Constants [][]uint64 `json:"constants"`
|
|
PlonkSigmas [][]uint64 `json:"plonk_sigmas"`
|
|
Wires [][]uint64 `json:"wires"`
|
|
PlonkZs [][]uint64 `json:"plonk_zs"`
|
|
PlonkZsNext [][]uint64 `json:"plonk_zs_next"`
|
|
PartialProducts [][]uint64 `json:"partial_products"`
|
|
QuotientPolys [][]uint64 `json:"quotient_polys"`
|
|
} `json:"openings"`
|
|
OpeningProof struct {
|
|
CommitPhaseMerkleCaps [][]string `json:"commit_phase_merkle_caps"`
|
|
QueryRoundProofs []struct {
|
|
InitialTreesProof struct {
|
|
EvalsProofs []EvalProofRaw `json:"evals_proofs"`
|
|
} `json:"initial_trees_proof"`
|
|
Steps []struct {
|
|
Evals [][]uint64 `json:"evals"`
|
|
MerkleProof struct {
|
|
Siblings []string `json:"siblings"`
|
|
} `json:"merkle_proof"`
|
|
} `json:"steps"`
|
|
} `json:"query_round_proofs"`
|
|
FinalPoly struct {
|
|
Coeffs [][]uint64 `json:"coeffs"`
|
|
} `json:"final_poly"`
|
|
PowWitness uint64 `json:"pow_witness"`
|
|
} `json:"opening_proof"`
|
|
} `json:"proof"`
|
|
PublicInputs []uint64 `json:"public_inputs"`
|
|
}
|
|
|
|
type EvalProofRaw struct {
|
|
LeafElements []uint64
|
|
MerkleProof MerkleProofRaw
|
|
}
|
|
|
|
func (e *EvalProofRaw) UnmarshalJSON(data []byte) error {
|
|
return json.Unmarshal(data, &[]interface{}{&e.LeafElements, &e.MerkleProof})
|
|
}
|
|
|
|
type MerkleProofRaw struct {
|
|
Hash []string
|
|
}
|
|
|
|
func (m *MerkleProofRaw) UnmarshalJSON(data []byte) error {
|
|
type SiblingObject struct {
|
|
Siblings []string // "siblings"
|
|
}
|
|
|
|
var siblings SiblingObject
|
|
if err := json.Unmarshal(data, &siblings); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
m.Hash = make([]string, len(siblings.Siblings))
|
|
copy(m.Hash[:], siblings.Siblings)
|
|
|
|
return nil
|
|
}
|
|
|
|
type ProofChallengesRaw struct {
|
|
PlonkBetas []uint64 `json:"plonk_betas"`
|
|
PlonkGammas []uint64 `json:"plonk_gammas"`
|
|
PlonkAlphas []uint64 `json:"plonk_alphas"`
|
|
PlonkZeta []uint64 `json:"plonk_zeta"`
|
|
FriChallenges struct {
|
|
FriAlpha []uint64 `json:"fri_alpha"`
|
|
FriBetas [][]uint64 `json:"fri_betas"`
|
|
FriPowResponse uint64 `json:"fri_pow_response"`
|
|
FriQueryIndices []uint64 `json:"fri_query_indices"`
|
|
} `json:"fri_challenges"`
|
|
}
|
|
|
|
type VerifierOnlyCircuitDataRaw struct {
|
|
ConstantsSigmasCap []string `json:"constants_sigmas_cap"`
|
|
CircuitDigest string `json:"circuit_digest"`
|
|
}
|
|
|
|
func ReadProofWithPublicInputs(path string) ProofWithPublicInputsRaw {
|
|
jsonFile, err := os.Open(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
defer jsonFile.Close()
|
|
rawBytes, _ := io.ReadAll(jsonFile)
|
|
|
|
var raw ProofWithPublicInputsRaw
|
|
err = json.Unmarshal(rawBytes, &raw)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return raw
|
|
}
|
|
|
|
func ReadVerifierOnlyCircuitData(path string) VerifierOnlyCircuitDataRaw {
|
|
jsonFile, err := os.Open(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
defer jsonFile.Close()
|
|
rawBytes, _ := io.ReadAll(jsonFile)
|
|
|
|
var raw VerifierOnlyCircuitDataRaw
|
|
err = json.Unmarshal(rawBytes, &raw)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return raw
|
|
}
|