2#include "../acir_format/acir_to_constraint_buf.hpp"
20 bool const* has_ipa_claim,
27 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
29 *total = htonl((uint32_t)
builder.get_finalized_total_circuit_size());
30 *subgroup = htonl((uint32_t)
builder.get_circuit_subgroup_size(
builder.get_finalized_total_circuit_size()));
40 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
44 UltraProver prover{ prover_instance, verification_key };
50 info(
"verified: ", *result);
60 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
64 MegaProver prover{ prover_instance, verification_key };
74 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
76 auto start = std::chrono::steady_clock::now();
80 auto end = std::chrono::steady_clock::now();
81 auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
82 vinfo(
"time to construct and accumulate all circuits: ", diff.count());
84 vinfo(
"calling ivc.prove ...");
86 end = std::chrono::steady_clock::now();
88 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
89 vinfo(
"time to construct, accumulate, prove all circuits: ", diff.count());
91 start = std::chrono::steady_clock::now();
93 end = std::chrono::steady_clock::now();
94 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
95 vinfo(
"time to serialize proof: ", diff.count());
97 start = std::chrono::steady_clock::now();
98 auto vk_and_hash = ivc->get_hiding_kernel_vk_and_hash();
100 end = std::chrono::steady_clock::now();
101 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
102 vinfo(
"time to serialize hiding kernel vk: ", diff.count());
111 auto hiding_kernel_vk = from_buffer<HidingKernelVK>(
from_buffer<std::vector<uint8_t>>(vk_buf));
115 *result = verifier.
verify(proof);
119 uint8_t
const* witness_vec,
120 uint8_t
const* vk_buf,
129 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
131 auto verification_key =
142 uint8_t
const* witness_vec,
143 uint8_t
const* vk_buf,
152 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
156 from_buffer<UltraKeccakFlavor::VerificationKey>(vk_buf));
164 uint8_t
const* witness_vec,
165 uint8_t
const* vk_buf,
174 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
178 from_buffer<UltraKeccakZKFlavor::VerificationKey>(vk_buf));
186 [[maybe_unused]] uint8_t
const* witness_vec,
187 [[maybe_unused]] uint8_t
const* vk_buf,
188 [[maybe_unused]] uint8_t** out)
190#ifdef STARKNET_GARAGA_FLAVORS
192 UltraStarknetProver prover = [&] {
197 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
199 return UltraStarknetProver(
builder);
201 auto proof = prover.construct_proof();
204 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
209 [[maybe_unused]] uint8_t
const* witness_vec,
210 [[maybe_unused]] uint8_t
const* vk_buf,
211 [[maybe_unused]] uint8_t** out)
213#ifdef STARKNET_GARAGA_FLAVORS
215 UltraStarknetZKProver prover = [&] {
220 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
222 return UltraStarknetZKProver(
builder);
224 auto proof = prover.construct_proof();
227 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
236 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
241 *result = verifier.verify_proof(proof).result;
249 auto proof = many_from_buffer<uint256_t>(
from_buffer<std::vector<uint8_t>>(proof_buf));
254 *result = verifier.verify_proof(proof).result;
262 auto proof = many_from_buffer<uint256_t>(
from_buffer<std::vector<uint8_t>>(proof_buf));
267 *result = verifier.verify_proof(proof).result;
271 [[maybe_unused]] uint8_t
const* vk_buf,
272 [[maybe_unused]]
bool* result)
274#ifdef STARKNET_GARAGA_FLAVORS
278 auto proof = from_buffer<std::vector<bb::fr>>(from_buffer<std::vector<uint8_t>>(proof_buf));
283 *result = verifier.verify_proof(proof).result;
285 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
290 [[maybe_unused]] uint8_t
const* vk_buf,
291 [[maybe_unused]]
bool* result)
293#ifdef STARKNET_GARAGA_FLAVORS
297 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
301 *result = verifier.verify_proof(proof).result;
303 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
315 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
319 vinfo(
"Constructed UltraHonk verification key");
332 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
336 vinfo(
"Constructed UltraKeccakHonk verification key");
349 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
353 vinfo(
"Constructed UltraKeccakZKHonk verification key");
358 [[maybe_unused]] uint8_t** out)
360#ifdef STARKNET_GARAGA_FLAVORS
368 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
372 vinfo(
"Constructed UltraStarknetHonk verification key");
375 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
380 [[maybe_unused]] uint8_t** out)
382#ifdef STARKNET_GARAGA_FLAVORS
390 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
394 vinfo(
"Constructed UltraStarknetZKHonk verification key");
397 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
405 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
406 auto verification_key = from_buffer<VerificationKey>(vk_buf);
414 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
423 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
432 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
438 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
441 std::vector<uint32_t> totals;
447 std::vector<uint8_t> bytecode_vec(step.bytecode.begin(), step.bytecode.end());
454 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
455 builder.finalize_circuit(
true);
456 totals.push_back(
static_cast<uint32_t
>(
builder.num_gates()));
Flavor::VerificationKey MegaVerificationKey
Verifier for Chonk IVC proofs (both native and recursive).
Output verify(const Proof &proof)
Verify a Chonk proof.
typename HidingKernelVerifier::VKAndHash VKAndHash
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key is responsible for storing the commitments to the precomputed (non-witness) poly...
Base Native verification key class.
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
Flavor::PrecomputedData get_precomputed()
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
Output verify_proof(const Proof &proof)
Perform ultra verification.
WASM_EXPORT void acir_prove_aztec_client(uint8_t const *ivc_inputs_buf, uint8_t **out_proof, uint8_t **out_vk)
WASM_EXPORT void acir_get_circuit_sizes(uint8_t const *acir_vec, bool const *has_ipa_claim, uint32_t *total, uint32_t *subgroup)
WASM_EXPORT void acir_prove_ultra_starknet_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const *proof_buf, uint8_t const *vk_buf, uint8_t **out)
WASM_EXPORT void acir_verify_ultra_keccak_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
WASM_EXPORT void acir_gates_aztec_client(uint8_t const *ivc_inputs_buf, uint8_t **out)
WASM_EXPORT void acir_prove_ultra_keccak_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
WASM_EXPORT void acir_verify_ultra_starknet_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
WASM_EXPORT void acir_write_vk_ultra_starknet_zk_honk(uint8_t const *acir_vec, uint8_t **out)
WASM_EXPORT void acir_prove_ultra_zk_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
WASM_EXPORT void acir_prove_and_verify_ultra_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, bool *result)
Construct and verify an UltraHonk proof.
WASM_EXPORT void acir_vk_as_fields_mega_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
WASM_EXPORT void acir_write_vk_ultra_keccak_zk_honk(uint8_t const *acir_vec, uint8_t **out)
WASM_EXPORT void acir_prove_ultra_starknet_zk_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
WASM_EXPORT void acir_verify_ultra_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
WASM_EXPORT void acir_verify_ultra_starknet_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
WASM_EXPORT void acir_proof_as_fields_ultra_honk(uint8_t const *proof_buf, fr::vec_out_buf out)
WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const *acir_vec, uint8_t **out)
WASM_EXPORT void acir_prove_ultra_keccak_zk_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
WASM_EXPORT void acir_prove_and_verify_mega_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, bool *result)
Construct and verify a Chonk proof.
WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const *acir_vec, uint8_t **out)
WASM_EXPORT void acir_verify_aztec_client(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
WASM_EXPORT void acir_write_vk_ultra_starknet_honk(uint8_t const *acir_vec, uint8_t **out)
WASM_EXPORT void acir_vk_as_fields_ultra_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
std::string get_honk_solidity_verifier(auto const &verification_key)
ProverInstance_< UltraKeccakFlavor > ProverInstance
UltraProver_< UltraKeccakFlavor > UltraKeccakProver
UltraProver_< UltraKeccakZKFlavor > UltraKeccakZKProver
UltraProver_< UltraZKFlavor > UltraZKProver
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
T from_buffer(B const &buffer, size_t offset=0)
std::vector< uint8_t > to_buffer(T const &value)
uint8_t * to_heap_buffer(T const &value)
uint8_t * to_msgpack_heap_buffer() const
static ChonkProof_ from_msgpack_buffer(uint8_t const *&buffer)
This is the msgpack encoding of the objects returned by the following typescript: const stepToStruct ...
static std::vector< PrivateExecutionStepRaw > parse_uncompressed(const std::vector< uint8_t > &buf)
Parsed private execution steps ready for Chonk accumulation.
std::shared_ptr< Chonk > accumulate()
Creates a Chonk instance and accumulates each circuit in the folding stack. Uses precomputed VKs when...
void parse(std::vector< PrivateExecutionStepRaw > &&steps)
Converts PrivateExecutionStepRaw entries (which contain raw bytecode/witness bytes) into structured A...
void throw_or_abort(std::string const &err)