mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-14 16:37:56 -05:00
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
//go:build !mock_verifier
|
|
|
|
package verifier
|
|
|
|
/*
|
|
#cgo LDFLAGS: ${SRCDIR}/lib/libzkp.a -lm -ldl -lzktrie -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib
|
|
#cgo gpu LDFLAGS: ${SRCDIR}/lib/libzkp.a -lm -ldl -lgmp -lstdc++ -lprocps -lzktrie -L/usr/local/cuda/lib64/ -L${SRCDIR}/lib/ -lcudart -Wl,-rpath=${SRCDIR}/lib
|
|
#include <stdlib.h>
|
|
#include "./lib/libzkp.h"
|
|
*/
|
|
import "C" //nolint:typecheck
|
|
|
|
import (
|
|
"encoding/json"
|
|
"unsafe"
|
|
|
|
"github.com/scroll-tech/go-ethereum/log"
|
|
|
|
"scroll-tech/coordinator/config"
|
|
|
|
"scroll-tech/common/types/message"
|
|
)
|
|
|
|
const InvalidTestProof = "this is a invalid proof"
|
|
|
|
// Verifier represents a rust ffi to a halo2 verifier.
|
|
type Verifier struct {
|
|
cfg *config.VerifierConfig
|
|
}
|
|
|
|
// NewVerifier Sets up a rust ffi to call verify.
|
|
func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) {
|
|
if cfg.MockMode {
|
|
return &Verifier{cfg: cfg}, nil
|
|
}
|
|
paramsPathStr := C.CString(cfg.ParamsPath)
|
|
aggVkPathStr := C.CString(cfg.AggVkPath)
|
|
defer func() {
|
|
C.free(unsafe.Pointer(paramsPathStr))
|
|
C.free(unsafe.Pointer(aggVkPathStr))
|
|
}()
|
|
|
|
C.init_verifier(paramsPathStr, aggVkPathStr)
|
|
|
|
return &Verifier{cfg: cfg}, nil
|
|
}
|
|
|
|
// VerifyProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier.
|
|
func (v *Verifier) VerifyProof(proof *message.AggProof) (bool, error) {
|
|
if v.cfg.MockMode {
|
|
log.Info("Mock mode, verifier disabled")
|
|
if string(proof.Proof) == InvalidTestProof {
|
|
return false, nil
|
|
}
|
|
return true, nil
|
|
|
|
}
|
|
buf, err := json.Marshal(proof)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
aggProofStr := C.CString(string(buf))
|
|
defer func() {
|
|
C.free(unsafe.Pointer(aggProofStr))
|
|
}()
|
|
|
|
log.Info("Start to verify proof ...")
|
|
verified := C.verify_agg_proof(aggProofStr)
|
|
return verified != 0, nil
|
|
}
|