From 3d5e13e357644a632a290adf9f3e7793e1b1982e Mon Sep 17 00:00:00 2001 From: jeanmon Date: Thu, 20 Jun 2024 14:26:58 +0000 Subject: [PATCH] 7080: several bug fixes --- barretenberg/cpp/pil/avm/mem.pil | 2 +- .../src/barretenberg/relations/generated/avm/mem.hpp | 4 ++-- .../src/barretenberg/vm/avm_trace/avm_mem_trace.cpp | 2 +- .../cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp | 11 ++++++++--- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/barretenberg/cpp/pil/avm/mem.pil b/barretenberg/cpp/pil/avm/mem.pil index a5aa3080f03..bb09f507cfc 100644 --- a/barretenberg/cpp/pil/avm/mem.pil +++ b/barretenberg/cpp/pil/avm/mem.pil @@ -172,7 +172,7 @@ namespace mem(256); // The new column one_min_inv is set to 1 - (r_in_tag - tag)^(-1) when tag_err == 1 // but must be set to 0 when tags are matching and tag_err = 0 #[MEM_IN_TAG_CONSISTENCY_1] - (1 - skip_check_tag) * (1 - rw) * ((r_in_tag - tag) * (1 - one_min_inv) - tag_err) = 0; + tag * (1 - skip_check_tag) * (1 - rw) * ((r_in_tag - tag) * (1 - one_min_inv) - tag_err) = 0; #[MEM_IN_TAG_CONSISTENCY_2] (1 - tag_err) * one_min_inv = 0; diff --git a/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp b/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp index 8b1c6dcfe57..92d46edca39 100644 --- a/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/generated/avm/mem.hpp @@ -112,7 +112,7 @@ template class memImpl { static constexpr std::array SUBRELATION_PARTIAL_LENGTHS{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 4, 3, 4, 3, 4, 3, 3, - 3, 4, 4, 4, 4, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 4, 4, 4, 4, 4, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, }; template @@ -364,7 +364,7 @@ template class memImpl { { Avm_DECLARE_VIEWS(27); - auto tmp = (((-mem_skip_check_tag + FF(1)) * (-mem_rw + FF(1))) * + auto tmp = (((mem_tag * (-mem_skip_check_tag + FF(1))) * (-mem_rw + FF(1))) * (((mem_r_in_tag - mem_tag) * (-mem_one_min_inv + FF(1))) - mem_tag_err)); tmp *= scaling_factor; std::get<27>(evals) += tmp; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_mem_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_mem_trace.cpp index 8ee4f02595f..e46fb93d670 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_mem_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_mem_trace.cpp @@ -150,7 +150,7 @@ bool AvmMemTraceBuilder::load_from_mem_trace(uint8_t space_id, AvmMemoryTag m_tag = mem_space.contains(addr) ? mem_space.at(addr).tag : AvmMemoryTag::U0; if (m_tag == AvmMemoryTag::U0 || m_tag == r_in_tag) { - insert_in_mem_trace(space_id, clk, sub_clk, addr, val, r_in_tag, r_in_tag, w_in_tag, false); + insert_in_mem_trace(space_id, clk, sub_clk, addr, val, m_tag, r_in_tag, w_in_tag, false); return true; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp index c97c71eccb2..49503c35afb 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm_trace/avm_trace.cpp @@ -2678,7 +2678,7 @@ void AvmTraceBuilder::op_call([[maybe_unused]] uint8_t indirect, .main_mem_addr_a = read_ind_gas_offset.val, .main_mem_addr_b = addr_offset, .main_mem_addr_c = read_ind_args_offset.val, - .main_pc = FF(pc++), + .main_pc = FF(pc), .main_r_in_tag = FF(static_cast(AvmMemoryTag::FF)), .main_sel_mem_op_a = FF(1), .main_sel_mem_op_b = FF(1), @@ -2725,10 +2725,13 @@ void AvmTraceBuilder::op_call([[maybe_unused]] uint8_t indirect, AvmMemoryTag::FF, internal_return_ptr, hint.return_data); - clk++; + + // The last call to write_slice_to_memory() might have written more than one row. + clk = static_cast(main_trace.size()) + 1; write_slice_to_memory( call_ptr, clk, success_offset, AvmMemoryTag::U0, AvmMemoryTag::U8, internal_return_ptr, { hint.success }); external_call_counter++; + pc++; } void AvmTraceBuilder::op_get_contract_instance(uint8_t indirect, uint32_t address_offset, uint32_t dst_offset) @@ -3685,7 +3688,7 @@ void AvmTraceBuilder::op_variable_msm(uint8_t indirect, .main_internal_return_ptr = FF(internal_return_ptr), .main_mem_addr_a = FF(direct_points_offset), .main_mem_addr_b = FF(direct_scalars_offset), - .main_pc = FF(pc++), + .main_pc = FF(pc), .main_r_in_tag = FF(static_cast(AvmMemoryTag::FF)), .main_sel_mem_op_a = FF(1), .main_sel_mem_op_b = FF(1), @@ -3882,6 +3885,8 @@ void AvmTraceBuilder::op_variable_msm(uint8_t indirect, .main_sel_mem_op_a = FF(1), .main_w_in_tag = FF(static_cast(AvmMemoryTag::U8)), }); + + pc++; } // Finalise Lookup Counts //