8#include "../acir_format/acir_to_constraint_buf.hpp"
25 bool const* has_ipa_claim,
32 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
34 *total = htonl((uint32_t)
builder.get_finalized_total_circuit_size());
35 *subgroup = htonl((uint32_t)
builder.get_circuit_subgroup_size(
builder.get_finalized_total_circuit_size()));
45 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
49 UltraProver prover{ prover_instance, verification_key };
54 *result = verifier.template verify_proof<DefaultIO>(proof).result;
55 info(
"verified: ", *result);
65 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
69 MegaProver prover{ prover_instance, verification_key };
74 *result = verifier.template verify_proof<DefaultIO>(proof).result;
79 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
81 auto start = std::chrono::steady_clock::now();
85 auto end = std::chrono::steady_clock::now();
86 auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
87 vinfo(
"time to construct and accumulate all circuits: ", diff.count());
89 vinfo(
"calling ivc.prove ...");
91 end = std::chrono::steady_clock::now();
93 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
94 vinfo(
"time to construct, accumulate, prove all circuits: ", diff.count());
96 start = std::chrono::steady_clock::now();
98 end = std::chrono::steady_clock::now();
99 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
100 vinfo(
"time to serialize proof: ", diff.count());
102 start = std::chrono::steady_clock::now();
104 end = std::chrono::steady_clock::now();
105 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
106 vinfo(
"time to serialize vk: ", diff.count());
112 const auto vk = from_buffer<Chonk::VerificationKey>(
from_buffer<std::vector<uint8_t>>(vk_buf));
118 uint8_t
const* witness_vec,
119 uint8_t
const* vk_buf,
128 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
130 auto verification_key =
141 uint8_t
const* witness_vec,
142 uint8_t
const* vk_buf,
151 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
155 from_buffer<UltraKeccakFlavor::VerificationKey>(vk_buf));
163 uint8_t
const* witness_vec,
164 uint8_t
const* vk_buf,
173 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
177 from_buffer<UltraKeccakZKFlavor::VerificationKey>(vk_buf));
185 [[maybe_unused]] uint8_t
const* witness_vec,
186 [[maybe_unused]] uint8_t
const* vk_buf,
187 [[maybe_unused]] uint8_t** out)
189#ifdef STARKNET_GARAGA_FLAVORS
191 UltraStarknetProver prover = [&] {
196 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
198 return UltraStarknetProver(
builder);
200 auto proof = prover.construct_proof();
203 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
208 [[maybe_unused]] uint8_t
const* witness_vec,
209 [[maybe_unused]] uint8_t
const* vk_buf,
210 [[maybe_unused]] uint8_t** out)
212#ifdef STARKNET_GARAGA_FLAVORS
214 UltraStarknetZKProver prover = [&] {
219 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
221 return UltraStarknetZKProver(
builder);
223 auto proof = prover.construct_proof();
226 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
235 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
238 Verifier verifier{ verification_key };
240 *result = verifier.template verify_proof<DefaultIO>(proof).result;
248 auto proof = many_from_buffer<uint256_t>(
from_buffer<std::vector<uint8_t>>(proof_buf));
251 Verifier verifier{ verification_key };
253 *result = verifier.template verify_proof<DefaultIO>(proof).result;
261 auto proof = many_from_buffer<uint256_t>(
from_buffer<std::vector<uint8_t>>(proof_buf));
264 Verifier verifier{ verification_key };
266 *result = verifier.template verify_proof<DefaultIO>(proof).result;
270 [[maybe_unused]] uint8_t
const* vk_buf,
271 [[maybe_unused]]
bool* result)
273#ifdef STARKNET_GARAGA_FLAVORS
277 auto proof = from_buffer<std::vector<bb::fr>>(from_buffer<std::vector<uint8_t>>(proof_buf));
280 Verifier verifier{ verification_key };
282 *result = verifier.template verify_proof<DefaultIO>(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));
300 Verifier verifier{ verification_key };
302 *result = verifier.template verify_proof<DefaultIO>(proof).result;
304 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
316 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
320 vinfo(
"Constructed UltraHonk verification key");
333 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
337 vinfo(
"Constructed UltraKeccakHonk verification key");
350 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
354 vinfo(
"Constructed UltraKeccakZKHonk verification key");
359 [[maybe_unused]] uint8_t** out)
361#ifdef STARKNET_GARAGA_FLAVORS
369 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
373 vinfo(
"Constructed UltraStarknetHonk verification key");
376 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
381 [[maybe_unused]] uint8_t** out)
383#ifdef STARKNET_GARAGA_FLAVORS
391 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
395 vinfo(
"Constructed UltraStarknetZKHonk verification key");
398 throw_or_abort(
"bb wasm was not compiled with starknet garaga flavors!");
406 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
407 auto verification_key = from_buffer<VerificationKey>(vk_buf);
415 auto proof = many_from_buffer<bb::fr>(
from_buffer<std::vector<uint8_t>>(proof_buf));
424 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
433 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
439 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
442 std::vector<uint32_t> totals;
448 std::vector<uint8_t> bytecode_vec(step.bytecode.begin(), step.bytecode.end());
455 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
456 builder.finalize_circuit(
true);
457 totals.push_back(
static_cast<uint32_t
>(
builder.num_gates()));
static bool verify(const Proof &proof, const VerificationKey &vk)
The verification key is responsible for storing the commitments to the precomputed (non-witness) poly...
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
Flavor::PrecomputedData get_precomputed()
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
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)
UltraKeccakFlavor::VerificationKey VerificationKey
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)
A full proof for the IVC scheme containing a Mega proof showing correctness of the Hiding kernel (whi...
static Proof from_msgpack_buffer(uint8_t const *&buffer)
uint8_t * to_msgpack_heap_buffer() const
Very quirky method to convert a msgpack buffer to a "heap" 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)
std::shared_ptr< Chonk > accumulate()
void parse(std::vector< PrivateExecutionStepRaw > &&steps)
void throw_or_abort(std::string const &err)