Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 0 additions & 46 deletions barretenberg/cpp/pil/avm/constants.pil

This file was deleted.

39 changes: 39 additions & 0 deletions barretenberg/cpp/pil/avm/constants_gen.pil
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// GENERATED FILE - DO NOT EDIT, RUN yarn remake-constants in circuits.js
namespace constants(256);
pol MAX_NEW_NOTE_HASHES_PER_CALL = 16;
pol MAX_NEW_NULLIFIERS_PER_CALL = 16;
pol MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 16;
pol MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2;
pol MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 32;
pol MAX_PUBLIC_DATA_READS_PER_CALL = 32;
pol MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 16;
pol MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 16;
pol MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 16;
pol MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL = 16;
pol MAX_UNENCRYPTED_LOGS_PER_CALL = 4;
pol SENDER_SELECTOR = 0;
pol ADDRESS_SELECTOR = 1;
pol STORAGE_ADDRESS_SELECTOR = 1;
pol FUNCTION_SELECTOR_SELECTOR = 2;
pol START_GLOBAL_VARIABLES = 29;
pol CHAIN_ID_SELECTOR = 29;
pol VERSION_SELECTOR = 30;
pol BLOCK_NUMBER_SELECTOR = 31;
pol TIMESTAMP_SELECTOR = 32;
pol COINBASE_SELECTOR = 33;
pol FEE_PER_DA_GAS_SELECTOR = 35;
pol FEE_PER_L2_GAS_SELECTOR = 36;
pol END_GLOBAL_VARIABLES = 37;
pol START_SIDE_EFFECT_COUNTER = 37;
pol TRANSACTION_FEE_SELECTOR = 40;
pol START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0;
pol START_NULLIFIER_EXISTS_OFFSET = 16;
pol START_NULLIFIER_NON_EXISTS_OFFSET = 32;
pol START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 48;
pol START_SSTORE_WRITE_OFFSET = 64;
pol START_SLOAD_WRITE_OFFSET = 96;
pol START_EMIT_NOTE_HASH_WRITE_OFFSET = 128;
pol START_EMIT_NULLIFIER_WRITE_OFFSET = 144;
pol START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 160;
pol START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 162;

2 changes: 2 additions & 0 deletions barretenberg/cpp/pil/avm/constants_misc.pil
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
namespace constants_misc(256);
pol INTERNAL_CALL_SPACE_ID = 255;
20 changes: 1 addition & 19 deletions barretenberg/cpp/pil/avm/kernel.pil
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
include "main.pil";
include "constants.pil";
include "constants_gen.pil";

namespace kernel(256);
pol public kernel_inputs;
Expand All @@ -24,24 +24,6 @@ namespace kernel(256);
// Global side effect counter; incremented after each side effect is produced.
pol commit side_effect_counter;

// FIXED INDEXES
// Exists checks
pol START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0;
pol START_NULLIFIER_EXISTS_OFFSET = 32; // START_NOTE_HASH_EXISTS_WRITE_OFFSET + MAX_NOTE_HASH_READ_REQUESTS_PER_CALL
pol START_NULLIFIER_NON_EXISTS_OFFSET = 64; // START_NULLIFIER_EXISTS_OFFSET + MAX_NULLIFIER_READ_REQUESTS_PER_CALL
pol START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 96; // START_NULLIFIER_EXISTS_OFFET + (MAX_NULLIFIER_READ_REQUESTS_PER_CALL + MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL)

// Public storage requests
pol START_SSTORE_WRITE_OFFSET = 112; // START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL
pol START_SLOAD_WRITE_OFFSET = 144; // START_SSTORE_WRITE_OFFSET + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL

// Emit data
pol START_EMIT_NOTE_HASH_WRITE_OFFSET = 176; // START_SLOAD_WRITE_OFFSET + MAX_PUBLIC_DATA_READS_PER_CALL
pol START_EMIT_NULLIFIER_WRITE_OFFSET = 192; // START_EMIT_NOTE_HASH_WRITE_OFFSET + MAX_NEW_NOTE_HASHES_PER_CALL
pol START_EMIT_L2_TO_l1_MSG = 208; // START_EMIT_NULLIFIER_WRITE_OFFSET + MAX_NEW_NULLIFIERS_PER_CALL
pol START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 210; // START_EMIT_L2_TO_L1_MSG + MAX_NEW_L2_TO_L1_MSGS_PER_CALL


// TODO(https://github.com/AztecProtocol/aztec-packages/issues/6465): Must constrain write_offset counters to be less than side effect MAX
// Current write offsets for each opcode
pol commit note_hash_exist_write_offset;
Expand Down
23 changes: 12 additions & 11 deletions barretenberg/cpp/pil/avm/main.pil
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
include "mem.pil";
include "alu.pil";
include "binary.pil";
include "constants.pil";
include "constants_gen.pil";
include "constants_misc.pil";
include "kernel.pil";
include "fixed/gas.pil";
include "fixed/powers.pil";
Expand Down Expand Up @@ -506,7 +507,7 @@ namespace main(256);

//====== SPACE ID CONSTRAINTS ===============================================
#[SPACE_ID_INTERNAL]
(sel_op_internal_call + sel_op_internal_return) * (space_id - constants.INTERNAL_CALL_SPACE_ID) = 0;
(sel_op_internal_call + sel_op_internal_return) * (space_id - constants_misc.INTERNAL_CALL_SPACE_ID) = 0;

#[SPACE_ID_STANDARD_OPCODES]
OPCODE_SELECTORS * (call_ptr - space_id) = 0;
Expand Down Expand Up @@ -612,43 +613,43 @@ namespace main(256);
// OUTPUTS LOOKUPS
// Constrain the value of kernel_out_offset to be the correct offset for the operation being performed
#[NOTE_HASH_KERNEL_OUTPUT]
sel_op_note_hash_exists * (kernel.kernel_out_offset - (kernel.START_NOTE_HASH_EXISTS_WRITE_OFFSET + kernel.note_hash_exist_write_offset)) = 0;
sel_op_note_hash_exists * (kernel.kernel_out_offset - (constants.START_NOTE_HASH_EXISTS_WRITE_OFFSET + kernel.note_hash_exist_write_offset)) = 0;
sel_first * kernel.note_hash_exist_write_offset = 0;


#[EMIT_NOTE_HASH_KERNEL_OUTPUT]
sel_op_emit_note_hash * (kernel.kernel_out_offset - (kernel.START_EMIT_NOTE_HASH_WRITE_OFFSET + kernel.emit_note_hash_write_offset)) = 0;
sel_op_emit_note_hash * (kernel.kernel_out_offset - (constants.START_EMIT_NOTE_HASH_WRITE_OFFSET + kernel.emit_note_hash_write_offset)) = 0;
sel_first * kernel.emit_note_hash_write_offset = 0;

#[NULLIFIER_EXISTS_KERNEL_OUTPUT]
sel_op_nullifier_exists * (kernel.kernel_out_offset - ((ib * (kernel.START_NULLIFIER_EXISTS_OFFSET + kernel.nullifier_exists_write_offset)) + ((1 - ib) * (kernel.START_NULLIFIER_NON_EXISTS_OFFSET + kernel.nullifier_non_exists_write_offset)))) = 0;
sel_op_nullifier_exists * (kernel.kernel_out_offset - ((ib * (constants.START_NULLIFIER_EXISTS_OFFSET + kernel.nullifier_exists_write_offset)) + ((1 - ib) * (constants.START_NULLIFIER_NON_EXISTS_OFFSET + kernel.nullifier_non_exists_write_offset)))) = 0;
sel_first * kernel.nullifier_exists_write_offset = 0;
sel_first * kernel.nullifier_non_exists_write_offset = 0;

#[EMIT_NULLIFIER_KERNEL_OUTPUT]
sel_op_emit_nullifier * (kernel.kernel_out_offset - (kernel.START_EMIT_NULLIFIER_WRITE_OFFSET + kernel.emit_nullifier_write_offset)) = 0;
sel_op_emit_nullifier * (kernel.kernel_out_offset - (constants.START_EMIT_NULLIFIER_WRITE_OFFSET + kernel.emit_nullifier_write_offset)) = 0;
sel_first * kernel.emit_nullifier_write_offset = 0;

#[L1_TO_L2_MSG_EXISTS_KERNEL_OUTPUT]
sel_op_l1_to_l2_msg_exists * (kernel.kernel_out_offset - (kernel.START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + kernel.l1_to_l2_msg_exists_write_offset)) = 0;
sel_op_l1_to_l2_msg_exists * (kernel.kernel_out_offset - (constants.START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + kernel.l1_to_l2_msg_exists_write_offset)) = 0;
sel_first * kernel.l1_to_l2_msg_exists_write_offset = 0;

#[EMIT_UNENCRYPTED_LOG_KERNEL_OUTPUT]
sel_op_emit_unencrypted_log * (kernel.kernel_out_offset - (kernel.START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + kernel.emit_unencrypted_log_write_offset)) = 0;
sel_op_emit_unencrypted_log * (kernel.kernel_out_offset - (constants.START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + kernel.emit_unencrypted_log_write_offset)) = 0;
sel_first * kernel.emit_unencrypted_log_write_offset = 0;

// TODO: Add the equivalent for GETCONTRACTINSTANCE?

#[EMIT_L2_TO_L1_MSGS_KERNEL_OUTPUT]
sel_op_emit_l2_to_l1_msg * (kernel.kernel_out_offset - (kernel.START_EMIT_L2_TO_l1_MSG + kernel.emit_l2_to_l1_msg_write_offset)) = 0;
sel_op_emit_l2_to_l1_msg * (kernel.kernel_out_offset - (constants.START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET + kernel.emit_l2_to_l1_msg_write_offset)) = 0;
sel_first * kernel.emit_l2_to_l1_msg_write_offset = 0;

#[SLOAD_KERNEL_OUTPUT]
sel_op_sload * (kernel.kernel_out_offset - (kernel.START_SLOAD_WRITE_OFFSET + kernel.sload_write_offset)) = 0;
sel_op_sload * (kernel.kernel_out_offset - (constants.START_SLOAD_WRITE_OFFSET + kernel.sload_write_offset)) = 0;
sel_first * kernel.sload_write_offset = 0;

#[SSTORE_KERNEL_OUTPUT]
sel_op_sstore * (kernel.kernel_out_offset - (kernel.START_SSTORE_WRITE_OFFSET + kernel.sstore_write_offset)) = 0;
sel_op_sstore * (kernel.kernel_out_offset - (constants.START_SSTORE_WRITE_OFFSET + kernel.sstore_write_offset)) = 0;
sel_first * kernel.sstore_write_offset = 0;

// When we encounter a state writing opcode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1481,7 +1481,7 @@ template <typename FF_> class mainImpl {
Avm_DECLARE_VIEWS(128);

auto tmp = (main_sel_op_emit_note_hash *
(kernel_kernel_out_offset - (kernel_emit_note_hash_write_offset + FF(176))));
(kernel_kernel_out_offset - (kernel_emit_note_hash_write_offset + FF(128))));
tmp *= scaling_factor;
std::get<128>(evals) += tmp;
}
Expand All @@ -1499,8 +1499,8 @@ template <typename FF_> class mainImpl {

auto tmp = (main_sel_op_nullifier_exists *
(kernel_kernel_out_offset -
((main_ib * (kernel_nullifier_exists_write_offset + FF(32))) +
((-main_ib + FF(1)) * (kernel_nullifier_non_exists_write_offset + FF(64))))));
((main_ib * (kernel_nullifier_exists_write_offset + FF(16))) +
((-main_ib + FF(1)) * (kernel_nullifier_non_exists_write_offset + FF(32))))));
tmp *= scaling_factor;
std::get<130>(evals) += tmp;
}
Expand All @@ -1525,7 +1525,7 @@ template <typename FF_> class mainImpl {
Avm_DECLARE_VIEWS(133);

auto tmp = (main_sel_op_emit_nullifier *
(kernel_kernel_out_offset - (kernel_emit_nullifier_write_offset + FF(192))));
(kernel_kernel_out_offset - (kernel_emit_nullifier_write_offset + FF(144))));
tmp *= scaling_factor;
std::get<133>(evals) += tmp;
}
Expand All @@ -1542,7 +1542,7 @@ template <typename FF_> class mainImpl {
Avm_DECLARE_VIEWS(135);

auto tmp = (main_sel_op_l1_to_l2_msg_exists *
(kernel_kernel_out_offset - (kernel_l1_to_l2_msg_exists_write_offset + FF(96))));
(kernel_kernel_out_offset - (kernel_l1_to_l2_msg_exists_write_offset + FF(48))));
tmp *= scaling_factor;
std::get<135>(evals) += tmp;
}
Expand All @@ -1559,7 +1559,7 @@ template <typename FF_> class mainImpl {
Avm_DECLARE_VIEWS(137);

auto tmp = (main_sel_op_emit_unencrypted_log *
(kernel_kernel_out_offset - (kernel_emit_unencrypted_log_write_offset + FF(210))));
(kernel_kernel_out_offset - (kernel_emit_unencrypted_log_write_offset + FF(162))));
tmp *= scaling_factor;
std::get<137>(evals) += tmp;
}
Expand All @@ -1576,7 +1576,7 @@ template <typename FF_> class mainImpl {
Avm_DECLARE_VIEWS(139);

auto tmp = (main_sel_op_emit_l2_to_l1_msg *
(kernel_kernel_out_offset - (kernel_emit_l2_to_l1_msg_write_offset + FF(208))));
(kernel_kernel_out_offset - (kernel_emit_l2_to_l1_msg_write_offset + FF(160))));
tmp *= scaling_factor;
std::get<139>(evals) += tmp;
}
Expand All @@ -1592,7 +1592,7 @@ template <typename FF_> class mainImpl {
{
Avm_DECLARE_VIEWS(141);

auto tmp = (main_sel_op_sload * (kernel_kernel_out_offset - (kernel_sload_write_offset + FF(144))));
auto tmp = (main_sel_op_sload * (kernel_kernel_out_offset - (kernel_sload_write_offset + FF(96))));
tmp *= scaling_factor;
std::get<141>(evals) += tmp;
}
Expand All @@ -1608,7 +1608,7 @@ template <typename FF_> class mainImpl {
{
Avm_DECLARE_VIEWS(143);

auto tmp = (main_sel_op_sstore * (kernel_kernel_out_offset - (kernel_sstore_write_offset + FF(112))));
auto tmp = (main_sel_op_sstore * (kernel_kernel_out_offset - (kernel_sstore_write_offset + FF(64))));
tmp *= scaling_factor;
std::get<143>(evals) += tmp;
}
Expand Down
20 changes: 10 additions & 10 deletions barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,15 +165,15 @@ VmPublicInputs Execution::convert_public_inputs(std::vector<FF> const& public_in
// We copy each type of the kernel outputs into their respective columns, each has differeing lengths / data
// For NOTEHASHEXISTS
for (size_t i = 0; i < MAX_NOTE_HASH_READ_REQUESTS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_NOTE_HASH_EXISTS_WRITE_OFFSET + i;
size_t dest_offset = START_NOTE_HASH_EXISTS_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_NOTE_HASH_EXISTS_OFFSET + (i * READ_REQUEST_LENGTH);

ko_values[dest_offset] = public_inputs_vec[pcpi_offset];
ko_side_effect[dest_offset] = public_inputs_vec[pcpi_offset + 1];
}
// For NULLIFIEREXISTS
for (size_t i = 0; i < MAX_NULLIFIER_READ_REQUESTS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_NULLIFIER_EXISTS_OFFSET + i;
size_t dest_offset = START_NULLIFIER_EXISTS_OFFSET + i;
size_t pcpi_offset = PCPI_NULLIFIER_EXISTS_OFFSET + (i * READ_REQUEST_LENGTH);

ko_values[dest_offset] = public_inputs_vec[pcpi_offset];
Expand All @@ -182,7 +182,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector<FF> const& public_in
}
// For NULLIFIEREXISTS - non existent
for (size_t i = 0; i < MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_NULLIFIER_NON_EXISTS_OFFSET + i;
size_t dest_offset = START_NULLIFIER_NON_EXISTS_OFFSET + i;
size_t pcpi_offset = PCPI_NULLIFIER_NON_EXISTS_OFFSET + (i * READ_REQUEST_LENGTH);

ko_values[dest_offset] = public_inputs_vec[pcpi_offset];
Expand All @@ -191,15 +191,15 @@ VmPublicInputs Execution::convert_public_inputs(std::vector<FF> const& public_in
}
// For L1TOL2MSGEXISTS
for (size_t i = 0; i < MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + i;
size_t dest_offset = START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_L1_TO_L2_MSG_READ_REQUESTS_OFFSET + (i * READ_REQUEST_LENGTH);

ko_values[dest_offset] = public_inputs_vec[pcpi_offset];
ko_side_effect[dest_offset] = public_inputs_vec[pcpi_offset + 1];
}
// For SSTORE
for (size_t i = 0; i < MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_SSTORE_WRITE_OFFSET + i;
size_t dest_offset = START_SSTORE_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_PUBLIC_DATA_UPDATE_OFFSET + (i * CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH);

// slot, value, side effect
Expand All @@ -209,7 +209,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector<FF> const& public_in
}
// For SLOAD
for (size_t i = 0; i < MAX_PUBLIC_DATA_READS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_SLOAD_WRITE_OFFSET + i;
size_t dest_offset = START_SLOAD_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_PUBLIC_DATA_READ_OFFSET + (i * CONTRACT_STORAGE_READ_LENGTH);

// slot, value, side effect
Expand All @@ -219,23 +219,23 @@ VmPublicInputs Execution::convert_public_inputs(std::vector<FF> const& public_in
}
// For EMITNOTEHASH
for (size_t i = 0; i < MAX_NEW_NOTE_HASHES_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_EMIT_NOTE_HASH_WRITE_OFFSET + i;
size_t dest_offset = START_EMIT_NOTE_HASH_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_NEW_NOTE_HASHES_OFFSET + (i * NOTE_HASH_LENGTH);

ko_values[dest_offset] = public_inputs_vec[pcpi_offset];
ko_side_effect[dest_offset] = public_inputs_vec[pcpi_offset + 1];
}
// For EMITNULLIFIER
for (size_t i = 0; i < MAX_NEW_NULLIFIERS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_EMIT_NULLIFIER_WRITE_OFFSET + i;
size_t dest_offset = START_EMIT_NULLIFIER_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_NEW_NULLIFIERS_OFFSET + (i * NULLIFIER_LENGTH);

ko_values[dest_offset] = public_inputs_vec[pcpi_offset];
ko_side_effect[dest_offset] = public_inputs_vec[pcpi_offset + 1];
}
// For EMITL2TOL1MSG
for (size_t i = 0; i < MAX_NEW_L2_TO_L1_MSGS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_L2_TO_L1_MSG_WRITE_OFFSET + i;
size_t dest_offset = START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_NEW_L2_TO_L1_MSGS_OFFSET + (i * L2_TO_L1_MESSAGE_LENGTH);

// Note: unorthadox order
Expand All @@ -245,7 +245,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector<FF> const& public_in
}
// For EMITUNENCRYPTEDLOG
for (size_t i = 0; i < MAX_UNENCRYPTED_LOGS_PER_CALL; i++) {
size_t dest_offset = AvmKernelTraceBuilder::START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + i;
size_t dest_offset = START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + i;
size_t pcpi_offset = PCPI_NEW_UNENCRYPTED_LOGS_OFFSET + (i * 2);

ko_values[dest_offset] = public_inputs_vec[pcpi_offset];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ void AvmKernelTraceBuilder::op_emit_l2_to_l1_msg(uint32_t clk,
const FF& l2_to_l1_msg,
const FF& recipient)
{
uint32_t offset = START_L2_TO_L1_MSG_WRITE_OFFSET + emit_l2_to_l1_msg_offset;
uint32_t offset = START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET + emit_l2_to_l1_msg_offset;
perform_kernel_output_lookup(offset, side_effect_counter, l2_to_l1_msg, recipient);
emit_l2_to_l1_msg_offset++;

Expand Down
Loading