From 8f074db09b949be358412e2c82ff911f78eb5fbe Mon Sep 17 00:00:00 2001 From: dbanks12 Date: Mon, 1 Jul 2024 19:35:31 +0000 Subject: [PATCH 1/2] feat: generate PIL constants from via constants gen --- barretenberg/cpp/pil/avm/constants.pil | 46 --------- barretenberg/cpp/pil/avm/constants_gen.pil | 39 ++++++++ barretenberg/cpp/pil/avm/constants_misc.pil | 2 + barretenberg/cpp/pil/avm/kernel.pil | 20 +--- barretenberg/cpp/pil/avm/main.pil | 23 ++--- .../vm/avm_trace/avm_execution.cpp | 20 ++-- .../vm/avm_trace/avm_kernel_trace.cpp | 2 +- .../vm/avm_trace/avm_kernel_trace.hpp | 44 --------- .../vm/avm_trace/aztec_constants.hpp | 25 +++++ .../vm/tests/avm_execution.test.cpp | 46 ++++----- .../barretenberg/vm/tests/avm_kernel.test.cpp | 20 ++-- .../src/core/libraries/ConstantsGen.sol | 26 +++++ .../crates/types/src/constants.nr | 34 ++++++- yarn-project/circuits.js/src/constants.gen.ts | 26 +++++ .../circuits.js/src/scripts/constants.in.ts | 98 ++++++++++++++++++- 15 files changed, 303 insertions(+), 168 deletions(-) delete mode 100644 barretenberg/cpp/pil/avm/constants.pil create mode 100644 barretenberg/cpp/pil/avm/constants_gen.pil create mode 100644 barretenberg/cpp/pil/avm/constants_misc.pil diff --git a/barretenberg/cpp/pil/avm/constants.pil b/barretenberg/cpp/pil/avm/constants.pil deleted file mode 100644 index f0f54bd873cf..000000000000 --- a/barretenberg/cpp/pil/avm/constants.pil +++ /dev/null @@ -1,46 +0,0 @@ - -// NOTE: the constants in this file line up to the indexes of values in the -// `PublicCircuitPublicInputs` object -namespace constants(256); - // From PublicCircuitPublicInputs's CallContext member - pol SENDER_SELECTOR = 0; - // "address" actually does not exist in PublicCircuitPublicInputs, - // so this is just an alias to "storage address" for now - pol ADDRESS_SELECTOR = 1; - pol STORAGE_ADDRESS_SELECTOR = 1; - pol FUNCTION_SELECTOR_SELECTOR = 2; - - // NOTE: constant expression evaluation does not seem to be supported yet in pil - // pol START_GLOBAL_VARIABLES = CALL_CONTEXT_LENGTH + HEADER_LENGTH = 6 + 23 = 29 - - // From PublicCircuitPublicInputs's GlobalVariables member - // Global Variables - pol CHAIN_ID_SELECTOR = 29; - pol VERSION_SELECTOR = 30; - pol BLOCK_NUMBER_SELECTOR = 31; - pol TIMESTAMP_SELECTOR = 32; - pol COINBASE_SELECTOR = 33; - // Global Variables - fees - pol FEE_PER_DA_GAS_SELECTOR = 35; - pol FEE_PER_L2_GAS_SELECTOR = 36; - - pol END_GLOBAL_VARIABLES = 29 + 8; // We only use the first 5 of 8 global variables for now - - // Top-level PublicCircuitPublicInputs members - pol START_SIDE_EFFECT_COUNTER = 37; - pol TRANSACTION_FEE_SELECTOR = 40; - - // Other AVM specific constants - pol INTERNAL_CALL_SPACE_ID = 255; - - // Lengths of kernel output vectors - // (vectors in PublicCircuitPublicInputs to be processed by kernel) - // Read requests - pol MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 32; - pol MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - pol MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 32; - pol MAX_PUBLIC_DATA_READS_PER_CALL = 32; - // Emitting Data - pol MAX_NEW_NOTE_HASHES_PER_CALL = 16; - pol MAX_NEW_NULLIIFIERS_PER_CALL = 16; - pol MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; diff --git a/barretenberg/cpp/pil/avm/constants_gen.pil b/barretenberg/cpp/pil/avm/constants_gen.pil new file mode 100644 index 000000000000..6a5a6e1ab14e --- /dev/null +++ b/barretenberg/cpp/pil/avm/constants_gen.pil @@ -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 = 32; + pol MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 32; + pol MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 32; + 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 = 32; + pol START_NULLIFIER_NON_EXISTS_OFFSET = 64; + pol START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 96; + pol START_SSTORE_WRITE_OFFSET = 112; + pol START_SLOAD_WRITE_OFFSET = 144; + pol START_EMIT_NOTE_HASH_WRITE_OFFSET = 176; + pol START_EMIT_NULLIFIER_WRITE_OFFSET = 192; + pol START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 208; + pol START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 210; + diff --git a/barretenberg/cpp/pil/avm/constants_misc.pil b/barretenberg/cpp/pil/avm/constants_misc.pil new file mode 100644 index 000000000000..6fd0b7e253a0 --- /dev/null +++ b/barretenberg/cpp/pil/avm/constants_misc.pil @@ -0,0 +1,2 @@ +namespace constants_misc(256); + pol INTERNAL_CALL_SPACE_ID = 255; diff --git a/barretenberg/cpp/pil/avm/kernel.pil b/barretenberg/cpp/pil/avm/kernel.pil index dff09f08d77e..9cc48c6da6c2 100644 --- a/barretenberg/cpp/pil/avm/kernel.pil +++ b/barretenberg/cpp/pil/avm/kernel.pil @@ -1,5 +1,5 @@ include "main.pil"; -include "constants.pil"; +include "constants_gen.pil"; namespace kernel(256); pol public kernel_inputs; @@ -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; diff --git a/barretenberg/cpp/pil/avm/main.pil b/barretenberg/cpp/pil/avm/main.pil index 63615604b19f..7858269448b4 100644 --- a/barretenberg/cpp/pil/avm/main.pil +++ b/barretenberg/cpp/pil/avm/main.pil @@ -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"; @@ -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; @@ -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 diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp index fb59bdf1d6ac..4315d4cdb8ed 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_execution.cpp @@ -165,7 +165,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector 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]; @@ -173,7 +173,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector const& public_in } // 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]; @@ -182,7 +182,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector 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]; @@ -191,7 +191,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector 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]; @@ -199,7 +199,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector const& public_in } // 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 @@ -209,7 +209,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector 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 @@ -219,7 +219,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector 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]; @@ -227,7 +227,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector const& public_in } // 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]; @@ -235,7 +235,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector const& public_in } // 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 @@ -245,7 +245,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector 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]; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.cpp index 52fcc8c6d12e..2a01d3582b95 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.cpp @@ -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++; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.hpp index b829ee1677f3..808b254931e6 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_kernel_trace.hpp @@ -9,28 +9,6 @@ #include #include -inline const uint32_t SENDER_SELECTOR = 0; -// address doesn't actually exist in PublicCircuitPublicInputs, but storageAddress does -// so we just make a address & storageAddress an alias of each other for now -inline const uint32_t ADDRESS_SELECTOR = 1; -inline const uint32_t STORAGE_ADDRESS_SELECTOR = ADDRESS_SELECTOR; -inline const uint32_t FUNCTION_SELECTOR_SELECTOR = 2; - -inline const uint32_t START_GLOBAL_VARIABLES = CALL_CONTEXT_LENGTH + HEADER_LENGTH; - -inline const uint32_t CHAIN_ID_SELECTOR = START_GLOBAL_VARIABLES; -inline const uint32_t VERSION_SELECTOR = START_GLOBAL_VARIABLES + 1; -inline const uint32_t BLOCK_NUMBER_SELECTOR = START_GLOBAL_VARIABLES + 2; -inline const uint32_t TIMESTAMP_SELECTOR = START_GLOBAL_VARIABLES + 3; -inline const uint32_t COINBASE_SELECTOR = START_GLOBAL_VARIABLES + 4; -inline const uint32_t FEE_PER_DA_GAS_SELECTOR = START_GLOBAL_VARIABLES + 6; -inline const uint32_t FEE_PER_L2_GAS_SELECTOR = START_GLOBAL_VARIABLES + 7; - -inline const uint32_t END_GLOBAL_VARIABLES = START_GLOBAL_VARIABLES + GLOBAL_VARIABLES_LENGTH; -inline const uint32_t START_SIDE_EFFECT_COUNTER = END_GLOBAL_VARIABLES; - -inline const uint32_t TRANSACTION_FEE_SELECTOR = KERNEL_INPUTS_LENGTH - 1; - namespace bb::avm_trace { class AvmKernelTraceBuilder { @@ -99,28 +77,6 @@ class AvmKernelTraceBuilder { void op_emit_unencrypted_log(uint32_t clk, uint32_t side_effect_counter, const FF& log_hash); void op_emit_l2_to_l1_msg(uint32_t clk, uint32_t side_effect_counter, const FF& l2_to_l1_msg, const FF& recipient); - // TODO: Move into constants.hpp? - static const uint32_t START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0; - static const uint32_t START_NULLIFIER_EXISTS_OFFSET = - START_NOTE_HASH_EXISTS_WRITE_OFFSET + MAX_NOTE_HASH_READ_REQUESTS_PER_CALL; - static const uint32_t START_NULLIFIER_NON_EXISTS_OFFSET = - START_NULLIFIER_EXISTS_OFFSET + MAX_NULLIFIER_READ_REQUESTS_PER_CALL; - static const uint32_t START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = - START_NULLIFIER_NON_EXISTS_OFFSET + MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL; - - static const uint32_t START_SSTORE_WRITE_OFFSET = - START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL; - static const uint32_t START_SLOAD_WRITE_OFFSET = - START_SSTORE_WRITE_OFFSET + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL; - - static const uint32_t START_EMIT_NOTE_HASH_WRITE_OFFSET = START_SLOAD_WRITE_OFFSET + MAX_PUBLIC_DATA_READS_PER_CALL; - static const uint32_t START_EMIT_NULLIFIER_WRITE_OFFSET = - START_EMIT_NOTE_HASH_WRITE_OFFSET + MAX_NEW_NOTE_HASHES_PER_CALL; - static const uint32_t START_L2_TO_L1_MSG_WRITE_OFFSET = - START_EMIT_NULLIFIER_WRITE_OFFSET + MAX_NEW_NULLIFIERS_PER_CALL; - static const uint32_t START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = - START_L2_TO_L1_MSG_WRITE_OFFSET + MAX_NEW_L2_TO_L1_MSGS_PER_CALL; - private: std::vector kernel_trace; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp index 2f6cc507365f..88c186725999 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp @@ -32,3 +32,28 @@ #define HEADER_LENGTH 23 #define PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH 578 #define PUBLIC_CONTEXT_INPUTS_LENGTH 41 +#define SENDER_SELECTOR 0 +#define ADDRESS_SELECTOR 1 +#define STORAGE_ADDRESS_SELECTOR 1 +#define FUNCTION_SELECTOR_SELECTOR 2 +#define START_GLOBAL_VARIABLES 29 +#define CHAIN_ID_SELECTOR 29 +#define VERSION_SELECTOR 30 +#define BLOCK_NUMBER_SELECTOR 31 +#define TIMESTAMP_SELECTOR 32 +#define COINBASE_SELECTOR 33 +#define FEE_PER_DA_GAS_SELECTOR 35 +#define FEE_PER_L2_GAS_SELECTOR 36 +#define END_GLOBAL_VARIABLES 37 +#define START_SIDE_EFFECT_COUNTER 37 +#define TRANSACTION_FEE_SELECTOR 40 +#define START_NOTE_HASH_EXISTS_WRITE_OFFSET 0 +#define START_NULLIFIER_EXISTS_OFFSET 32 +#define START_NULLIFIER_NON_EXISTS_OFFSET 64 +#define START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET 96 +#define START_SSTORE_WRITE_OFFSET 112 +#define START_SLOAD_WRITE_OFFSET 144 +#define START_EMIT_NOTE_HASH_WRITE_OFFSET 176 +#define START_EMIT_NULLIFIER_WRITE_OFFSET 192 +#define START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET 208 +#define START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET 210 diff --git a/barretenberg/cpp/src/barretenberg/vm/tests/avm_execution.test.cpp b/barretenberg/cpp/src/barretenberg/vm/tests/avm_execution.test.cpp index 21b9d2793cb3..24829d562f4c 100644 --- a/barretenberg/cpp/src/barretenberg/vm/tests/avm_execution.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/tests/avm_execution.test.cpp @@ -1693,7 +1693,7 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) EXPECT_EQ(emit_note_hash_row->kernel_side_effect_counter, 0); // Get the row of the first note hash out - uint32_t emit_note_hash_out_offset = AvmKernelTraceBuilder::START_EMIT_NOTE_HASH_WRITE_OFFSET; + uint32_t emit_note_hash_out_offset = START_EMIT_NOTE_HASH_WRITE_OFFSET; auto emit_note_hash_kernel_out_row = std::ranges::find_if( trace.begin(), trace.end(), [&](Row r) { return r.main_clk == emit_note_hash_out_offset; }); EXPECT_EQ(emit_note_hash_kernel_out_row->kernel_kernel_value_out, 1); @@ -1706,7 +1706,7 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) EXPECT_EQ(emit_nullifier_row->main_ia, 1); EXPECT_EQ(emit_nullifier_row->kernel_side_effect_counter, 1); - uint32_t emit_nullifier_out_offset = AvmKernelTraceBuilder::START_EMIT_NULLIFIER_WRITE_OFFSET; + uint32_t emit_nullifier_out_offset = START_EMIT_NULLIFIER_WRITE_OFFSET; auto emit_nullifier_kernel_out_row = std::ranges::find_if( trace.begin(), trace.end(), [&](Row r) { return r.main_clk == emit_nullifier_out_offset; }); EXPECT_EQ(emit_nullifier_kernel_out_row->kernel_kernel_value_out, 1); @@ -1719,7 +1719,7 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) EXPECT_EQ(emit_log_row->main_ia, 1); EXPECT_EQ(emit_log_row->kernel_side_effect_counter, 2); - uint32_t emit_log_out_offset = AvmKernelTraceBuilder::START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET; + uint32_t emit_log_out_offset = START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET; auto emit_log_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == emit_log_out_offset; }); EXPECT_EQ(emit_log_kernel_out_row->kernel_kernel_value_out, 1); @@ -1733,13 +1733,12 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) EXPECT_EQ(send_row->main_ib, 1); EXPECT_EQ(send_row->kernel_side_effect_counter, 3); - auto msg_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { - return r.main_clk == AvmKernelTraceBuilder::START_L2_TO_L1_MSG_WRITE_OFFSET; - }); + auto msg_out_row = std::ranges::find_if( + trace.begin(), trace.end(), [&](Row r) { return r.main_clk == START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET; }); EXPECT_EQ(msg_out_row->kernel_kernel_value_out, 1); EXPECT_EQ(msg_out_row->kernel_kernel_side_effect_out, 3); EXPECT_EQ(msg_out_row->kernel_kernel_metadata_out, 1); - feed_output(AvmKernelTraceBuilder::START_L2_TO_L1_MSG_WRITE_OFFSET, 1, 3, 1); + feed_output(START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET, 1, 3, 1); validate_trace(std::move(trace), public_inputs); } @@ -1790,7 +1789,7 @@ TEST_F(AvmExecutionTests, kernelOutputStorageLoadOpcodeSimple) EXPECT_EQ(sload_row->kernel_side_effect_counter, 0); // Get the row of the first read storage read out - uint32_t sload_out_offset = AvmKernelTraceBuilder::START_SLOAD_WRITE_OFFSET; + uint32_t sload_out_offset = START_SLOAD_WRITE_OFFSET; auto sload_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == sload_out_offset; }); EXPECT_EQ(sload_kernel_out_row->kernel_kernel_value_out, 42); // value @@ -1851,7 +1850,7 @@ TEST_F(AvmExecutionTests, kernelOutputStorageLoadOpcodeComplex) EXPECT_EQ(sload_row->kernel_side_effect_counter, 1); // Get the row of the first read storage read out - uint32_t sload_out_offset = AvmKernelTraceBuilder::START_SLOAD_WRITE_OFFSET; + uint32_t sload_out_offset = START_SLOAD_WRITE_OFFSET; auto sload_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == sload_out_offset; }); EXPECT_EQ(sload_kernel_out_row->kernel_kernel_value_out, 42); // value @@ -1903,7 +1902,7 @@ TEST_F(AvmExecutionTests, kernelOutputStorageStoreOpcodeSimple) EXPECT_EQ(sstore_row->kernel_side_effect_counter, 0); // Get the row of the first storage write out - uint32_t sstore_out_offset = AvmKernelTraceBuilder::START_SSTORE_WRITE_OFFSET; + uint32_t sstore_out_offset = START_SSTORE_WRITE_OFFSET; auto sstore_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == sstore_out_offset; }); @@ -1963,7 +1962,7 @@ TEST_F(AvmExecutionTests, kernelOutputStorageStoreOpcodeComplex) EXPECT_EQ(sstore_row->kernel_side_effect_counter, 1); // Get the row of the first storage write out - uint32_t sstore_out_offset = AvmKernelTraceBuilder::START_SSTORE_WRITE_OFFSET; + uint32_t sstore_out_offset = START_SSTORE_WRITE_OFFSET; auto sstore_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == sstore_out_offset; }); EXPECT_EQ(sstore_kernel_out_row->kernel_kernel_value_out, 42); // value @@ -2032,7 +2031,7 @@ TEST_F(AvmExecutionTests, kernelOutputStorageOpcodes) EXPECT_EQ(sload_row->kernel_side_effect_counter, 0); // Get the row of the first storage read out - uint32_t sload_out_offset = AvmKernelTraceBuilder::START_SLOAD_WRITE_OFFSET; + uint32_t sload_out_offset = START_SLOAD_WRITE_OFFSET; auto sload_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == sload_out_offset; }); EXPECT_EQ(sload_kernel_out_row->kernel_kernel_value_out, 42); // value @@ -2047,7 +2046,7 @@ TEST_F(AvmExecutionTests, kernelOutputStorageOpcodes) EXPECT_EQ(sstore_row->kernel_side_effect_counter, 1); // Get the row of the first storage write out - uint32_t sstore_out_offset = AvmKernelTraceBuilder::START_SSTORE_WRITE_OFFSET; + uint32_t sstore_out_offset = START_SSTORE_WRITE_OFFSET; auto sstore_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == sstore_out_offset; }); EXPECT_EQ(sstore_kernel_out_row->kernel_kernel_value_out, 42); // value @@ -2112,13 +2111,12 @@ TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes) EXPECT_EQ(note_hash_row->main_ib, 1); // Storage slot EXPECT_EQ(note_hash_row->kernel_side_effect_counter, 0); - auto note_hash_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { - return r.main_clk == AvmKernelTraceBuilder::START_NOTE_HASH_EXISTS_WRITE_OFFSET; - }); + auto note_hash_out_row = std::ranges::find_if( + trace.begin(), trace.end(), [&](Row r) { return r.main_clk == START_NOTE_HASH_EXISTS_WRITE_OFFSET; }); EXPECT_EQ(note_hash_out_row->kernel_kernel_value_out, 1); // value EXPECT_EQ(note_hash_out_row->kernel_kernel_side_effect_out, 0); EXPECT_EQ(note_hash_out_row->kernel_kernel_metadata_out, 1); // exists - feed_output(AvmKernelTraceBuilder::START_NOTE_HASH_EXISTS_WRITE_OFFSET, 1, 0, 1); + feed_output(START_NOTE_HASH_EXISTS_WRITE_OFFSET, 1, 0, 1); // CHECK NULLIFIEREXISTS auto nullifier_row = @@ -2127,13 +2125,12 @@ TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes) EXPECT_EQ(nullifier_row->main_ib, 1); // Storage slot EXPECT_EQ(nullifier_row->kernel_side_effect_counter, 1); - auto nullifier_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { - return r.main_clk == AvmKernelTraceBuilder::START_NULLIFIER_EXISTS_OFFSET; - }); + auto nullifier_out_row = std::ranges::find_if( + trace.begin(), trace.end(), [&](Row r) { return r.main_clk == START_NULLIFIER_EXISTS_OFFSET; }); EXPECT_EQ(nullifier_out_row->kernel_kernel_value_out, 1); // value EXPECT_EQ(nullifier_out_row->kernel_kernel_side_effect_out, 1); EXPECT_EQ(nullifier_out_row->kernel_kernel_metadata_out, 1); // exists - feed_output(AvmKernelTraceBuilder::START_NULLIFIER_EXISTS_OFFSET, 1, 1, 1); + feed_output(START_NULLIFIER_EXISTS_OFFSET, 1, 1, 1); // CHECK L1TOL2MSGEXISTS auto l1_to_l2_row = @@ -2142,13 +2139,12 @@ TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes) EXPECT_EQ(l1_to_l2_row->main_ib, 1); // Storage slot EXPECT_EQ(l1_to_l2_row->kernel_side_effect_counter, 2); - auto msg_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { - return r.main_clk == AvmKernelTraceBuilder::START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET; - }); + auto msg_out_row = std::ranges::find_if( + trace.begin(), trace.end(), [&](Row r) { return r.main_clk == START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET; }); EXPECT_EQ(msg_out_row->kernel_kernel_value_out, 1); // value EXPECT_EQ(msg_out_row->kernel_kernel_side_effect_out, 2); EXPECT_EQ(msg_out_row->kernel_kernel_metadata_out, 1); // exists - feed_output(AvmKernelTraceBuilder::START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET, 1, 2, 1); + feed_output(START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET, 1, 2, 1); validate_trace(std::move(trace), public_inputs); } diff --git a/barretenberg/cpp/src/barretenberg/vm/tests/avm_kernel.test.cpp b/barretenberg/cpp/src/barretenberg/vm/tests/avm_kernel.test.cpp index 0ea5ca18b306..e7876b374b5f 100644 --- a/barretenberg/cpp/src/barretenberg/vm/tests/avm_kernel.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/tests/avm_kernel.test.cpp @@ -942,7 +942,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelEmitNoteHash) uint32_t indirect_offset = 69; uint32_t value = 1234; - uint32_t output_offset = AvmKernelTraceBuilder::START_EMIT_NOTE_HASH_WRITE_OFFSET; + uint32_t output_offset = START_EMIT_NOTE_HASH_WRITE_OFFSET; // We write the note hash into memory auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { @@ -984,7 +984,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelEmitNullifier) uint32_t indirect_offset = 69; uint32_t value = 1234; - uint32_t output_offset = AvmKernelTraceBuilder::START_EMIT_NULLIFIER_WRITE_OFFSET; + uint32_t output_offset = START_EMIT_NULLIFIER_WRITE_OFFSET; // We write the note hash into memory auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { @@ -1032,7 +1032,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelEmitL2ToL1Msg) uint32_t value = 1234; uint32_t recipient = 420; - uint32_t output_offset = AvmKernelTraceBuilder::START_L2_TO_L1_MSG_WRITE_OFFSET; + uint32_t output_offset = START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET; // auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { // trace_builder.op_set(0, 1234, msg_offset, AvmMemoryTag::FF); @@ -1079,7 +1079,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelEmitUnencryptedLog) uint32_t indirect_offset = 69; uint32_t value = 1234; uint32_t slot = 0; - uint32_t output_offset = AvmKernelTraceBuilder::START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET; + uint32_t output_offset = START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET; // We write the note hash into memory auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { @@ -1122,7 +1122,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelSload) uint32_t size = 1; uint32_t slot_offset = 420; auto slot = 12345; - uint32_t output_offset = AvmKernelTraceBuilder::START_SLOAD_WRITE_OFFSET; + uint32_t output_offset = START_SLOAD_WRITE_OFFSET; // Provide a hint for sload value slot auto execution_hints = ExecutionHints().with_storage_value_hints({ { 0, value } }); @@ -1165,7 +1165,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelSstore) auto slot = 12345; uint8_t indirect = 0; uint32_t size = 1; - uint32_t output_offset = AvmKernelTraceBuilder::START_SSTORE_WRITE_OFFSET; + uint32_t output_offset = START_SSTORE_WRITE_OFFSET; auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set(0, static_cast(value), value_offset, AvmMemoryTag::FF); @@ -1207,7 +1207,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNoteHashExists) uint32_t metadata_offset = 420; uint32_t indirect_metadata_offset = 690; auto exists = 1; - uint32_t output_offset = AvmKernelTraceBuilder::START_NOTE_HASH_EXISTS_WRITE_OFFSET; + uint32_t output_offset = START_NOTE_HASH_EXISTS_WRITE_OFFSET; auto execution_hints = ExecutionHints().with_note_hash_exists_hints({ { 0, exists } }); @@ -1254,7 +1254,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNullifierExists) auto value = 1234; uint32_t metadata_offset = 420; auto exists = 1; - uint32_t output_offset = AvmKernelTraceBuilder::START_NULLIFIER_EXISTS_OFFSET; + uint32_t output_offset = START_NULLIFIER_EXISTS_OFFSET; auto execution_hints = ExecutionHints().with_nullifier_exists_hints({ { 0, exists } }); @@ -1293,7 +1293,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNullifierNonExists) auto value = 1234; uint32_t metadata_offset = 420; auto exists = 0; - uint32_t output_offset = AvmKernelTraceBuilder::START_NULLIFIER_NON_EXISTS_OFFSET; + uint32_t output_offset = START_NULLIFIER_NON_EXISTS_OFFSET; auto execution_hints = ExecutionHints().with_nullifier_exists_hints({ { 0, exists } }); @@ -1332,7 +1332,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelL1ToL2MsgExists) auto value = 1234; uint32_t metadata_offset = 420; auto exists = 1; - uint32_t output_offset = AvmKernelTraceBuilder::START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET; + uint32_t output_offset = START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET; // Create an execution hints object with the result of the operation auto execution_hints = ExecutionHints().with_l1_to_l2_message_exists_hints({ { 0, exists } }); diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index e031af8cbd8b..49e9d30ba7f3 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -183,4 +183,30 @@ library Constants { uint256 internal constant RECURSIVE_PROOF_LENGTH = 93; uint256 internal constant NESTED_RECURSIVE_PROOF_LENGTH = 109; uint256 internal constant VERIFICATION_KEY_LENGTH_IN_FIELDS = 114; + uint256 internal constant SENDER_SELECTOR = 0; + uint256 internal constant ADDRESS_SELECTOR = 1; + uint256 internal constant STORAGE_ADDRESS_SELECTOR = 1; + uint256 internal constant FUNCTION_SELECTOR_SELECTOR = 2; + uint256 internal constant START_GLOBAL_VARIABLES = 29; + uint256 internal constant CHAIN_ID_SELECTOR = 29; + uint256 internal constant VERSION_SELECTOR = 30; + uint256 internal constant BLOCK_NUMBER_SELECTOR = 31; + uint256 internal constant TIMESTAMP_SELECTOR = 32; + uint256 internal constant COINBASE_SELECTOR = 33; + uint256 internal constant UNUSED_FEE_RECIPIENT_SELECTOR = 34; + uint256 internal constant FEE_PER_DA_GAS_SELECTOR = 35; + uint256 internal constant FEE_PER_L2_GAS_SELECTOR = 36; + uint256 internal constant END_GLOBAL_VARIABLES = 37; + uint256 internal constant START_SIDE_EFFECT_COUNTER = 37; + uint256 internal constant TRANSACTION_FEE_SELECTOR = 40; + uint256 internal constant START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0; + uint256 internal constant START_NULLIFIER_EXISTS_OFFSET = 32; + uint256 internal constant START_NULLIFIER_NON_EXISTS_OFFSET = 64; + uint256 internal constant START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 96; + uint256 internal constant START_SSTORE_WRITE_OFFSET = 112; + uint256 internal constant START_SLOAD_WRITE_OFFSET = 144; + uint256 internal constant START_EMIT_NOTE_HASH_WRITE_OFFSET = 176; + uint256 internal constant START_EMIT_NULLIFIER_WRITE_OFFSET = 192; + uint256 internal constant START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 208; + uint256 internal constant START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 210; } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 8d450bce84d7..b7aa2f9faea8 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -22,7 +22,6 @@ global ARGS_LENGTH: u32 = 16; // docs:start:constants // "PER CALL" CONSTANTS -// If modifiying, update avm_kernel.pil / constants.pil offset values (our pil does not yet support constant evaluation so values are hardcoded) global MAX_NEW_NOTE_HASHES_PER_CALL: u32 = 16; global MAX_NEW_NULLIFIERS_PER_CALL: u32 = 16; global MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: u32 = 4; @@ -310,3 +309,36 @@ global GENERATOR_INDEX__NOTE_NULLIFIER = 53; global GENERATOR_INDEX__INNER_NOTE_HASH = 54; global GENERATOR_INDEX__NOTE_CONTENT_HASH = 55; global GENERATOR_INDEX__SYMMETRIC_KEY: u8 = 56; + +global SENDER_SELECTOR: u32 = 0; +// "address" actually does not exist in PublicCircuitPublicInputs, +// so this is just an alias to "storage address" for now +global ADDRESS_SELECTOR: u32 = SENDER_SELECTOR + 1; +global STORAGE_ADDRESS_SELECTOR: u32 = ADDRESS_SELECTOR; +global FUNCTION_SELECTOR_SELECTOR: u32 = ADDRESS_SELECTOR + 1; +// Global Variables +global START_GLOBAL_VARIABLES: u32 = CALL_CONTEXT_LENGTH + HEADER_LENGTH; +global CHAIN_ID_SELECTOR: u32 = START_GLOBAL_VARIABLES; +global VERSION_SELECTOR: u32 = CHAIN_ID_SELECTOR + 1; +global BLOCK_NUMBER_SELECTOR: u32 = VERSION_SELECTOR + 1; +global TIMESTAMP_SELECTOR: u32 = BLOCK_NUMBER_SELECTOR + 1; +global COINBASE_SELECTOR: u32 = TIMESTAMP_SELECTOR + 1; +global UNUSED_FEE_RECIPIENT_SELECTOR: u32 = COINBASE_SELECTOR + 1; +// Global Variables - fees +global FEE_PER_DA_GAS_SELECTOR: u32 = UNUSED_FEE_RECIPIENT_SELECTOR + 1; +global FEE_PER_L2_GAS_SELECTOR: u32 = FEE_PER_DA_GAS_SELECTOR + 1; +global END_GLOBAL_VARIABLES: u32 = START_GLOBAL_VARIABLES + GLOBAL_VARIABLES_LENGTH; +// Top-level members +global START_SIDE_EFFECT_COUNTER: u32 = END_GLOBAL_VARIABLES; +global TRANSACTION_FEE_SELECTOR: u32 = PUBLIC_CONTEXT_INPUTS_LENGTH - 1; +// Side effects +global START_NOTE_HASH_EXISTS_WRITE_OFFSET: u32 = 0; +global START_NULLIFIER_EXISTS_OFFSET: u32 = START_NOTE_HASH_EXISTS_WRITE_OFFSET + MAX_NOTE_HASH_READ_REQUESTS_PER_CALL; +global START_NULLIFIER_NON_EXISTS_OFFSET: u32 = START_NULLIFIER_EXISTS_OFFSET + MAX_NULLIFIER_READ_REQUESTS_PER_CALL; +global START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET: u32 = START_NULLIFIER_NON_EXISTS_OFFSET + MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL; +global START_SSTORE_WRITE_OFFSET: u32 = START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL; +global START_SLOAD_WRITE_OFFSET: u32 = START_SSTORE_WRITE_OFFSET + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL; +global START_EMIT_NOTE_HASH_WRITE_OFFSET: u32 = START_SLOAD_WRITE_OFFSET + MAX_PUBLIC_DATA_READS_PER_CALL; +global START_EMIT_NULLIFIER_WRITE_OFFSET: u32 = START_EMIT_NOTE_HASH_WRITE_OFFSET + MAX_NEW_NOTE_HASHES_PER_CALL; +global START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET: u32 = START_EMIT_NULLIFIER_WRITE_OFFSET + MAX_NEW_NULLIFIERS_PER_CALL; +global START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET: u32 = START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET + MAX_NEW_L2_TO_L1_MSGS_PER_CALL; diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index f226f6d2e169..57f4a7d2690a 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -167,6 +167,32 @@ export const NUM_BASE_PARITY_PER_ROOT_PARITY = 4; export const RECURSIVE_PROOF_LENGTH = 93; export const NESTED_RECURSIVE_PROOF_LENGTH = 109; export const VERIFICATION_KEY_LENGTH_IN_FIELDS = 114; +export const SENDER_SELECTOR = 0; +export const ADDRESS_SELECTOR = 1; +export const STORAGE_ADDRESS_SELECTOR = 1; +export const FUNCTION_SELECTOR_SELECTOR = 2; +export const START_GLOBAL_VARIABLES = 29; +export const CHAIN_ID_SELECTOR = 29; +export const VERSION_SELECTOR = 30; +export const BLOCK_NUMBER_SELECTOR = 31; +export const TIMESTAMP_SELECTOR = 32; +export const COINBASE_SELECTOR = 33; +export const UNUSED_FEE_RECIPIENT_SELECTOR = 34; +export const FEE_PER_DA_GAS_SELECTOR = 35; +export const FEE_PER_L2_GAS_SELECTOR = 36; +export const END_GLOBAL_VARIABLES = 37; +export const START_SIDE_EFFECT_COUNTER = 37; +export const TRANSACTION_FEE_SELECTOR = 40; +export const START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0; +export const START_NULLIFIER_EXISTS_OFFSET = 32; +export const START_NULLIFIER_NON_EXISTS_OFFSET = 64; +export const START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 96; +export const START_SSTORE_WRITE_OFFSET = 112; +export const START_SLOAD_WRITE_OFFSET = 144; +export const START_EMIT_NOTE_HASH_WRITE_OFFSET = 176; +export const START_EMIT_NULLIFIER_WRITE_OFFSET = 192; +export const START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 208; +export const START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 210; export enum GeneratorIndex { NOTE_HASH = 1, NOTE_HASH_NONCE = 2, diff --git a/yarn-project/circuits.js/src/scripts/constants.in.ts b/yarn-project/circuits.js/src/scripts/constants.in.ts index da2f6d4f2215..7fde51bd9bbc 100644 --- a/yarn-project/circuits.js/src/scripts/constants.in.ts +++ b/yarn-project/circuits.js/src/scripts/constants.in.ts @@ -5,6 +5,7 @@ import { fileURLToPath } from 'url'; const NOIR_CONSTANTS_FILE = '../../../../noir-projects/noir-protocol-circuits/crates/types/src/constants.nr'; const TS_CONSTANTS_FILE = '../constants.gen.ts'; const CPP_AZTEC_CONSTANTS_FILE = '../../../../barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp'; +const PIL_AZTEC_CONSTANTS_FILE = '../../../../barretenberg/cpp/pil/avm/constants_gen.pil'; const SOLIDITY_CONSTANTS_FILE = '../../../../l1-contracts/src/core/libraries/ConstantsGen.sol'; // Whitelist of constants that will be copied to aztec_constants.hpp. @@ -43,7 +44,70 @@ const CPP_CONSTANTS = [ 'HEADER_LENGTH', 'GLOBAL_VARIABLES_LENGTH', 'AZTEC_ADDRESS_LENGTH', - 'GAS_LENGTH', + 'START_NOTE_HASH_EXISTS_WRITE_OFFSET', + 'START_NULLIFIER_EXISTS_OFFSET', + 'START_NULLIFIER_NON_EXISTS_OFFSET', + 'START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET', + 'START_SSTORE_WRITE_OFFSET', + 'START_SLOAD_WRITE_OFFSET', + 'START_EMIT_NOTE_HASH_WRITE_OFFSET', + 'START_EMIT_NULLIFIER_WRITE_OFFSET', + 'START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET', + 'START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET', + 'SENDER_SELECTOR', + 'ADDRESS_SELECTOR', + 'STORAGE_ADDRESS_SELECTOR', + 'FUNCTION_SELECTOR_SELECTOR', + 'START_GLOBAL_VARIABLES', + 'CHAIN_ID_SELECTOR', + 'VERSION_SELECTOR', + 'BLOCK_NUMBER_SELECTOR', + 'TIMESTAMP_SELECTOR', + 'COINBASE_SELECTOR', + 'FEE_PER_DA_GAS_SELECTOR', + 'FEE_PER_L2_GAS_SELECTOR', + 'END_GLOBAL_VARIABLES', + 'START_SIDE_EFFECT_COUNTER', + 'TRANSACTION_FEE_SELECTOR', +]; + +const PIL_CONSTANTS = [ + 'MAX_NOTE_HASH_READ_REQUESTS_PER_CALL', + 'MAX_NULLIFIER_READ_REQUESTS_PER_CALL', + 'MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL', + 'MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL', + 'MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL', + 'MAX_PUBLIC_DATA_READS_PER_CALL', + 'MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL', + 'MAX_NEW_NOTE_HASHES_PER_CALL', + 'MAX_NEW_NULLIFIERS_PER_CALL', + 'MAX_NEW_L2_TO_L1_MSGS_PER_CALL', + 'MAX_UNENCRYPTED_LOGS_PER_CALL', + 'START_NOTE_HASH_EXISTS_WRITE_OFFSET', + 'START_NULLIFIER_EXISTS_OFFSET', + 'START_NULLIFIER_NON_EXISTS_OFFSET', + 'START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET', + 'START_SSTORE_WRITE_OFFSET', + 'START_SLOAD_WRITE_OFFSET', + 'START_EMIT_NOTE_HASH_WRITE_OFFSET', + 'START_EMIT_NULLIFIER_WRITE_OFFSET', + 'START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET', + 'START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET', + 'SENDER_SELECTOR', + 'ADDRESS_SELECTOR', + 'STORAGE_ADDRESS_SELECTOR', + 'FUNCTION_SELECTOR_SELECTOR', + 'START_GLOBAL_VARIABLES', + 'CHAIN_ID_SELECTOR', + 'VERSION_SELECTOR', + 'BLOCK_NUMBER_SELECTOR', + 'TIMESTAMP_SELECTOR', + 'COINBASE_SELECTOR', + 'FEE_PER_DA_GAS_SELECTOR', + 'FEE_PER_L2_GAS_SELECTOR', + 'END_GLOBAL_VARIABLES', + 'START_SIDE_EFFECT_COUNTER', + 'TRANSACTION_FEE_SELECTOR', ]; /** @@ -91,6 +155,22 @@ function processConstantsCpp(constants: { [key: string]: string }): string { return code.join('\n'); } +/** + * Processes a collection of constants and generates code to export them as PIL constants. + * Required to ensure consistency between the constants used in pil and used in the vm witness generator. + * + * @param constants - An object containing key-value pairs representing constants. + * @returns A string containing code that exports the constants as cpp constants. + */ +function processConstantsPil(constants: { [key: string]: string }): string { + const code: string[] = []; + Object.entries(constants).forEach(([key, value]) => { + if (PIL_CONSTANTS.includes(key)) { + code.push(` pol ${key} = ${value};`); + } + }); + return code.join('\n'); +} /** * Processes an enum and generates code to export it as a TypeScript enum. * @@ -153,6 +233,18 @@ ${processConstantsCpp(constants)} fs.writeFileSync(targetPath, resultCpp); } +/** + * Generate the constants file in C++. + */ +function generatePilConstants({ constants }: ParsedContent, targetPath: string) { + const resultPil: string = `// GENERATED FILE - DO NOT EDIT, RUN yarn remake-constants in circuits.js +namespace constants(256); +${processConstantsPil(constants)} +\n`; + + fs.writeFileSync(targetPath, resultPil); +} + /** * Generate the constants file in Solidity. */ @@ -270,6 +362,10 @@ function main(): void { const cppTargetPath = join(__dirname, CPP_AZTEC_CONSTANTS_FILE); generateCppConstants(parsedContent, cppTargetPath); + // PIL + const pilTargetPath = join(__dirname, PIL_AZTEC_CONSTANTS_FILE); + generatePilConstants(parsedContent, pilTargetPath); + // Solidity const solidityTargetPath = join(__dirname, SOLIDITY_CONSTANTS_FILE); fs.mkdirSync(dirname(solidityTargetPath), { recursive: true }); From ef1c2245167fea0f7cc3156def4dff9e74c50d11 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Mon, 1 Jul 2024 16:08:08 +0000 Subject: [PATCH 2/2] refactor: reduce note and nullifier constants --- barretenberg/cpp/pil/avm/constants_gen.pil | 24 +++++------ .../relations/generated/avm/main.hpp | 18 ++++---- .../vm/avm_trace/aztec_constants.hpp | 26 ++++++------ .../src/core/libraries/ConstantsGen.sol | 42 +++++++++---------- .../types/src/abis/private_call_stack_item.nr | 2 +- .../src/abis/private_circuit_public_inputs.nr | 2 +- .../types/src/abis/public_call_stack_item.nr | 4 +- .../src/abis/public_circuit_public_inputs.nr | 2 +- .../crates/types/src/constants.nr | 14 +++---- yarn-project/circuits.js/src/constants.gen.ts | 42 +++++++++---------- 10 files changed, 88 insertions(+), 88 deletions(-) diff --git a/barretenberg/cpp/pil/avm/constants_gen.pil b/barretenberg/cpp/pil/avm/constants_gen.pil index 6a5a6e1ab14e..adf6902b83c8 100644 --- a/barretenberg/cpp/pil/avm/constants_gen.pil +++ b/barretenberg/cpp/pil/avm/constants_gen.pil @@ -6,9 +6,9 @@ namespace constants(256); 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 = 32; - pol MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 32; - pol MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_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; @@ -27,13 +27,13 @@ namespace constants(256); pol START_SIDE_EFFECT_COUNTER = 37; pol TRANSACTION_FEE_SELECTOR = 40; pol START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0; - pol START_NULLIFIER_EXISTS_OFFSET = 32; - pol START_NULLIFIER_NON_EXISTS_OFFSET = 64; - pol START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 96; - pol START_SSTORE_WRITE_OFFSET = 112; - pol START_SLOAD_WRITE_OFFSET = 144; - pol START_EMIT_NOTE_HASH_WRITE_OFFSET = 176; - pol START_EMIT_NULLIFIER_WRITE_OFFSET = 192; - pol START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 208; - pol START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 210; + 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; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp index 5491bd8a5866..36cdae9545be 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/main.hpp @@ -1481,7 +1481,7 @@ template 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; } @@ -1499,8 +1499,8 @@ template 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; } @@ -1525,7 +1525,7 @@ template 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; } @@ -1542,7 +1542,7 @@ template 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; } @@ -1559,7 +1559,7 @@ template 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; } @@ -1576,7 +1576,7 @@ template 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; } @@ -1592,7 +1592,7 @@ template 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; } @@ -1608,7 +1608,7 @@ template 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; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp index 88c186725999..abf69ae1c0bd 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/aztec_constants.hpp @@ -7,9 +7,9 @@ #define MAX_NEW_L2_TO_L1_MSGS_PER_CALL 2 #define MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL 32 #define MAX_PUBLIC_DATA_READS_PER_CALL 32 -#define MAX_NOTE_HASH_READ_REQUESTS_PER_CALL 32 -#define MAX_NULLIFIER_READ_REQUESTS_PER_CALL 32 -#define MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL 32 +#define MAX_NOTE_HASH_READ_REQUESTS_PER_CALL 16 +#define MAX_NULLIFIER_READ_REQUESTS_PER_CALL 16 +#define MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL 16 #define MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL 16 #define MAX_UNENCRYPTED_LOGS_PER_CALL 4 #define AZTEC_ADDRESS_LENGTH 1 @@ -30,7 +30,7 @@ #define STATE_REFERENCE_LENGTH 8 #define TOTAL_FEES_LENGTH 1 #define HEADER_LENGTH 23 -#define PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH 578 +#define PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH 482 #define PUBLIC_CONTEXT_INPUTS_LENGTH 41 #define SENDER_SELECTOR 0 #define ADDRESS_SELECTOR 1 @@ -48,12 +48,12 @@ #define START_SIDE_EFFECT_COUNTER 37 #define TRANSACTION_FEE_SELECTOR 40 #define START_NOTE_HASH_EXISTS_WRITE_OFFSET 0 -#define START_NULLIFIER_EXISTS_OFFSET 32 -#define START_NULLIFIER_NON_EXISTS_OFFSET 64 -#define START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET 96 -#define START_SSTORE_WRITE_OFFSET 112 -#define START_SLOAD_WRITE_OFFSET 144 -#define START_EMIT_NOTE_HASH_WRITE_OFFSET 176 -#define START_EMIT_NULLIFIER_WRITE_OFFSET 192 -#define START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET 208 -#define START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET 210 +#define START_NULLIFIER_EXISTS_OFFSET 16 +#define START_NULLIFIER_NON_EXISTS_OFFSET 32 +#define START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET 48 +#define START_SSTORE_WRITE_OFFSET 64 +#define START_SLOAD_WRITE_OFFSET 96 +#define START_EMIT_NOTE_HASH_WRITE_OFFSET 128 +#define START_EMIT_NULLIFIER_WRITE_OFFSET 144 +#define START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET 160 +#define START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET 162 diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 49e9d30ba7f3..2d13d85bb09c 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -22,9 +22,9 @@ library Constants { uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 32; uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 32; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 16; uint256 internal constant MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL = 16; uint256 internal constant MAX_KEY_VALIDATION_REQUESTS_PER_CALL = 16; uint256 internal constant MAX_NOTE_ENCRYPTED_LOGS_PER_CALL = 16; @@ -39,9 +39,9 @@ library Constants { uint256 internal constant MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 64; uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 64; uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 8; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 128; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 64; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 64; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 64; uint256 internal constant MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX = 64; uint256 internal constant MAX_KEY_VALIDATION_REQUESTS_PER_TX = 64; uint256 internal constant MAX_NOTE_ENCRYPTED_LOGS_PER_TX = 64; @@ -149,22 +149,22 @@ library Constants { uint256 internal constant TX_REQUEST_LENGTH = 13; uint256 internal constant TOTAL_FEES_LENGTH = 1; uint256 internal constant HEADER_LENGTH = 23; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 457; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 578; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 460; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 393; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 482; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 396; uint256 internal constant PUBLIC_CONTEXT_INPUTS_LENGTH = 41; uint256 internal constant AGGREGATION_OBJECT_LENGTH = 16; uint256 internal constant SCOPED_READ_REQUEST_LEN = 3; uint256 internal constant PUBLIC_DATA_READ_LENGTH = 2; - uint256 internal constant VALIDATION_REQUESTS_LENGTH = 1602; + uint256 internal constant VALIDATION_REQUESTS_LENGTH = 1026; uint256 internal constant PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3; uint256 internal constant COMBINED_ACCUMULATED_DATA_LENGTH = 333; uint256 internal constant COMBINED_CONSTANT_DATA_LENGTH = 40; uint256 internal constant CALL_REQUEST_LENGTH = 7; uint256 internal constant PRIVATE_ACCUMULATED_DATA_LENGTH = 1152; - uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2803; + uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2227; uint256 internal constant PUBLIC_ACCUMULATED_DATA_LENGTH = 983; - uint256 internal constant PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3834; + uint256 internal constant PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3258; uint256 internal constant KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 383; uint256 internal constant CONSTANT_ROLLUP_DATA_LENGTH = 14; uint256 internal constant BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = 31; @@ -200,13 +200,13 @@ library Constants { uint256 internal constant START_SIDE_EFFECT_COUNTER = 37; uint256 internal constant TRANSACTION_FEE_SELECTOR = 40; uint256 internal constant START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0; - uint256 internal constant START_NULLIFIER_EXISTS_OFFSET = 32; - uint256 internal constant START_NULLIFIER_NON_EXISTS_OFFSET = 64; - uint256 internal constant START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 96; - uint256 internal constant START_SSTORE_WRITE_OFFSET = 112; - uint256 internal constant START_SLOAD_WRITE_OFFSET = 144; - uint256 internal constant START_EMIT_NOTE_HASH_WRITE_OFFSET = 176; - uint256 internal constant START_EMIT_NULLIFIER_WRITE_OFFSET = 192; - uint256 internal constant START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 208; - uint256 internal constant START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 210; + uint256 internal constant START_NULLIFIER_EXISTS_OFFSET = 16; + uint256 internal constant START_NULLIFIER_NON_EXISTS_OFFSET = 32; + uint256 internal constant START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 48; + uint256 internal constant START_SSTORE_WRITE_OFFSET = 64; + uint256 internal constant START_SLOAD_WRITE_OFFSET = 96; + uint256 internal constant START_EMIT_NOTE_HASH_WRITE_OFFSET = 128; + uint256 internal constant START_EMIT_NULLIFIER_WRITE_OFFSET = 144; + uint256 internal constant START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 160; + uint256 internal constant START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 162; } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr index 80ef09922600..bf322ef6adbe 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr @@ -85,6 +85,6 @@ fn empty_hash() { let hash = item.hash(); // Value from private_call_stack_item.test.ts "computes empty item hash" test - let test_data_empty_hash = 0x22786e4f971661d2e49095e6b038e5170bc47b795253916d5657c4bdd1df50bf; + let test_data_empty_hash = 0x157022d579f892f06461fb895cdf5550b24329e15e7a41df14f9dad582fa1bc5; assert_eq(hash, test_data_empty_hash); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr index b8871423e59e..e0b364dee9dd 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr @@ -250,6 +250,6 @@ fn empty_hash() { let inputs = PrivateCircuitPublicInputs::empty(); let hash = inputs.hash(); // Value from private_circuit_public_inputs.test.ts "computes empty item hash" test - let test_data_empty_hash = 0x1970bf189adc837d1769f9f44a8b55c97d45690e7744859b71b647e808ee8622; + let test_data_empty_hash = 0x1eb5048b5bdcea5ba66519ecd1cbdb9e18fd957d52830b2bcb309f4ce9bcfbd3; assert_eq(hash, test_data_empty_hash); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr index 16a3aec2144c..891985268ef6 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr @@ -70,7 +70,7 @@ mod tests { let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: true, function_data }; // Value from public_call_stack_item.test.ts "Computes a callstack item request hash" test - let test_data_call_stack_item_request_hash = 0x2751111aa213d9d21279da53531bf90c2da272cf3f959e2a2a1dfceb487bf102; + let test_data_call_stack_item_request_hash = 0x022a2b82af83606ae5a8d4955ef6215e54025193356318aefbde3b5026952953; assert_eq(call_stack_item.hash(), test_data_call_stack_item_request_hash); } @@ -88,7 +88,7 @@ mod tests { let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: false, function_data }; // Value from public_call_stack_item.test.ts "Computes a callstack item hash" test - let test_data_call_stack_item_hash = 0x1860d00d9602966e398c6d585216baba2ffa8c5eddda5faee041136665d8482a; + let test_data_call_stack_item_hash = 0x23a1d22e7bf37df7d68e8fcbfb7e016c060194b7915e3771e2dcd72cea26e427; assert_eq(call_stack_item.hash(), test_data_call_stack_item_hash); } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr index cd76145a67eb..34da6c7df027 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr @@ -201,6 +201,6 @@ fn empty_hash() { let hash = inputs.hash(); // Value from public_circuit_public_inputs.test.ts "computes empty item hash" test - let test_data_empty_hash = 0x01681b19fb7fe21aa9c2cf9fb47520149f46edd679b2e7c2b2c4a279fd685125; + let test_data_empty_hash = 0x2e08158f3f0d9a94e3f17338aadc3733a15bf5d163f94cef1afd8a47b446d789; assert_eq(hash, test_data_empty_hash); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index b7aa2f9faea8..14855e03d455 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -29,9 +29,9 @@ global MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: u32 = 16; global MAX_NEW_L2_TO_L1_MSGS_PER_CALL: u32 = 2; global MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: u32 = 32; global MAX_PUBLIC_DATA_READS_PER_CALL: u32 = 32; -global MAX_NOTE_HASH_READ_REQUESTS_PER_CALL: u32 = 32; -global MAX_NULLIFIER_READ_REQUESTS_PER_CALL: u32 = 32; -global MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL: u32 = 32; +global MAX_NOTE_HASH_READ_REQUESTS_PER_CALL: u32 = 16; +global MAX_NULLIFIER_READ_REQUESTS_PER_CALL: u32 = 16; +global MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL: u32 = 16; global MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL: u32 = 16; global MAX_KEY_VALIDATION_REQUESTS_PER_CALL: u32 = 16; global MAX_NOTE_ENCRYPTED_LOGS_PER_CALL: u32 = 16; @@ -52,9 +52,9 @@ global PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: u32 = 1; global MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: u32 = 64; // MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX + PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX; global MAX_PUBLIC_DATA_READS_PER_TX: u32 = 64; global MAX_NEW_L2_TO_L1_MSGS_PER_TX: u32 = 8; -global MAX_NOTE_HASH_READ_REQUESTS_PER_TX: u32 = 128; -global MAX_NULLIFIER_READ_REQUESTS_PER_TX: u32 = 128; -global MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX: u32 = 128; +global MAX_NOTE_HASH_READ_REQUESTS_PER_TX: u32 = 64; +global MAX_NULLIFIER_READ_REQUESTS_PER_TX: u32 = 64; +global MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX: u32 = 64; global MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX: u32 = 64; // TODO: for large multisends we might run out of key validation requests here but not dealing with this now as // databus will hopefully make the issue go away. @@ -65,7 +65,7 @@ global MAX_UNENCRYPTED_LOGS_PER_TX: u32 = 8; // docs:end:constants // KERNEL CIRCUIT PRIVATE INPUTS CONSTANTS -// global MAX_PUBLIC_DATA_HINTS: u32 = MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX + MAX_PUBLIC_DATA_READS_PER_TX; +// global MAX_PUBLIC_DATA_HINTS: u32 = MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX + MAX_PUBLIC_DATA_READS_PER_TX; // FIX: Sadly, writing this as above causes a type error in type_conversion.ts. global MAX_PUBLIC_DATA_HINTS: u32 = 128; diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 57f4a7d2690a..6be3599a270b 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -8,9 +8,9 @@ export const MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 16; export const MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; export const MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 32; export const MAX_PUBLIC_DATA_READS_PER_CALL = 32; -export const MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; -export const MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 32; -export const MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 32; +export const MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 16; +export const MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 16; +export const MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 16; export const MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL = 16; export const MAX_KEY_VALIDATION_REQUESTS_PER_CALL = 16; export const MAX_NOTE_ENCRYPTED_LOGS_PER_CALL = 16; @@ -25,9 +25,9 @@ export const PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 1; export const MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 64; export const MAX_PUBLIC_DATA_READS_PER_TX = 64; export const MAX_NEW_L2_TO_L1_MSGS_PER_TX = 8; -export const MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; -export const MAX_NULLIFIER_READ_REQUESTS_PER_TX = 128; -export const MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 128; +export const MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 64; +export const MAX_NULLIFIER_READ_REQUESTS_PER_TX = 64; +export const MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 64; export const MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX = 64; export const MAX_KEY_VALIDATION_REQUESTS_PER_TX = 64; export const MAX_NOTE_ENCRYPTED_LOGS_PER_TX = 64; @@ -133,22 +133,22 @@ export const TX_CONTEXT_LENGTH = 9; export const TX_REQUEST_LENGTH = 13; export const TOTAL_FEES_LENGTH = 1; export const HEADER_LENGTH = 23; -export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 457; -export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 578; -export const PRIVATE_CALL_STACK_ITEM_LENGTH = 460; +export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 393; +export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 482; +export const PRIVATE_CALL_STACK_ITEM_LENGTH = 396; export const PUBLIC_CONTEXT_INPUTS_LENGTH = 41; export const AGGREGATION_OBJECT_LENGTH = 16; export const SCOPED_READ_REQUEST_LEN = 3; export const PUBLIC_DATA_READ_LENGTH = 2; -export const VALIDATION_REQUESTS_LENGTH = 1602; +export const VALIDATION_REQUESTS_LENGTH = 1026; export const PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3; export const COMBINED_ACCUMULATED_DATA_LENGTH = 333; export const COMBINED_CONSTANT_DATA_LENGTH = 40; export const CALL_REQUEST_LENGTH = 7; export const PRIVATE_ACCUMULATED_DATA_LENGTH = 1152; -export const PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2803; +export const PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2227; export const PUBLIC_ACCUMULATED_DATA_LENGTH = 983; -export const PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3834; +export const PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3258; export const KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 383; export const CONSTANT_ROLLUP_DATA_LENGTH = 14; export const BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = 31; @@ -184,15 +184,15 @@ export const END_GLOBAL_VARIABLES = 37; export const START_SIDE_EFFECT_COUNTER = 37; export const TRANSACTION_FEE_SELECTOR = 40; export const START_NOTE_HASH_EXISTS_WRITE_OFFSET = 0; -export const START_NULLIFIER_EXISTS_OFFSET = 32; -export const START_NULLIFIER_NON_EXISTS_OFFSET = 64; -export const START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 96; -export const START_SSTORE_WRITE_OFFSET = 112; -export const START_SLOAD_WRITE_OFFSET = 144; -export const START_EMIT_NOTE_HASH_WRITE_OFFSET = 176; -export const START_EMIT_NULLIFIER_WRITE_OFFSET = 192; -export const START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 208; -export const START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 210; +export const START_NULLIFIER_EXISTS_OFFSET = 16; +export const START_NULLIFIER_NON_EXISTS_OFFSET = 32; +export const START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET = 48; +export const START_SSTORE_WRITE_OFFSET = 64; +export const START_SLOAD_WRITE_OFFSET = 96; +export const START_EMIT_NOTE_HASH_WRITE_OFFSET = 128; +export const START_EMIT_NULLIFIER_WRITE_OFFSET = 144; +export const START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 160; +export const START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 162; export enum GeneratorIndex { NOTE_HASH = 1, NOTE_HASH_NONCE = 2,