84 const std::vector<FF>& witness_values,
112 if (op_code.
eq && op_code.
reset) {
115 if (!op_code.
add && !op_code.
mul && !op_code.
eq && !op_code.
reset) {
167 databus[
static_cast<size_t>(bus_idx)].append(witness_idx);
184 std::vector<uint8_t>
buffer;
188 for (
auto& block : blocks_ref.get()) {
190 for (
const auto& wire : block.wires) {
191 for (
const auto& idx : wire) {
197 auto selectors = block.get_selectors();
198 for (
auto& selector : selectors) {
199 for (
size_t i = 0; i < selector.size(); ++i) {
209 std::stringstream ss;
bool is_write_vk_mode() const
const std::vector< uint32_t > & public_inputs() const
void set_goblin_ecc_op_code_constant_variables()
void add_public_calldata(BusId bus_idx, const uint32_t &in)
Add a witness variable to the specified calldata bus.
uint32_t add_accum_op_idx
void queue_ecc_random_op()
Mechanism for populating two rows with randomness. This "operation" doesn't return a tuple representi...
ecc_op_tuple queue_ecc_add_accum(const g1::affine_element &point)
Add simple point addition operation to the op queue and add corresponding gates.
ecc_op_tuple queue_ecc_mul_accum(const g1::affine_element &point, const FF &scalar, bool in_finalize=false)
Add point mul-then-accumulate operation to the op queue and add corresponding gates.
void create_poseidon2_quad_internal_gate(const poseidon2_quad_internal_gate_< FF > &in)
Poseidon2 K=4 compressed internal-round gate: processes FOUR consecutive internal rounds per row.
std::shared_ptr< ECCOpQueue > op_queue
void apply_databus_selectors(BusId bus_idx)
const BusVector & get_bus_vector(size_t bus_idx) const
uint32_t get_ecc_op_idx(const EccOpCode &op_code)
Convert op code to the witness index for the corresponding op index in the builder.
uint32_t read_calldata(BusId bus_idx, const uint32_t &read_idx_witness_idx)
Read from the specified calldata bus and create a corresponding databus read gate.
ecc_op_tuple queue_ecc_eq(bool in_finalize=true)
Add point equality operation to the op queue based on the value of the internal accumulator and add c...
MegaCircuitBuilder_(std::shared_ptr< ECCOpQueue > op_queue_in=std::make_shared< ECCOpQueue >(), bool is_write_vk_mode=false)
void create_databus_read_gate(const databus_lookup_gate_< FF > &in, BusId bus_idx)
Create a databus lookup/read gate.
static constexpr size_t DEFAULT_NON_NATIVE_FIELD_LIMB_BITS
const BusVector & get_return_data() const
ecc_op_tuple queue_ecc_no_op()
Add a no-op to the op queue and populate two zero rows in the ecc_op block.
void queue_ecc_hiding_op(const curve::BN254::BaseField &Px, const curve::BN254::BaseField &Py)
Add a hiding op with random (possibly non-curve) Px, Py values to the op queue and circuit.
void append_to_bus_vector(const BusId bus_idx, const uint32_t &witness_idx)
size_t get_num_constant_gates() const override
void add_public_return_data(const uint32_t &in)
Add a witness variable to the public return_data.
void create_poseidon2_transition_entry_gate(const poseidon2_transition_entry_gate_< FF > &in)
Poseidon2 transition-entry gate: standard → K=4 compressed encoding boundary.
const BusVector & get_calldata(BusId idx) const
uint32_t mul_accum_op_idx
MegaCircuitBuilder_(std::shared_ptr< ECCOpQueue > op_queue_in, const std::vector< FF > &witness_values, const std::vector< uint32_t > &public_inputs, const bool is_write_vk_mode)
Constructor from data generated from ACIR.
uint32_t read_bus_vector(BusId bus_idx, const uint32_t &read_idx_witness_idx)
Read from a databus column.
uint32_t read_return_data(const uint32_t &read_idx_witness_idx)
Read from return_data and create a corresponding databus read gate.
std::string hash() const
Compute a hash of the circuit.
void create_poseidon2_initial_external_gate(const poseidon2_initial_external_gate_< FF > &in)
Poseidon2 initial linear layer gate, activates the q_poseidon2_external_initial selector and relation...
ecc_op_tuple populate_ecc_op_wires(const UltraOp &ultra_op, bool in_finalize=false)
Add goblin ecc op gates for a single operation.
typename ExecutionTrace::FF FF
std::unique_ptr< uint8_t[]> buffer
Sha256Hash sha256(const ByteContainer &input)
SHA-256 hash function (FIPS 180-4)
Entry point for Barretenberg command-line interface.
std::array< BusVector, NUM_BUS_COLUMNS > DataBus
void write(B &buf, field2< base_field, Params > const &value)
MegaCircuitBuilder_< field< Bn254FrParams > > MegaCircuitBuilder
void write(auto &buf, const msgpack_concepts::HasMsgPack auto &obj)
Automatically derived write for any object that defines .msgpack() (implicitly defined by SERIALIZATI...
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Defines the opcodes for ECC operations used in both the Ultra and ECCVM formats. There are three opco...
void throw_or_abort(std::string const &err)