Skip to content

Commit 4ed0da9

Browse files
authored
Merge 5bddcfb into 0330ced
2 parents 0330ced + 5bddcfb commit 4ed0da9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+790
-196
lines changed

barretenberg/cpp/pil/avm/kernel.pil

+4-3
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,8 @@ namespace main(256);
164164

165165
// When we encounter a state writing opcode
166166
// We increment the side effect counter by 1
167-
#[SIDE_EFFECT_COUNTER_INCREMENT]
168-
KERNEL_OUTPUT_SELECTORS * (side_effect_counter' - (side_effect_counter + 1)) = 0;
167+
//#[SIDE_EFFECT_COUNTER_INCREMENT]
168+
//KERNEL_OUTPUT_SELECTORS * (side_effect_counter' - (side_effect_counter + 1)) = 0;
169169

170170
//===== LOOKUPS INTO THE PUBLIC INPUTS ===========================================
171171
pol KERNEL_INPUT_SELECTORS = sel_op_address + sel_op_storage_address + sel_op_sender
@@ -182,8 +182,9 @@ namespace main(256);
182182
#[KERNEL_OUTPUT_ACTIVE_CHECK]
183183
KERNEL_OUTPUT_SELECTORS * (1 - sel_q_kernel_output_lookup) = 0;
184184

185+
// TODO(#8287): Reintroduce constraints
185186
#[KERNEL_OUTPUT_LOOKUP]
186-
sel_q_kernel_output_lookup {kernel_out_offset, ia, side_effect_counter, ib} in sel_kernel_out {clk, kernel_value_out, kernel_side_effect_out, kernel_metadata_out};
187+
sel_q_kernel_output_lookup {kernel_out_offset, /*ia,*/ /*side_effect_counter,*/ ib } in sel_kernel_out {clk, /*kernel_value_out,*/ /*kernel_side_effect_out,*/ kernel_metadata_out};
187188

188189
#[LOOKUP_INTO_KERNEL]
189190
sel_q_kernel_lookup { main.ia, kernel_in_offset } in sel_kernel_inputs { kernel_inputs, clk };

barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp

+17-19
Original file line numberDiff line numberDiff line change
@@ -730,24 +730,23 @@ AvmFlavor::AllConstRefValues::AllConstRefValues(
730730
, main_nullifier_non_exists_write_offset_shift(il[722])
731731
, main_pc_shift(il[723])
732732
, main_sel_execution_row_shift(il[724])
733-
, main_side_effect_counter_shift(il[725])
734-
, main_sload_write_offset_shift(il[726])
735-
, main_sstore_write_offset_shift(il[727])
736-
, mem_glob_addr_shift(il[728])
737-
, mem_rw_shift(il[729])
738-
, mem_sel_mem_shift(il[730])
739-
, mem_tag_shift(il[731])
740-
, mem_tsp_shift(il[732])
741-
, mem_val_shift(il[733])
742-
, slice_addr_shift(il[734])
743-
, slice_clk_shift(il[735])
744-
, slice_cnt_shift(il[736])
745-
, slice_col_offset_shift(il[737])
746-
, slice_sel_cd_cpy_shift(il[738])
747-
, slice_sel_mem_active_shift(il[739])
748-
, slice_sel_return_shift(il[740])
749-
, slice_sel_start_shift(il[741])
750-
, slice_space_id_shift(il[742])
733+
, main_sload_write_offset_shift(il[725])
734+
, main_sstore_write_offset_shift(il[726])
735+
, mem_glob_addr_shift(il[727])
736+
, mem_rw_shift(il[728])
737+
, mem_sel_mem_shift(il[729])
738+
, mem_tag_shift(il[730])
739+
, mem_tsp_shift(il[731])
740+
, mem_val_shift(il[732])
741+
, slice_addr_shift(il[733])
742+
, slice_clk_shift(il[734])
743+
, slice_cnt_shift(il[735])
744+
, slice_col_offset_shift(il[736])
745+
, slice_sel_cd_cpy_shift(il[737])
746+
, slice_sel_mem_active_shift(il[738])
747+
, slice_sel_return_shift(il[739])
748+
, slice_sel_start_shift(il[740])
749+
, slice_space_id_shift(il[741])
751750
{}
752751

753752
AvmFlavor::ProverPolynomials::ProverPolynomials(ProvingKey& proving_key)
@@ -1489,7 +1488,6 @@ AvmFlavor::AllConstRefValues AvmFlavor::ProverPolynomials::get_row(size_t row_id
14891488
main_nullifier_non_exists_write_offset_shift[row_idx],
14901489
main_pc_shift[row_idx],
14911490
main_sel_execution_row_shift[row_idx],
1492-
main_side_effect_counter_shift[row_idx],
14931491
main_sload_write_offset_shift[row_idx],
14941492
main_sstore_write_offset_shift[row_idx],
14951493
mem_glob_addr_shift[row_idx],

barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp

+4-4
Large diffs are not rendered by default.

barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/kernel.hpp

+5-14
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ template <typename FF_> class kernelImpl {
1010
public:
1111
using FF = FF_;
1212

13-
static constexpr std::array<size_t, 44> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
13+
static constexpr std::array<size_t, 43> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1414
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3,
15-
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 };
15+
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 };
1616

1717
template <typename ContainerOverSubrelations, typename AllEntities>
1818
void static accumulate(ContainerOverSubrelations& evals,
@@ -363,22 +363,15 @@ template <typename FF_> class kernelImpl {
363363
}
364364
{
365365
using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>;
366-
auto tmp = (main_KERNEL_OUTPUT_SELECTORS *
367-
(new_term.main_side_effect_counter_shift - (new_term.main_side_effect_counter + FF(1))));
366+
auto tmp = (main_KERNEL_INPUT_SELECTORS * (FF(1) - new_term.main_sel_q_kernel_lookup));
368367
tmp *= scaling_factor;
369368
std::get<41>(evals) += typename Accumulator::View(tmp);
370369
}
371370
{
372371
using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>;
373-
auto tmp = (main_KERNEL_INPUT_SELECTORS * (FF(1) - new_term.main_sel_q_kernel_lookup));
374-
tmp *= scaling_factor;
375-
std::get<42>(evals) += typename Accumulator::View(tmp);
376-
}
377-
{
378-
using Accumulator = typename std::tuple_element_t<43, ContainerOverSubrelations>;
379372
auto tmp = (main_KERNEL_OUTPUT_SELECTORS * (FF(1) - new_term.main_sel_q_kernel_output_lookup));
380373
tmp *= scaling_factor;
381-
std::get<43>(evals) += typename Accumulator::View(tmp);
374+
std::get<42>(evals) += typename Accumulator::View(tmp);
382375
}
383376
}
384377
};
@@ -453,10 +446,8 @@ template <typename FF> class kernel : public Relation<kernelImpl<FF>> {
453446
case 39:
454447
return "SSTORE_KERNEL_OUTPUT";
455448
case 41:
456-
return "SIDE_EFFECT_COUNTER_INCREMENT";
457-
case 42:
458449
return "KERNEL_INPUT_ACTIVE_CHECK";
459-
case 43:
450+
case 42:
460451
return "KERNEL_OUTPUT_ACTIVE_CHECK";
461452
}
462453
return std::to_string(index);

barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/kernel_output_lookup.hpp

+1-9
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class kernel_output_lookup_lookup_settings {
1414
static constexpr size_t WRITE_TERMS = 1;
1515
static constexpr size_t READ_TERM_TYPES[READ_TERMS] = { 0 };
1616
static constexpr size_t WRITE_TERM_TYPES[WRITE_TERMS] = { 0 };
17-
static constexpr size_t LOOKUP_TUPLE_SIZE = 4;
17+
static constexpr size_t LOOKUP_TUPLE_SIZE = 2;
1818
static constexpr size_t INVERSE_EXISTS_POLYNOMIAL_DEGREE = 4;
1919
static constexpr size_t READ_TERM_DEGREE = 0;
2020
static constexpr size_t WRITE_TERM_DEGREE = 0;
@@ -40,12 +40,8 @@ class kernel_output_lookup_lookup_settings {
4040
in.main_sel_q_kernel_output_lookup,
4141
in.main_sel_kernel_out,
4242
in.main_kernel_out_offset,
43-
in.main_ia,
44-
in.main_side_effect_counter,
4543
in.main_ib,
4644
in.main_clk,
47-
in.main_kernel_value_out,
48-
in.main_kernel_side_effect_out,
4945
in.main_kernel_metadata_out);
5046
}
5147

@@ -56,12 +52,8 @@ class kernel_output_lookup_lookup_settings {
5652
in.main_sel_q_kernel_output_lookup,
5753
in.main_sel_kernel_out,
5854
in.main_kernel_out_offset,
59-
in.main_ia,
60-
in.main_side_effect_counter,
6155
in.main_ib,
6256
in.main_clk,
63-
in.main_kernel_value_out,
64-
in.main_kernel_side_effect_out,
6557
in.main_kernel_metadata_out);
6658
}
6759
};

barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -1771,7 +1771,8 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes)
17711771
auto emit_note_hash_kernel_out_row = std::ranges::find_if(
17721772
trace.begin(), trace.end(), [&](Row r) { return r.main_clk == emit_note_hash_out_offset; });
17731773
EXPECT_EQ(emit_note_hash_kernel_out_row->main_kernel_value_out, 1);
1774-
EXPECT_EQ(emit_note_hash_kernel_out_row->main_kernel_side_effect_out, 0);
1774+
// TODO(#8287)
1775+
// EXPECT_EQ(emit_note_hash_kernel_out_row->main_kernel_side_effect_out, 0);
17751776
feed_output(emit_note_hash_out_offset, 1, 0, 0);
17761777

17771778
// CHECK EMIT NULLIFIER
@@ -2040,7 +2041,9 @@ TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes)
20402041
std::vector<FF> returndata = {};
20412042

20422043
// Generate Hint for hash exists operation
2043-
auto execution_hints = ExecutionHints().with_storage_value_hints({ { 0, 1 }, { 1, 1 }, { 2, 1 } });
2044+
auto execution_hints = ExecutionHints()
2045+
.with_storage_value_hints({ { 0, 1 }, { 1, 1 }, { 2, 1 } })
2046+
.with_note_hash_exists_hints({ { 0, 1 }, { 1, 1 }, { 2, 1 } });
20442047

20452048
auto trace = Execution::gen_trace(instructions, returndata, calldata, public_inputs_vec, execution_hints);
20462049

@@ -2068,7 +2071,8 @@ TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes)
20682071
auto nullifier_out_row = std::ranges::find_if(
20692072
trace.begin(), trace.end(), [&](Row r) { return r.main_clk == START_NULLIFIER_EXISTS_OFFSET; });
20702073
EXPECT_EQ(nullifier_out_row->main_kernel_value_out, 1); // value
2071-
EXPECT_EQ(nullifier_out_row->main_kernel_side_effect_out, 1);
2074+
// TODO(#8287)
2075+
// EXPECT_EQ(nullifier_out_row->main_kernel_side_effect_out, 1);
20722076
EXPECT_EQ(nullifier_out_row->main_kernel_metadata_out, 1); // exists
20732077
feed_output(START_NULLIFIER_EXISTS_OFFSET, 1, 1, 1);
20742078

@@ -2082,7 +2086,8 @@ TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes)
20822086
auto msg_out_row = std::ranges::find_if(
20832087
trace.begin(), trace.end(), [&](Row r) { return r.main_clk == START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET; });
20842088
EXPECT_EQ(msg_out_row->main_kernel_value_out, 1); // value
2085-
EXPECT_EQ(msg_out_row->main_kernel_side_effect_out, 2);
2089+
// TODO(#8287)
2090+
// EXPECT_EQ(msg_out_row->main_kernel_side_effect_out, 2);
20862091
EXPECT_EQ(msg_out_row->main_kernel_metadata_out, 1); // exists
20872092
feed_output(START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET, 1, 2, 1);
20882093

barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -1226,14 +1226,16 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNoteHashExists)
12261226

12271227
auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) {
12281228
trace_builder.op_set(0, static_cast<uint128_t>(value), value_offset, AvmMemoryTag::FF);
1229-
trace_builder.op_note_hash_exists(/*indirect*/ false, value_offset, metadata_offset);
1229+
// TODO(#8287): Leaf index isnt constrained properly so we just set it to 0
1230+
trace_builder.op_note_hash_exists(/*indirect*/ false, value_offset, 0, metadata_offset);
12301231
};
12311232
// TODO: fix
12321233
auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) {
12331234
trace_builder.op_set(0, static_cast<uint128_t>(value), value_offset, AvmMemoryTag::FF);
12341235
trace_builder.op_set(0, value_offset, indirect_value_offset, AvmMemoryTag::U32);
12351236
trace_builder.op_set(0, metadata_offset, indirect_metadata_offset, AvmMemoryTag::U32);
1236-
trace_builder.op_note_hash_exists(/*indirect*/ 3, indirect_value_offset, indirect_metadata_offset);
1237+
// TODO(#8287): Leaf index isnt constrained properly so we just set it to 0
1238+
trace_builder.op_note_hash_exists(/*indirect*/ 3, indirect_value_offset, 0, indirect_metadata_offset);
12371239
};
12381240
auto checks = [=](bool indirect, const std::vector<Row>& trace) {
12391241
auto row = std::ranges::find_if(
@@ -1352,7 +1354,8 @@ TEST_F(AvmKernelOutputPositiveTests, kernelL1ToL2MsgExists)
13521354

13531355
auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) {
13541356
trace_builder.op_set(0, static_cast<uint128_t>(value), value_offset, AvmMemoryTag::FF);
1355-
trace_builder.op_l1_to_l2_msg_exists(/*indirect*/ false, value_offset, metadata_offset);
1357+
// TODO(#8287): Leaf index isnt constrained properly so we just set it to 0
1358+
trace_builder.op_l1_to_l2_msg_exists(/*indirect*/ false, value_offset, 0, metadata_offset);
13561359
};
13571360
auto checks = [=]([[maybe_unused]] bool indirect, const std::vector<Row>& trace) {
13581361
auto row = std::ranges::find_if(

barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -650,8 +650,7 @@ std::vector<Row> Execution::gen_trace(std::vector<Instruction> const& instructio
650650
case OpCode::NOTEHASHEXISTS:
651651
trace_builder.op_note_hash_exists(std::get<uint8_t>(inst.operands.at(0)),
652652
std::get<uint32_t>(inst.operands.at(1)),
653-
// TODO: leaf offset exists
654-
// std::get<uint32_t>(inst.operands.at(2))
653+
std::get<uint32_t>(inst.operands.at(2)),
655654
std::get<uint32_t>(inst.operands.at(3)));
656655
break;
657656
case OpCode::EMITNOTEHASH:
@@ -673,8 +672,7 @@ std::vector<Row> Execution::gen_trace(std::vector<Instruction> const& instructio
673672
case OpCode::L1TOL2MSGEXISTS:
674673
trace_builder.op_l1_to_l2_msg_exists(std::get<uint8_t>(inst.operands.at(0)),
675674
std::get<uint32_t>(inst.operands.at(1)),
676-
// TODO: leaf offset exists
677-
// std::get<uint32_t>(inst.operands.at(2))
675+
std::get<uint32_t>(inst.operands.at(2)),
678676
std::get<uint32_t>(inst.operands.at(3)));
679677
break;
680678
case OpCode::GETCONTRACTINSTANCE:

barretenberg/cpp/src/barretenberg/vm/avm/trace/execution_hints.hpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,15 @@ struct ExecutionHints {
105105
{
106106
std::unordered_map<uint32_t, FF> hints_map;
107107
push_vec_into_map(hints_map, storage_value_hints);
108-
push_vec_into_map(hints_map, note_hash_exists_hints);
109108
push_vec_into_map(hints_map, nullifier_exists_hints);
109+
return hints_map;
110+
}
111+
112+
// Leaf index -> exists
113+
std::unordered_map<uint32_t, FF> get_leaf_index_hints() const
114+
{
115+
std::unordered_map<uint32_t, FF> hints_map;
116+
push_vec_into_map(hints_map, note_hash_exists_hints);
110117
push_vec_into_map(hints_map, l1_to_l2_message_exists_hints);
111118
return hints_map;
112119
}
@@ -161,4 +168,4 @@ struct ExecutionHints {
161168
{}
162169
};
163170

164-
} // namespace bb::avm_trace
171+
} // namespace bb::avm_trace

barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.cpp

+20-2
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,16 @@ void AvmKernelTraceBuilder::op_note_hash_exists(uint32_t clk,
173173
{
174174

175175
uint32_t offset = START_NOTE_HASH_EXISTS_WRITE_OFFSET + note_hash_exists_offset;
176-
perform_kernel_output_lookup(offset, side_effect_counter, note_hash, FF(result));
176+
// TODO(#8287)Lookups are heavily underconstrained atm
177+
if (result == 1) {
178+
perform_kernel_output_lookup(offset, side_effect_counter, note_hash, FF(result));
179+
} else {
180+
// if the note_hash does NOT exist, the public inputs already contains the correct output value (i.e. the
181+
// actual value at the index), so we don't try to overwrite the value
182+
std::get<KERNEL_OUTPUTS_SIDE_EFFECT_COUNTER>(public_inputs)[offset] = side_effect_counter;
183+
std::get<KERNEL_OUTPUTS_METADATA>(public_inputs)[offset] = FF(result);
184+
kernel_output_selector_counter[offset]++;
185+
}
177186
note_hash_exists_offset++;
178187

179188
KernelTraceEntry entry = {
@@ -245,7 +254,16 @@ void AvmKernelTraceBuilder::op_l1_to_l2_msg_exists(uint32_t clk,
245254
uint32_t result)
246255
{
247256
uint32_t offset = START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + l1_to_l2_msg_exists_offset;
248-
perform_kernel_output_lookup(offset, side_effect_counter, message, FF(result));
257+
// TODO(#8287)Lookups are heavily underconstrained atm
258+
if (result == 1) {
259+
perform_kernel_output_lookup(offset, side_effect_counter, message, FF(result));
260+
} else {
261+
// if the l1_to_l2_msg_exists is false, the public inputs already contains the correct output value (i.e. the
262+
// actual value at the index), so we don't try to overwrite the value
263+
std::get<KERNEL_OUTPUTS_SIDE_EFFECT_COUNTER>(public_inputs)[offset] = side_effect_counter;
264+
std::get<KERNEL_OUTPUTS_METADATA>(public_inputs)[offset] = FF(result);
265+
kernel_output_selector_counter[offset]++;
266+
}
249267
l1_to_l2_msg_exists_offset++;
250268

251269
KernelTraceEntry entry = {

0 commit comments

Comments
 (0)