#pragma once
#include <string>
#include <vector>
#include "risc0/zkp/accel/accel.h"
#include "risc0/zkp/core/fp4.h"
#include "risc0/zkp/prove/write_iop.h"
#include "risc0/zkp/verify/taps.h"
namespace risc0 {
class ProveCircuit {
public:
virtual ~ProveCircuit() {}
virtual TapSetRef getTaps() const = 0;
virtual void execute(WriteIOP& iop) = 0;
virtual void accumulate(WriteIOP& iop) = 0;
virtual void evalCheck( AccelSlice<Fp> check, AccelConstSlice<Fp> codeEval, AccelConstSlice<Fp> dataEval, AccelConstSlice<Fp> accumEval, Fp4 polyMix) const = 0;
virtual uint32_t getPo2() const = 0;
virtual const std::vector<Fp>& getCode() const = 0;
virtual const std::vector<Fp>& getData() const = 0;
virtual const std::vector<Fp>& getAccum() const = 0;
};
std::vector<uint32_t> prove(ProveCircuit& circuit);
}