19#ifdef STARKNET_GARAGA_FLAVORS
20#include "barretenberg/flavor/ultra_starknet_flavor.hpp"
21#include "barretenberg/flavor/ultra_starknet_zk_flavor.hpp"
37template <
typename VK>
inline void validate_vk_size(
const std::vector<uint8_t>& vk_bytes)
39 const size_t expected_size = VK::calc_num_data_types() *
sizeof(
bb::fr);
40 if (vk_bytes.size() != expected_size) {
62 if (policy ==
"check") {
65 if (policy ==
"recompute") {
68 if (policy ==
"rewrite") {
76class ChonkBatchVerifierService;
102#define BBAPI_ERROR(request, msg) \
104 (request).error_message = (msg); \
120template <
typename Flavor>
127 for (
const auto& val : public_inputs) {
129 throw_or_abort(
"Non-canonical public input: value >= field modulus");
132 for (
const auto& val : proof) {
134 throw_or_abort(
"Non-canonical proof element: value >= field modulus");
138 result.reserve(public_inputs.size() + proof.size());
139 result.insert(result.end(), public_inputs.begin(), public_inputs.end());
140 result.insert(result.end(), proof.begin(), proof.end());
149 auto fields =
vk.to_field_elements();
166 if (!settings.ipa_accumulation) {
171 if (settings.oracle_hash_type !=
"poseidon2") {
172 throw_or_abort(
"Rollup circuits (ipa_accumulation=true) must use oracle_hash_type='poseidon2', got '" +
173 settings.oracle_hash_type +
"'");
195template <
typename Settings,
typename Operation>
199 if (settings.ipa_accumulation) {
205 if (settings.oracle_hash_type ==
"poseidon2") {
206 if (settings.disable_zk) {
212 if (settings.oracle_hash_type ==
"keccak") {
213 if (settings.disable_zk) {
219#ifdef STARKNET_GARAGA_FLAVORS
220 if (settings.oracle_hash_type ==
"starknet") {
221 if (settings.disable_zk) {
222 return operation.template operator()<UltraStarknetFlavor,
DefaultIO>();
224 return operation.template operator()<UltraStarknetZKFlavor,
DefaultIO>();
229 throw_or_abort(
"Invalid proof system settings: oracle_hash_type='" + settings.oracle_hash_type +
231 ", ipa_accumulation=" +
std::to_string(settings.ipa_accumulation));
Manages the data that is propagated on the public inputs of an application/function circuit.
typename Curve::ScalarField FF
The data that is propagated on the public inputs of a rollup circuit.
Child class of UltraFlavor that runs with ZK Sumcheck.
VkPolicy
Policy for handling verification keys during IVC accumulation.
auto dispatch_by_settings(const Settings &settings, Operation &&operation)
Dispatch to the correct Flavor and IO type based on proof system settings.
void validate_rollup_settings(const Settings &settings)
Validate rollup circuit settings.
std::vector< uint256_t > vk_to_uint256_fields(const VK &vk)
Convert VK to uint256 field elements, handling flavor-specific return types.
VkPolicy parse_vk_policy(const std::string &policy)
Convert VK policy string to enum for internal use.
Flavor::Transcript::Proof concatenate_proof(const std::vector< uint256_t > &public_inputs, const std::vector< uint256_t > &proof)
Concatenate public inputs and proof into a complete proof for verification.
void validate_vk_size(const std::vector< uint8_t > &vk_bytes)
Validate verification key size before deserialization.
field< Bn254FrParams > fr
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)
std::string loaded_circuit_name
std::shared_ptr< ChonkBatchVerifierService > batch_verifier_service
std::string error_message
std::shared_ptr< IVCBase > ivc_in_progress
std::vector< uint8_t > loaded_circuit_vk
std::optional< acir_format::AcirFormat > loaded_circuit_constraints
static constexpr uint256_t modulus
void throw_or_abort(std::string const &err)