2#include "../acir_format/acir_to_constraint_buf.hpp"
20 bool const* has_ipa_claim,
28 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
30 *total = htonl((uint32_t)
builder.get_finalized_total_circuit_size());
31 *subgroup = htonl((uint32_t)
builder.get_circuit_subgroup_size(
builder.get_finalized_total_circuit_size()));
41 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
45 UltraProver prover{ prover_instance, verification_key };
51 info(
"verified: ", *result);
61 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
65 MegaProver prover{ prover_instance, verification_key };
75 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
77 auto start = std::chrono::steady_clock::now();
81 auto end = std::chrono::steady_clock::now();
82 auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
83 vinfo(
"time to construct and accumulate all circuits: ", diff.count());
85 vinfo(
"calling ivc.prove ...");
87 end = std::chrono::steady_clock::now();
89 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
90 vinfo(
"time to construct, accumulate, prove all circuits: ", diff.count());
92 start = std::chrono::steady_clock::now();
94 end = std::chrono::steady_clock::now();
95 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
96 vinfo(
"time to serialize proof: ", diff.count());
98 start = std::chrono::steady_clock::now();
99 auto vk_and_hash = ivc->get_hiding_kernel_vk_and_hash();
101 end = std::chrono::steady_clock::now();
102 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
103 vinfo(
"time to serialize hiding kernel vk: ", diff.count());
112 auto hiding_kernel_vk = from_buffer<HidingKernelVK>(
from_buffer<std::vector<uint8_t>>(vk_buf));
116 *result = verifier.
verify(proof);
120 uint8_t
const* witness_vec,
121 uint8_t
const* vk_buf,
130 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
132 auto verification_key =
143 uint8_t
const* witness_vec,
144 uint8_t
const* vk_buf,
153 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
157 from_buffer<UltraKeccakFlavor::VerificationKey>(vk_buf));
165 uint8_t
const* witness_vec,
166 uint8_t
const* vk_buf,
175 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
179 from_buffer<UltraKeccakZKFlavor::VerificationKey>(vk_buf));
187 [[maybe_unused]] uint8_t
const* witness_vec,
188 [[maybe_unused]] uint8_t
const* vk_buf,
189 [[maybe_unused]] uint8_t** out)
191#ifdef STARKNET_GARAGA_FLAVORS
193 UltraStarknetProver prover = [&] {
198 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
200 return UltraStarknetProver(
builder);
202 auto proof = prover.construct_proof();
205 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
210 [[maybe_unused]] uint8_t
const* witness_vec,
211 [[maybe_unused]] uint8_t
const* vk_buf,
212 [[maybe_unused]] uint8_t** out)
214#ifdef STARKNET_GARAGA_FLAVORS
216 UltraStarknetZKProver prover = [&] {
221 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
223 return UltraStarknetZKProver(
builder);
225 auto proof = prover.construct_proof();
228 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
237 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
242 *result = verifier.verify_proof(proof).result;
250 auto proof = many_from_buffer<uint256_t>(
from_buffer<std::vector<uint8_t>>(proof_buf));
255 *result = verifier.verify_proof(proof).result;
263 auto proof = many_from_buffer<uint256_t>(
from_buffer<std::vector<uint8_t>>(proof_buf));
268 *result = verifier.verify_proof(proof).result;
272 [[maybe_unused]] uint8_t
const* vk_buf,
273 [[maybe_unused]]
bool* result)
275#ifdef STARKNET_GARAGA_FLAVORS
279 auto proof = from_buffer<std::vector<bb::fr>>(from_buffer<std::vector<uint8_t>>(proof_buf));
284 *result = verifier.verify_proof(proof).result;
286 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
291 [[maybe_unused]] uint8_t
const* vk_buf,
292 [[maybe_unused]]
bool* result)
294#ifdef STARKNET_GARAGA_FLAVORS
298 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
302 *result = verifier.verify_proof(proof).result;
304 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
317 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
321 vinfo(
"Constructed UltraHonk verification key");
335 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
339 vinfo(
"Constructed UltraKeccakHonk verification key");
353 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
357 vinfo(
"Constructed UltraKeccakZKHonk verification key");
362 [[maybe_unused]] uint8_t** out)
364#ifdef STARKNET_GARAGA_FLAVORS
373 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
377 vinfo(
"Constructed UltraStarknetHonk verification key");
380 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
385 [[maybe_unused]] uint8_t** out)
387#ifdef STARKNET_GARAGA_FLAVORS
396 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
400 vinfo(
"Constructed UltraStarknetZKHonk verification key");
403 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
411 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
412 auto verification_key = from_buffer<VerificationKey>(vk_buf);
420 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
429 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
438 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
444 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
447 std::vector<uint32_t> totals;
453 std::vector<uint8_t> bytecode_vec(step.bytecode.begin(), step.bytecode.end());
460 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
461 builder.finalize_circuit(
true);
462 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)