-
Notifications
You must be signed in to change notification settings - Fork 304
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(avm2): avm redesign init #10906
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
const auto [contract_address, _] = memory.get(addr); | ||
std::vector<FF> calldata = {}; | ||
|
||
auto nested_context = context_provider.make(std::move(contract_address), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can still choose to make a recursive call to execute
here. Depends on how we set up things but I suspect that will be the case. We will likely still need a context stack though, we need to manage it explicitly so that we have the events we need.
46b4884
to
8e950a6
Compare
161ef17
to
ef247d4
Compare
8e950a6
to
aedad34
Compare
U128, | ||
}; | ||
|
||
using MemoryAddress = std::size_t; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure if this is the right choice to take size_t as it is a platform-specific type. It is the primitive type to address offsets in vector or array, but in our case if we use a map, we might well use uint32_t or explicitly uint64_t (with explicit memory bound checks)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, solved!
ddca9ac
to
1a2daf1
Compare
namespace execution(256); | ||
|
||
pol commit stack_pointer_val; | ||
pol commit stack_pointer_tag; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure if the naming "stack pointer" is fully appropriate compared to sthg not referring stack such as "base address". I understand that it comes from the way the brillig compiler works.
@@ -0,0 +1,16 @@ | |||
namespace alu(256); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is everywhere and a leftover but the "256" is ignored by our toolchain. IIRC this is the trace length in powdr.
Maybe we should decide how to change as this is misleading.
std::pair<AvmAPI::AvmProof, AvmAPI::AvmVerificationKey> AvmAPI::prove(const AvmAPI::ProvingInputs& inputs) | ||
{ | ||
// Simulate. | ||
info("Simulating..."); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess that these tracing occurences at info level will be migrated to verbose level?
@@ -0,0 +1,19 @@ | |||
#pragma once | |||
|
|||
#include "barretenberg/vm2/common/ankerl_map.hpp" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Excellent to have found this lib!
namespace bb::avm2::constraining { | ||
|
||
// This is a version of check circuit that runs on the prover polynomials. | ||
// Better versions could be done, but since this is for debugging only, it is enough for now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you briefly mention the potential improvements?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In principle you may be able to do check circuit over FFs instead of polynomials, and you could maybe do it over the Trace without creating the polynomials. However, tbh, using the polynomials might be the best since it's the closest to "real proving".
2a8f073
to
ea64c93
Compare
// TODO: My dispatch system makes me ahve a uint8_t tag. Rethink. | ||
void Execution::set(ContextInterface& context, MemoryAddress dst_addr, uint8_t tag, MemoryValue value) | ||
{ | ||
context.get_memory().set(dst_addr, std::move(value), static_cast<MemoryTag>(tag)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Following clangd warning:
Std::move of the variable 'value' of the trivially-copyable type 'MemoryValue' (aka 'bb::field<bb::Bn254FrParams>') has no effect; remove std::move()
This warning appears to occurences of std::move over a variable of FF type
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah yeah I have a lot of those, I need to think about it a bit more, but they don't hurt. See https://stackoverflow.com/questions/49241201/is-it-undesirable-to-defensively-apply-stdmove-to-trivially-copyable-types
public: | ||
AvmTraceGenHelper() = default; | ||
|
||
tracegen::TraceContainer generate_trace(simulation::EventsContainer&& events); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Both generate_trace and generate_precomputed_columns can be made static.
Do not change this if you are sure that we will need an object state in AvmTraceGenHelper though.
**Current state** | ||
|
||
- Both lookups and permutations are supported. | ||
- When you lookup into a precomputed table, you need to define a fast way to find the row for a tuple. See bitwise example. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"you need to define a fast way to find the row for a tuple" Is it meant here an implementation of find_in_dst()
if so, it would be nice mention it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done in follow up PR.
// We use an RLC for the key instead of the tuple, to save memory. | ||
// FIXME: reconsider, what if beta is 0. | ||
unordered_flat_map<FF, uint32_t> row_idx; | ||
FF beta = FF::random_element(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a note that challenges derived like this is very likely insecure. We should probably use the get_challenge() which AFAIK is using Fait-Shamir under the hood to derive challenges.
In any case, this should be reviewed/checks by our crypto guys.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Beautiful!
PublicInputs PublicInputs::from(const std::vector<uint8_t>& data) | ||
{ | ||
PublicInputs inputs; | ||
msgpack::unpack(reinterpret_cast<const char*>(data.data()), data.size()).get().convert(inputs); | ||
return inputs; | ||
} | ||
|
||
AvmProvingInputs AvmProvingInputs::from(const std::vector<uint8_t>& data) | ||
{ | ||
AvmProvingInputs inputs; | ||
msgpack::unpack(reinterpret_cast<const char*>(data.data()), data.size()).get().convert(inputs); | ||
return inputs; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
beautiful!
for (size_t r = 0; r < num_rows; ++r) { | ||
Relation::accumulate(lookup_result, polys.get_row(r), params, 1); | ||
} | ||
for (auto r : lookup_result) { | ||
if (!r.is_zero()) { | ||
throw std::runtime_error(format("Lookup ", Relation::NAME, " failed.")); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are these two separate loops? For main relations we do this r.is_zero()
check inside the loop.
using Relation = std::tuple_element_t<i, typename AvmFlavor::MainRelations>; | ||
checks.push_back([&]() { | ||
typename Relation::SumcheckArrayOfValuesOverSubrelations result{}; | ||
|
||
for (size_t r = 0; r < num_rows; ++r) { | ||
Relation::accumulate(result, polys.get_row(r), {}, 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For the bb dummy in the room, what does Relation::accumulate
do? Checks the relation at row r
and accumulates the result?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's take it in a huddle.
{ | ||
using Accumulator = typename std::tuple_element_t<0, ContainerOverSubrelations>; | ||
auto tmp = (new_term.alu_sel_op_add * (FF(1) - new_term.alu_sel_op_add)); | ||
tmp *= scaling_factor; | ||
std::get<0>(evals) += typename Accumulator::View(tmp); | ||
} | ||
{ | ||
using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>; | ||
auto tmp = ((new_term.alu_ia + new_term.alu_ib) - new_term.alu_ic); | ||
tmp *= scaling_factor; | ||
std::get<1>(evals) += typename Accumulator::View(tmp); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can someone finally explain to me what this is is doing, in particular the Accumulator::View()
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nobody knows! (the view thing). I can explain over a huddle a bit of the other things.
template <typename AllEntities> static inline auto inverse_polynomial_is_computed_at_row(const AllEntities& in) | ||
{ | ||
return (in.execution_sel == 1 || in.execution_sel == 1); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's going on here with return (s == 1 || s == 1)
? Just something silly because it's a dummy class?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nope. Basically it says that the inverse polynomial will be computed when either the source or target selectors of the lookup are active. It's the same for real lookups.
// Write the shifted values. | ||
for (const auto& col : TO_BE_SHIFTED_COLUMNS_ARRAY) { | ||
visit_column(col, [&](size_t row, const FF& value) { | ||
if (row == 0) { | ||
return; | ||
} | ||
auto shifted = shift_column(col); | ||
full_row_trace[row - 1].get_column(shifted.value()) = value; | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not super clear to me why we have so much special logic sprinkled around for "shifted" columns. I guess it's because we don't want to shift things too early, so we hold off until later?
auto build_precomputed_columns_jobs(TraceContainer& trace) | ||
{ | ||
return std::array<std::function<void()>, 2>{ | ||
[&]() { | ||
PrecomputedTraceBuilder precomputed_builder; | ||
AVM_TRACK_TIME("tracegen/precomputed/misc", precomputed_builder.process_misc(trace)); | ||
}, | ||
[&]() { | ||
PrecomputedTraceBuilder precomputed_builder; | ||
AVM_TRACK_TIME("tracegen/precomputed/bitwise", precomputed_builder.process_bitwise(trace)); | ||
}, | ||
}; | ||
} | ||
|
||
void execute_jobs(std::span<std::function<void()>> jobs) | ||
{ | ||
parallel_for(jobs.size(), [&](size_t i) { jobs[i](); }); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cool!
[&]() { | ||
ExecutionTraceBuilder exec_builder; | ||
AVM_TRACK_TIME("tracegen/execution", | ||
exec_builder.process(events.execution, events.addressing, trace)); | ||
clear_events(events.execution); | ||
clear_events(events.addressing); | ||
}, | ||
[&]() { | ||
AluTraceBuilder alu_builder; | ||
AVM_TRACK_TIME("tracegen/alu", alu_builder.process(events.alu, trace)); | ||
clear_events(events.alu); | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is saying "process the execution trace and alu trace in parallel. After execution trace is done, free up execution & addressing events. When alu is done, free up alu events?
// Now we can compute lookups and permutations. | ||
{ | ||
auto jobs_interactions = std::array<std::function<void()>, 3>{ | ||
[&]() { | ||
LookupIntoBitwise<lookup_dummy_precomputed_lookup_settings> lookup_execution_bitwise; | ||
lookup_execution_bitwise.process(trace); | ||
}, | ||
[&]() { | ||
LookupIntoDynamicTable<lookup_dummy_dynamic_lookup_settings> lookup_execution_execution; | ||
lookup_execution_execution.process(trace); | ||
}, | ||
[&]() { | ||
PermutationBuilder<perm_dummy_dynamic_permutation_settings> perm_execution_execution; | ||
perm_execution_execution.process(trace); | ||
}, | ||
}; | ||
AVM_TRACK_TIME("tracegen/interactions", execute_jobs(jobs_interactions)); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice job getting this all nicely executed in parallel!
// TODO: for now I only convert app logic requests? | ||
for (const enqueuedCall of this.avmHints.enqueuedCalls.items) { | ||
inputs.enqueuedCalls.push({ | ||
contractAddress: enqueuedCall.contractAddress, | ||
sender: new Fr(0), // FIXME | ||
args: enqueuedCall.calldata.items, | ||
isStatic: false, // FIXME | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TODO: for now I only convert app logic requests?
You're looping over all of the enqueued call hints though
fbd5ddf
to
6aa00c1
Compare
95c1b42
to
6632e7d
Compare
8a5ac30
to
9caf394
Compare
Merge activity
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Followup cleanup: #11186
using Relation = std::tuple_element_t<i, typename AvmFlavor::MainRelations>; | ||
checks.push_back([&]() { | ||
typename Relation::SumcheckArrayOfValuesOverSubrelations result{}; | ||
|
||
for (size_t r = 0; r < num_rows; ++r) { | ||
Relation::accumulate(result, polys.get_row(r), {}, 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's take it in a huddle.
namespace bb::avm2::constraining { | ||
|
||
// This is a version of check circuit that runs on the prover polynomials. | ||
// Better versions could be done, but since this is for debugging only, it is enough for now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In principle you may be able to do check circuit over FFs instead of polynomials, and you could maybe do it over the Trace without creating the polynomials. However, tbh, using the polynomials might be the best since it's the closest to "real proving".
|
||
// The entities that will be used in the flavor. | ||
// clang-format off | ||
#define AVM2_PRECOMPUTED_ENTITIES precomputed_bitwise_input_a, precomputed_bitwise_input_b, precomputed_bitwise_op_id, precomputed_bitwise_output, precomputed_clk, precomputed_first_row, precomputed_sel_bitwise |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is a column in pil that is called first_row
it has a 1 just on the first row. It's needed to anchor other things.
{ | ||
using Accumulator = typename std::tuple_element_t<0, ContainerOverSubrelations>; | ||
auto tmp = (new_term.alu_sel_op_add * (FF(1) - new_term.alu_sel_op_add)); | ||
tmp *= scaling_factor; | ||
std::get<0>(evals) += typename Accumulator::View(tmp); | ||
} | ||
{ | ||
using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>; | ||
auto tmp = ((new_term.alu_ia + new_term.alu_ib) - new_term.alu_ic); | ||
tmp *= scaling_factor; | ||
std::get<1>(evals) += typename Accumulator::View(tmp); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nobody knows! (the view thing). I can explain over a huddle a bit of the other things.
template <typename AllEntities> static inline auto inverse_polynomial_is_computed_at_row(const AllEntities& in) | ||
{ | ||
return (in.execution_sel == 1 || in.execution_sel == 1); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nope. Basically it says that the inverse polynomial will be computed when either the source or target selectors of the lookup are active. It's the same for real lookups.
assert(pos < bytecode_length); | ||
// if (pos >= length) { | ||
// info("Position is out of range. Position: " + std::to_string(pos) + | ||
// " Bytecode length: " + std::to_string(length)); | ||
// return InstructionWithError{ | ||
// .instruction = Instruction(WireOpCode::LAST_WireOpCode_SENTINEL, {}), | ||
// .error = AvmError::INVALID_PROGRAM_COUNTER, | ||
// }; | ||
// } | ||
|
||
const uint8_t opcode_byte = bytecode[pos]; | ||
|
||
// if (!Bytecode::is_valid(WireOpCode_byte)) { | ||
// info("Invalid WireOpCode byte: " + to_hex(WireOpCode_byte) + " at position: " + std::to_string(pos)); | ||
// return InstructionWithError{ | ||
// .instruction = Instruction(WireOpCode::LAST_WireOpCode_SENTINEL, {}), | ||
// .error = AvmError::INVALID_WireOpCode, | ||
// }; | ||
// } | ||
pos++; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yep!
auto operands = ex_event.wire_instruction.operands; | ||
assert(operands.size() <= operand_columns); | ||
operands.resize(operand_columns, simulation::Operand::ff(0)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We probably don't care but I expect it to be a copy. auto operands
hopefully does not magically insert a auto& operands
there.
**Current state** | ||
|
||
- Both lookups and permutations are supported. | ||
- When you lookup into a precomputed table, you need to define a fast way to find the row for a tuple. See bitwise example. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done in follow up PR.
void TraceContainer::visit_column(Column col, const std::function<void(uint32_t, const FF&)>& visitor) const | ||
{ | ||
auto& column_data = (*trace)[static_cast<size_t>(col)]; | ||
std::shared_lock lock(column_data.mutex); | ||
for (const auto& [row, value] : column_data.rows) { | ||
visitor(row, value); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep!
void TraceContainer::clear_column(Column col) | ||
{ | ||
auto& column_data = (*trace)[static_cast<size_t>(col)]; | ||
std::unique_lock lock(column_data.mutex); | ||
column_data.rows.clear(); | ||
column_data.max_row_number = 0; | ||
column_data.row_number_dirty = false; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed.
* master: (329 commits) fix(avm): mac build (#11195) fix: docs rebuild patterns (#11191) chore: refactor Solidity Transcript and improve error handling in sol_honk flow (#11158) chore: move witness computation into class plus some other cleanup (#11140) fix: get_next_power_exponent off by 1 (#11169) chore(avm): vm2 followup cleanup (#11186) fix: underconstrained bug (#11174) refactor: VariableMerkleTree readability improvements (#11165) chore: removing noir bug workaround (#10535) chore(docs): Remove node pages (#11161) git subrepo push --branch=master noir-projects/aztec-nr git_subrepo.sh: Fix parent in .gitrepo file. [skip ci] chore: replace relative paths to noir-protocol-circuits git subrepo push --branch=master barretenberg feat(avm2): avm redesign init (#10906) feat: Sync from noir (#11138) feat: simulator split (#11144) chore: rpc server cleanup & misc fixes (#11145) git subrepo push --branch=master noir-projects/aztec-nr git_subrepo.sh: Fix parent in .gitrepo file. [skip ci] ...
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.70.0</summary> ## [0.70.0](aztec-package-v0.69.1...aztec-package-v0.70.0) (2025-01-15) ### Features * Blob sink in sandbox without extra process ([#11032](#11032)) ([4600f54](4600f54)) * Browser chunking ([#11102](#11102)) ([393e843](393e843)) ### Miscellaneous * Greater stability at 1TPS ([#10981](#10981)) ([1c23662](1c23662)) * Prover db config ([#11126](#11126)) ([9d49393](9d49393)), closes [#10267](#10267) * Rpc server cleanup & misc fixes ([#11145](#11145)) ([8a927eb](8a927eb)) </details> <details><summary>barretenberg.js: 0.70.0</summary> ## [0.70.0](barretenberg.js-v0.69.1...barretenberg.js-v0.70.0) (2025-01-15) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.70.0</summary> ## [0.70.0](aztec-packages-v0.69.1...aztec-packages-v0.70.0) (2025-01-15) ### ⚠ BREAKING CHANGES * disallow calling unconstrained functions outside of `unsafe` blocks and passing unconstrained functions in place of constrained functions (noir-lang/noir#6938) * Disable mocks in `execute` (noir-lang/noir#6869) * require trait primitive functions/calls to have their trait in scope (noir-lang/noir#6901) * Reserve `enum` and `match` keywords (noir-lang/noir#6961) * require trait method calls (`foo.bar()`) to have the trait in scope (imported) (noir-lang/noir#6895) * type-check trait default methods (noir-lang/noir#6645) * update `aes128_encrypt` to return an array (noir-lang/noir#6973) * turn TypeIsMorePrivateThenItem into an error (noir-lang/noir#6953) * turn CannotReexportItemWithLessVisibility into an error (noir-lang/noir#6952) ### Features * `--pedantic-solving` flag (noir-lang/noir#6716) ([3883a0e](3883a0e)) * 7 bit long `note_type_id` ([#10951](#10951)) ([6fc5673](6fc5673)) * **avm2:** Avm redesign init ([#10906](#10906)) ([231f017](231f017)) * Blob sink in sandbox without extra process ([#11032](#11032)) ([4600f54](4600f54)) * Browser chunking ([#11102](#11102)) ([393e843](393e843)) * Build blocks using txs with higher fee first ([#11093](#11093)) ([def7cd7](def7cd7)), closes [#11084](#11084) * **cli:** Add CLI option to filter by contract function name (noir-lang/noir#7018) ([9189120](9189120)) * **comptime:** Implement to_be_bits and to_le_bits in the interpreter (noir-lang/noir#7008) ([9189120](9189120)) * Contract class must be registered before deployment ([#10949](#10949)) ([7176a70](7176a70)) * Dashboard in gcp ([#11201](#11201)) ([2790bd7](2790bd7)) * Disable mocks in `execute` (noir-lang/noir#6869) ([9189120](9189120)) * Disallow calling unconstrained functions outside of `unsafe` blocks and passing unconstrained functions in place of constrained functions (noir-lang/noir#6938) ([9189120](9189120)) * Don't report warnings for dependencies (noir-lang/noir#6926) ([3883a0e](3883a0e)) * Don't simplify SSA instructions when creating them from a string (noir-lang/noir#6948) ([3883a0e](3883a0e)) * Expose getL2ToL1Membership on the pxe ([#11215](#11215)) ([ffd3625](ffd3625)) * Impl Default for U128 (noir-lang/noir#6984) ([3883a0e](3883a0e)) * Inject protocol nullifier conditionally ([#11155](#11155)) ([93ade26](93ade26)) * Kickoff tube circuits at the beginning of proving job ([#11139](#11139)) ([85d389f](85d389f)), closes [#10998](#10998) * Lock on Nargo.toml on several nargo commands (noir-lang/noir#6941) ([3883a0e](3883a0e)) * **lsp:** Use trait method docs for trait impl method docs on hover (noir-lang/noir#7003) ([9189120](9189120)) * Monitor event loop lag ([#11127](#11127)) ([422f125](422f125)) * Permutation argument optimizations ([#10960](#10960)) ([de99603](de99603)) * PXE db contract store ([#10867](#10867)) ([b5d51eb](b5d51eb)) * Require trait function calls (`Foo::bar()`) to have the trait in scope (imported) (noir-lang/noir#6882) ([3883a0e](3883a0e)) * Require trait method calls (`foo.bar()`) to have the trait in scope (imported) (noir-lang/noir#6895) ([3883a0e](3883a0e)) * Require trait primitive functions/calls to have their trait in scope (noir-lang/noir#6901) ([9189120](9189120)) * Simulator split ([#11144](#11144)) ([9b99126](9b99126)) * Single tx block root rollup ([#11096](#11096)) ([bcc0168](bcc0168)) * SSA globals in monomorphization and SSA gen (noir-lang/noir#6985) ([9189120](9189120)) * **ssa:** Immediately simplify away RefCount instructions in ACIR functions (noir-lang/noir#6893) ([3883a0e](3883a0e)) * **test:** Enable the test fuzzer for Wasm (noir-lang/noir#6835) ([3883a0e](3883a0e)) * Track nodejs runtime metrics ([#11160](#11160)) ([1d24fab](1d24fab)) * Turn CannotReexportItemWithLessVisibility into an error (noir-lang/noir#6952) ([3883a0e](3883a0e)) * Turn TypeIsMorePrivateThenItem into an error (noir-lang/noir#6953) ([3883a0e](3883a0e)) * Type-check trait default methods (noir-lang/noir#6645) ([3883a0e](3883a0e)) * Unchecked math operations in SSA (noir-lang/noir#7011) ([9189120](9189120)) * Update `aes128_encrypt` to return an array (noir-lang/noir#6973) ([3883a0e](3883a0e)) * Use tail public inputs as transaction hash ([#11100](#11100)) ([34be2c3](34be2c3)) * Validator deadline for reexecution ([#11050](#11050)) ([1aa34e7](1aa34e7)), closes [#10959](#10959) ### Bug Fixes * Added start/stop guards to running promise and serial queue ([#11120](#11120)) ([23e642f](23e642f)) * Allow multiple trait impls for the same trait as long as one is in scope (noir-lang/noir#6987) ([9189120](9189120)) * **avm:** AVM circuit fixes related calldata, returndata and call_ptr ([#11207](#11207)) ([2f05dc0](2f05dc0)) * **avm:** Mac build ([#11195](#11195)) ([c4f4452](c4f4452)) * **avm:** Mac build (retry) ([#11197](#11197)) ([0a4b763](0a4b763)) * Aztec-spartan config var ([#11137](#11137)) ([acbfad4](acbfad4)) * Blob fees & l1-publisher logging ([#11029](#11029)) ([c2c0bc6](c2c0bc6)) * **bootstrap:** Don't download bad cache if unstaged changes ([#11198](#11198)) ([2bd895b](2bd895b)) * **boxes:** Fix attempt 2 ([#11175](#11175)) ([e87b11a](e87b11a)) * Bump inotify limits on tester ([#11217](#11217)) ([60bdf1d](60bdf1d)) * Do not emit range check for multiplication by bool (noir-lang/noir#6983) ([3883a0e](3883a0e)) * Do not panic on indices which are not valid `u32`s (noir-lang/noir#6976) ([3883a0e](3883a0e)) * Docs rebuild patterns ([#11191](#11191)) ([1999990](1999990)) * Don't fail parsing macro if there are parser warnings (noir-lang/noir#6969) ([3883a0e](3883a0e)) * Don't retransmit txs upon node restart ([#11123](#11123)) ([39535c9](39535c9)) * Duplicate env vars ([#11166](#11166)) ([2507b6f](2507b6f)) * Error on missing function parameters (noir-lang/noir#6967) ([3883a0e](3883a0e)) * Get_next_power_exponent off by 1 ([#11169](#11169)) ([80ec19e](80ec19e)) * Let static_assert fail with the provided message (noir-lang/noir#7005) ([9189120](9189120)) * Max_note_len computation ([#10438](#10438)) ([099c17b](099c17b)) * Non-determinism from under constrained checks (noir-lang/noir#6945) ([3883a0e](3883a0e)) * Prover node aborts execution at epoch end ([#11111](#11111)) ([2a77616](2a77616)), closes [#10802](#10802) * Prover node does not err upon an empty epoch ([#11204](#11204)) ([2c3ab84](2c3ab84)) * Remove arch tag in sandbox images ([#11233](#11233)) ([80a872d](80a872d)) * Remove max lookup table size constant (for now) ([#11095](#11095)) ([7e9e268](7e9e268)) * Reproduce and fix bytecode blowup (noir-lang/noir#6972) ([9189120](9189120)) * Require generic trait impls to be in scope to call them (noir-lang/noir#6913) ([9189120](9189120)) * Restore upload_logs script in use by acir bench ([2d88497](2d88497)) * Return trait impl method as FuncId if there's only one (noir-lang/noir#6989) ([9189120](9189120)) * Revert "chore: use L1 Tx Utils" ([#11167](#11167)) ([f4e5c79](f4e5c79)) * Sequencer times out L1 tx at end of L2 slot ([#11112](#11112)) ([1b88a34](1b88a34)) * Show output of `test_program_is_idempotent` on failure (noir-lang/noir#6942) ([3883a0e](3883a0e)) * Start RC at 1 again (noir-lang/noir#6958) ([3883a0e](3883a0e)) * Underconstrained bug ([#11174](#11174)) ([0b3088b](0b3088b)) * Update fs max user instances for k8s ([#11220](#11220)) ([b42da6d](b42da6d)) * Use absolute path for docker bind in e2e-test ([f2885ec](f2885ec)) * Wrong module to lookup trait when using crate or super (noir-lang/noir#6974) ([3883a0e](3883a0e)) ### Miscellaneous * Add cli option to specify withdrawer address in the add-l1-validator … ([#11199](#11199)) ([107f175](107f175)) * Add memsuspend to parallel in bootstrap ([#11040](#11040)) ([c78cb82](c78cb82)) * Add more Field use info (noir-lang/noir#7019) ([9189120](9189120)) * Add reproduction case for bignum test failure (noir-lang/noir#6464) ([3883a0e](3883a0e)) * Add short circuit in ssa-gen for known if conditions (noir-lang/noir#7007) ([9189120](9189120)) * Also print test output to stdout in CI (noir-lang/noir#6930) ([3883a0e](3883a0e)) * **avm:** Fix mac build ([#11147](#11147)) ([1775e53](1775e53)) * **avm:** Improve column stats ([#11135](#11135)) ([535a14c](535a14c)) * **avm:** Re-enable bb-prover tests in CI, change some to check-circuit-only, enable multi-enqueued call tests ([#11180](#11180)) ([3092212](3092212)) * **avm:** Vm2 followup cleanup ([#11186](#11186)) ([6de4013](6de4013)) * Block building benchmark via github-action-benchmark ([#11202](#11202)) ([c107b6b](c107b6b)), closes [#11154](#11154) * Bump `noir-gates-diff` (noir-lang/noir#6943) ([3883a0e](3883a0e)) * Bump `noir-gates-diff` (noir-lang/noir#6944) ([3883a0e](3883a0e)) * Bump `noir-gates-diff` (noir-lang/noir#6949) ([3883a0e](3883a0e)) * Bump arkworks to version `0.5.0` (noir-lang/noir#6871) ([3883a0e](3883a0e)) * **ci:** Easier to use mac ci ([#11194](#11194)) ([9ab4cee](9ab4cee)) * **ci:** Ensure that prover.toml files in protocol circuits are in sync ([#11141](#11141)) ([db769bd](db769bd)) * **ci:** Fail properly in `external-repo-checks` (noir-lang/noir#6988) ([9189120](9189120)) * **ci:** Try fix boxes-test ([#11162](#11162)) ([a66349f](a66349f)) * Clarity fix in docs (noir-lang/noir#7016) ([9189120](9189120)) * Delete a bunch of dead code from `noirc_evaluator` (noir-lang/noir#6939) ([3883a0e](3883a0e)) * Delete docs for versions which aren't used (noir-lang/noir#7020) ([9189120](9189120)) * Disable reorg test ([#11176](#11176)) ([78bec44](78bec44)) * Disallow inserting ACIR-only instructions into brillig functions (noir-lang/noir#7017) ([9189120](9189120)) * **docs:** Backport 1.0.0-beta.0 doc fixes (noir-lang/noir#7014) ([9189120](9189120)) * **docs:** Edit Aztec.nr Guide section ([#10866](#10866)) ([4051ba8](4051ba8)) * **docs:** Remove node pages ([#11161](#11161)) ([e494f6b](e494f6b)) * **docs:** Update tx concepts page ([#10947](#10947)) ([d9d9798](d9d9798)) * Document aztec-nargo in readme ([#11173](#11173)) ([927eabf](927eabf)) * Greater stability at 1TPS ([#10981](#10981)) ([1c23662](1c23662)) * Jest reporters for CI ([#11125](#11125)) ([90cd9d2](90cd9d2)) * Log number of instructions executed for call in AVM. Misc fix. ([#11110](#11110)) ([44e01f4](44e01f4)) * Mark `aztec-nr` as expected to compile (noir-lang/noir#7015) ([9189120](9189120)) * Mark casts as able to be deduplicated (noir-lang/noir#6996) ([9189120](9189120)) * Missed test account retrieval simplification in one spot ([#11172](#11172)) ([b72234e](b72234e)) * Move comment as part of [#6945](#6945) (noir-lang/noir#6959) ([3883a0e](3883a0e)) * Move witness computation into class plus some other cleanup ([#11140](#11140)) ([d41e9ab](d41e9ab)) * Nuke unused `getSiblingPath` oracle ([#11090](#11090)) ([36b640a](36b640a)) * Nuking mental model of "packing into a hash" ([#11200](#11200)) ([e1ebcc0](e1ebcc0)) * Only resolved globals monomorphization (noir-lang/noir#7006) ([9189120](9189120)) * Prover db config ([#11126](#11126)) ([9d49393](9d49393)), closes [#10267](#10267) * Redo typo PR by longxiangqiao ([#11109](#11109)) ([b8ef30e](b8ef30e)) * Refactor `get_tx_effects_hash_input_helper` ([#11213](#11213)) ([5becb99](5becb99)) * Refactor Solidity Transcript and improve error handling in sol_honk flow ([#11158](#11158)) ([58fdf87](58fdf87)) * Remove explicit collector address ([#11227](#11227)) ([dfb0db5](dfb0db5)) * Remove resolve_is_unconstrained pass (noir-lang/noir#7004) ([9189120](9189120)) * Removing noir bug workaround ([#10535](#10535)) ([8be882f](8be882f)) * Replace relative paths to noir-protocol-circuits ([d8619fa](d8619fa)) * Replace relative paths to noir-protocol-circuits ([70cad1c](70cad1c)) * Replace relative paths to noir-protocol-circuits ([e962534](e962534)) * Replace relative paths to noir-protocol-circuits ([ba5a589](ba5a589)) * Replace relative paths to noir-protocol-circuits ([b7c3fa2](b7c3fa2)) * Replace relative paths to noir-protocol-circuits ([32840c6](32840c6)) * Require safety doc comment for unsafe instead of `//[@safety](https://github.com/safety)` (noir-lang/noir#6992) ([9189120](9189120)) * Reserve `enum` and `match` keywords (noir-lang/noir#6961) ([9189120](9189120)) * Rpc server cleanup & misc fixes ([#11145](#11145)) ([8a927eb](8a927eb)) * Sanity checking of proving job IDs ([#11134](#11134)) ([61c3e95](61c3e95)) * Save kind smoke test logs as artifact ([#11212](#11212)) ([1389a5b](1389a5b)) * Separate unconstrained functions during monomorphization (noir-lang/noir#6894) ([3883a0e](3883a0e)) * Simplify a couple of enum variants (noir-lang/noir#7025) ([9189120](9189120)) * Simplify boolean in a mul of a mul (noir-lang/noir#6951) ([3883a0e](3883a0e)) * SmallSubgroupIPA tests ([#11106](#11106)) ([f034e2a](f034e2a)) * **spartan:** Making the spartan script install jq ([#11231](#11231)) ([7e628cc](7e628cc)) * Test:e2e defaults to no-docker ([#10966](#10966)) ([15e0d71](15e0d71)) * Turn on averaging for protocol circuits metrics in CI (noir-lang/noir#6999) ([9189120](9189120)) * Update aztec-spartan.sh script ([#11228](#11228)) ([52b3a87](52b3a87)) * Use DFG in SSA printer (noir-lang/noir#6986) ([9189120](9189120)) * Use L1 Tx Utils ([#10759](#10759)) ([ccf28f5](ccf28f5)), closes [#10464](#10464) * Use logs for benchmarking (noir-lang/noir#6911) ([3883a0e](3883a0e)) * VariableMerkleTree readability improvements ([#11165](#11165)) ([010d1b0](010d1b0)) * Wait for ethereum in each pod ([#11238](#11238)) ([9c08e00](9c08e00)) ### Documentation * Enable protocol specs for docs in dev mode ([#11219](#11219)) ([10c8afe](10c8afe)) </details> <details><summary>barretenberg: 0.70.0</summary> ## [0.70.0](barretenberg-v0.69.1...barretenberg-v0.70.0) (2025-01-15) ### Features * **avm2:** Avm redesign init ([#10906](#10906)) ([231f017](231f017)) * Permutation argument optimizations ([#10960](#10960)) ([de99603](de99603)) * Use tail public inputs as transaction hash ([#11100](#11100)) ([34be2c3](34be2c3)) ### Bug Fixes * **avm:** AVM circuit fixes related calldata, returndata and call_ptr ([#11207](#11207)) ([2f05dc0](2f05dc0)) * **avm:** Mac build ([#11195](#11195)) ([c4f4452](c4f4452)) * **avm:** Mac build (retry) ([#11197](#11197)) ([0a4b763](0a4b763)) * **bootstrap:** Don't download bad cache if unstaged changes ([#11198](#11198)) ([2bd895b](2bd895b)) * Remove max lookup table size constant (for now) ([#11095](#11095)) ([7e9e268](7e9e268)) ### Miscellaneous * **avm:** Fix mac build ([#11147](#11147)) ([1775e53](1775e53)) * **avm:** Improve column stats ([#11135](#11135)) ([535a14c](535a14c)) * **avm:** Re-enable bb-prover tests in CI, change some to check-circuit-only, enable multi-enqueued call tests ([#11180](#11180)) ([3092212](3092212)) * **avm:** Vm2 followup cleanup ([#11186](#11186)) ([6de4013](6de4013)) * **docs:** Update tx concepts page ([#10947](#10947)) ([d9d9798](d9d9798)) * Move witness computation into class plus some other cleanup ([#11140](#11140)) ([d41e9ab](d41e9ab)) * Redo typo PR by longxiangqiao ([#11109](#11109)) ([b8ef30e](b8ef30e)) * Refactor Solidity Transcript and improve error handling in sol_honk flow ([#11158](#11158)) ([58fdf87](58fdf87)) * SmallSubgroupIPA tests ([#11106](#11106)) ([f034e2a](f034e2a)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.70.0</summary> ## [0.70.0](AztecProtocol/aztec-packages@aztec-package-v0.69.1...aztec-package-v0.70.0) (2025-01-15) ### Features * Blob sink in sandbox without extra process ([#11032](AztecProtocol/aztec-packages#11032)) ([4600f54](AztecProtocol/aztec-packages@4600f54)) * Browser chunking ([#11102](AztecProtocol/aztec-packages#11102)) ([393e843](AztecProtocol/aztec-packages@393e843)) ### Miscellaneous * Greater stability at 1TPS ([#10981](AztecProtocol/aztec-packages#10981)) ([1c23662](AztecProtocol/aztec-packages@1c23662)) * Prover db config ([#11126](AztecProtocol/aztec-packages#11126)) ([9d49393](AztecProtocol/aztec-packages@9d49393)), closes [#10267](AztecProtocol/aztec-packages#10267) * Rpc server cleanup & misc fixes ([#11145](AztecProtocol/aztec-packages#11145)) ([8a927eb](AztecProtocol/aztec-packages@8a927eb)) </details> <details><summary>barretenberg.js: 0.70.0</summary> ## [0.70.0](AztecProtocol/aztec-packages@barretenberg.js-v0.69.1...barretenberg.js-v0.70.0) (2025-01-15) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.70.0</summary> ## [0.70.0](AztecProtocol/aztec-packages@aztec-packages-v0.69.1...aztec-packages-v0.70.0) (2025-01-15) ### ⚠ BREAKING CHANGES * disallow calling unconstrained functions outside of `unsafe` blocks and passing unconstrained functions in place of constrained functions (noir-lang/noir#6938) * Disable mocks in `execute` (noir-lang/noir#6869) * require trait primitive functions/calls to have their trait in scope (noir-lang/noir#6901) * Reserve `enum` and `match` keywords (noir-lang/noir#6961) * require trait method calls (`foo.bar()`) to have the trait in scope (imported) (noir-lang/noir#6895) * type-check trait default methods (noir-lang/noir#6645) * update `aes128_encrypt` to return an array (noir-lang/noir#6973) * turn TypeIsMorePrivateThenItem into an error (noir-lang/noir#6953) * turn CannotReexportItemWithLessVisibility into an error (noir-lang/noir#6952) ### Features * `--pedantic-solving` flag (noir-lang/noir#6716) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * 7 bit long `note_type_id` ([#10951](AztecProtocol/aztec-packages#10951)) ([6fc5673](AztecProtocol/aztec-packages@6fc5673)) * **avm2:** Avm redesign init ([#10906](AztecProtocol/aztec-packages#10906)) ([231f017](AztecProtocol/aztec-packages@231f017)) * Blob sink in sandbox without extra process ([#11032](AztecProtocol/aztec-packages#11032)) ([4600f54](AztecProtocol/aztec-packages@4600f54)) * Browser chunking ([#11102](AztecProtocol/aztec-packages#11102)) ([393e843](AztecProtocol/aztec-packages@393e843)) * Build blocks using txs with higher fee first ([#11093](AztecProtocol/aztec-packages#11093)) ([def7cd7](AztecProtocol/aztec-packages@def7cd7)), closes [#11084](AztecProtocol/aztec-packages#11084) * **cli:** Add CLI option to filter by contract function name (noir-lang/noir#7018) ([9189120](AztecProtocol/aztec-packages@9189120)) * **comptime:** Implement to_be_bits and to_le_bits in the interpreter (noir-lang/noir#7008) ([9189120](AztecProtocol/aztec-packages@9189120)) * Contract class must be registered before deployment ([#10949](AztecProtocol/aztec-packages#10949)) ([7176a70](AztecProtocol/aztec-packages@7176a70)) * Dashboard in gcp ([#11201](AztecProtocol/aztec-packages#11201)) ([2790bd7](AztecProtocol/aztec-packages@2790bd7)) * Disable mocks in `execute` (noir-lang/noir#6869) ([9189120](AztecProtocol/aztec-packages@9189120)) * Disallow calling unconstrained functions outside of `unsafe` blocks and passing unconstrained functions in place of constrained functions (noir-lang/noir#6938) ([9189120](AztecProtocol/aztec-packages@9189120)) * Don't report warnings for dependencies (noir-lang/noir#6926) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Don't simplify SSA instructions when creating them from a string (noir-lang/noir#6948) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Expose getL2ToL1Membership on the pxe ([#11215](AztecProtocol/aztec-packages#11215)) ([ffd3625](AztecProtocol/aztec-packages@ffd3625)) * Impl Default for U128 (noir-lang/noir#6984) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Inject protocol nullifier conditionally ([#11155](AztecProtocol/aztec-packages#11155)) ([93ade26](AztecProtocol/aztec-packages@93ade26)) * Kickoff tube circuits at the beginning of proving job ([#11139](AztecProtocol/aztec-packages#11139)) ([85d389f](AztecProtocol/aztec-packages@85d389f)), closes [#10998](AztecProtocol/aztec-packages#10998) * Lock on Nargo.toml on several nargo commands (noir-lang/noir#6941) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * **lsp:** Use trait method docs for trait impl method docs on hover (noir-lang/noir#7003) ([9189120](AztecProtocol/aztec-packages@9189120)) * Monitor event loop lag ([#11127](AztecProtocol/aztec-packages#11127)) ([422f125](AztecProtocol/aztec-packages@422f125)) * Permutation argument optimizations ([#10960](AztecProtocol/aztec-packages#10960)) ([de99603](AztecProtocol/aztec-packages@de99603)) * PXE db contract store ([#10867](AztecProtocol/aztec-packages#10867)) ([b5d51eb](AztecProtocol/aztec-packages@b5d51eb)) * Require trait function calls (`Foo::bar()`) to have the trait in scope (imported) (noir-lang/noir#6882) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Require trait method calls (`foo.bar()`) to have the trait in scope (imported) (noir-lang/noir#6895) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Require trait primitive functions/calls to have their trait in scope (noir-lang/noir#6901) ([9189120](AztecProtocol/aztec-packages@9189120)) * Simulator split ([#11144](AztecProtocol/aztec-packages#11144)) ([9b99126](AztecProtocol/aztec-packages@9b99126)) * Single tx block root rollup ([#11096](AztecProtocol/aztec-packages#11096)) ([bcc0168](AztecProtocol/aztec-packages@bcc0168)) * SSA globals in monomorphization and SSA gen (noir-lang/noir#6985) ([9189120](AztecProtocol/aztec-packages@9189120)) * **ssa:** Immediately simplify away RefCount instructions in ACIR functions (noir-lang/noir#6893) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * **test:** Enable the test fuzzer for Wasm (noir-lang/noir#6835) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Track nodejs runtime metrics ([#11160](AztecProtocol/aztec-packages#11160)) ([1d24fab](AztecProtocol/aztec-packages@1d24fab)) * Turn CannotReexportItemWithLessVisibility into an error (noir-lang/noir#6952) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Turn TypeIsMorePrivateThenItem into an error (noir-lang/noir#6953) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Type-check trait default methods (noir-lang/noir#6645) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Unchecked math operations in SSA (noir-lang/noir#7011) ([9189120](AztecProtocol/aztec-packages@9189120)) * Update `aes128_encrypt` to return an array (noir-lang/noir#6973) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Use tail public inputs as transaction hash ([#11100](AztecProtocol/aztec-packages#11100)) ([34be2c3](AztecProtocol/aztec-packages@34be2c3)) * Validator deadline for reexecution ([#11050](AztecProtocol/aztec-packages#11050)) ([1aa34e7](AztecProtocol/aztec-packages@1aa34e7)), closes [#10959](AztecProtocol/aztec-packages#10959) ### Bug Fixes * Added start/stop guards to running promise and serial queue ([#11120](AztecProtocol/aztec-packages#11120)) ([23e642f](AztecProtocol/aztec-packages@23e642f)) * Allow multiple trait impls for the same trait as long as one is in scope (noir-lang/noir#6987) ([9189120](AztecProtocol/aztec-packages@9189120)) * **avm:** AVM circuit fixes related calldata, returndata and call_ptr ([#11207](AztecProtocol/aztec-packages#11207)) ([2f05dc0](AztecProtocol/aztec-packages@2f05dc0)) * **avm:** Mac build ([#11195](AztecProtocol/aztec-packages#11195)) ([c4f4452](AztecProtocol/aztec-packages@c4f4452)) * **avm:** Mac build (retry) ([#11197](AztecProtocol/aztec-packages#11197)) ([0a4b763](AztecProtocol/aztec-packages@0a4b763)) * Aztec-spartan config var ([#11137](AztecProtocol/aztec-packages#11137)) ([acbfad4](AztecProtocol/aztec-packages@acbfad4)) * Blob fees & l1-publisher logging ([#11029](AztecProtocol/aztec-packages#11029)) ([c2c0bc6](AztecProtocol/aztec-packages@c2c0bc6)) * **bootstrap:** Don't download bad cache if unstaged changes ([#11198](AztecProtocol/aztec-packages#11198)) ([2bd895b](AztecProtocol/aztec-packages@2bd895b)) * **boxes:** Fix attempt 2 ([#11175](AztecProtocol/aztec-packages#11175)) ([e87b11a](AztecProtocol/aztec-packages@e87b11a)) * Bump inotify limits on tester ([#11217](AztecProtocol/aztec-packages#11217)) ([60bdf1d](AztecProtocol/aztec-packages@60bdf1d)) * Do not emit range check for multiplication by bool (noir-lang/noir#6983) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Do not panic on indices which are not valid `u32`s (noir-lang/noir#6976) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Docs rebuild patterns ([#11191](AztecProtocol/aztec-packages#11191)) ([1999990](AztecProtocol/aztec-packages@1999990)) * Don't fail parsing macro if there are parser warnings (noir-lang/noir#6969) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Don't retransmit txs upon node restart ([#11123](AztecProtocol/aztec-packages#11123)) ([39535c9](AztecProtocol/aztec-packages@39535c9)) * Duplicate env vars ([#11166](AztecProtocol/aztec-packages#11166)) ([2507b6f](AztecProtocol/aztec-packages@2507b6f)) * Error on missing function parameters (noir-lang/noir#6967) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Get_next_power_exponent off by 1 ([#11169](AztecProtocol/aztec-packages#11169)) ([80ec19e](AztecProtocol/aztec-packages@80ec19e)) * Let static_assert fail with the provided message (noir-lang/noir#7005) ([9189120](AztecProtocol/aztec-packages@9189120)) * Max_note_len computation ([#10438](AztecProtocol/aztec-packages#10438)) ([099c17b](AztecProtocol/aztec-packages@099c17b)) * Non-determinism from under constrained checks (noir-lang/noir#6945) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Prover node aborts execution at epoch end ([#11111](AztecProtocol/aztec-packages#11111)) ([2a77616](AztecProtocol/aztec-packages@2a77616)), closes [#10802](AztecProtocol/aztec-packages#10802) * Prover node does not err upon an empty epoch ([#11204](AztecProtocol/aztec-packages#11204)) ([2c3ab84](AztecProtocol/aztec-packages@2c3ab84)) * Remove arch tag in sandbox images ([#11233](AztecProtocol/aztec-packages#11233)) ([80a872d](AztecProtocol/aztec-packages@80a872d)) * Remove max lookup table size constant (for now) ([#11095](AztecProtocol/aztec-packages#11095)) ([7e9e268](AztecProtocol/aztec-packages@7e9e268)) * Reproduce and fix bytecode blowup (noir-lang/noir#6972) ([9189120](AztecProtocol/aztec-packages@9189120)) * Require generic trait impls to be in scope to call them (noir-lang/noir#6913) ([9189120](AztecProtocol/aztec-packages@9189120)) * Restore upload_logs script in use by acir bench ([2d88497](AztecProtocol/aztec-packages@2d88497)) * Return trait impl method as FuncId if there's only one (noir-lang/noir#6989) ([9189120](AztecProtocol/aztec-packages@9189120)) * Revert "chore: use L1 Tx Utils" ([#11167](AztecProtocol/aztec-packages#11167)) ([f4e5c79](AztecProtocol/aztec-packages@f4e5c79)) * Sequencer times out L1 tx at end of L2 slot ([#11112](AztecProtocol/aztec-packages#11112)) ([1b88a34](AztecProtocol/aztec-packages@1b88a34)) * Show output of `test_program_is_idempotent` on failure (noir-lang/noir#6942) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Start RC at 1 again (noir-lang/noir#6958) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Underconstrained bug ([#11174](AztecProtocol/aztec-packages#11174)) ([0b3088b](AztecProtocol/aztec-packages@0b3088b)) * Update fs max user instances for k8s ([#11220](AztecProtocol/aztec-packages#11220)) ([b42da6d](AztecProtocol/aztec-packages@b42da6d)) * Use absolute path for docker bind in e2e-test ([f2885ec](AztecProtocol/aztec-packages@f2885ec)) * Wrong module to lookup trait when using crate or super (noir-lang/noir#6974) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) ### Miscellaneous * Add cli option to specify withdrawer address in the add-l1-validator … ([#11199](AztecProtocol/aztec-packages#11199)) ([107f175](AztecProtocol/aztec-packages@107f175)) * Add memsuspend to parallel in bootstrap ([#11040](AztecProtocol/aztec-packages#11040)) ([c78cb82](AztecProtocol/aztec-packages@c78cb82)) * Add more Field use info (noir-lang/noir#7019) ([9189120](AztecProtocol/aztec-packages@9189120)) * Add reproduction case for bignum test failure (noir-lang/noir#6464) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Add short circuit in ssa-gen for known if conditions (noir-lang/noir#7007) ([9189120](AztecProtocol/aztec-packages@9189120)) * Also print test output to stdout in CI (noir-lang/noir#6930) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * **avm:** Fix mac build ([#11147](AztecProtocol/aztec-packages#11147)) ([1775e53](AztecProtocol/aztec-packages@1775e53)) * **avm:** Improve column stats ([#11135](AztecProtocol/aztec-packages#11135)) ([535a14c](AztecProtocol/aztec-packages@535a14c)) * **avm:** Re-enable bb-prover tests in CI, change some to check-circuit-only, enable multi-enqueued call tests ([#11180](AztecProtocol/aztec-packages#11180)) ([3092212](AztecProtocol/aztec-packages@3092212)) * **avm:** Vm2 followup cleanup ([#11186](AztecProtocol/aztec-packages#11186)) ([6de4013](AztecProtocol/aztec-packages@6de4013)) * Block building benchmark via github-action-benchmark ([#11202](AztecProtocol/aztec-packages#11202)) ([c107b6b](AztecProtocol/aztec-packages@c107b6b)), closes [#11154](AztecProtocol/aztec-packages#11154) * Bump `noir-gates-diff` (noir-lang/noir#6943) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Bump `noir-gates-diff` (noir-lang/noir#6944) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Bump `noir-gates-diff` (noir-lang/noir#6949) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Bump arkworks to version `0.5.0` (noir-lang/noir#6871) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * **ci:** Easier to use mac ci ([#11194](AztecProtocol/aztec-packages#11194)) ([9ab4cee](AztecProtocol/aztec-packages@9ab4cee)) * **ci:** Ensure that prover.toml files in protocol circuits are in sync ([#11141](AztecProtocol/aztec-packages#11141)) ([db769bd](AztecProtocol/aztec-packages@db769bd)) * **ci:** Fail properly in `external-repo-checks` (noir-lang/noir#6988) ([9189120](AztecProtocol/aztec-packages@9189120)) * **ci:** Try fix boxes-test ([#11162](AztecProtocol/aztec-packages#11162)) ([a66349f](AztecProtocol/aztec-packages@a66349f)) * Clarity fix in docs (noir-lang/noir#7016) ([9189120](AztecProtocol/aztec-packages@9189120)) * Delete a bunch of dead code from `noirc_evaluator` (noir-lang/noir#6939) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Delete docs for versions which aren't used (noir-lang/noir#7020) ([9189120](AztecProtocol/aztec-packages@9189120)) * Disable reorg test ([#11176](AztecProtocol/aztec-packages#11176)) ([78bec44](AztecProtocol/aztec-packages@78bec44)) * Disallow inserting ACIR-only instructions into brillig functions (noir-lang/noir#7017) ([9189120](AztecProtocol/aztec-packages@9189120)) * **docs:** Backport 1.0.0-beta.0 doc fixes (noir-lang/noir#7014) ([9189120](AztecProtocol/aztec-packages@9189120)) * **docs:** Edit Aztec.nr Guide section ([#10866](AztecProtocol/aztec-packages#10866)) ([4051ba8](AztecProtocol/aztec-packages@4051ba8)) * **docs:** Remove node pages ([#11161](AztecProtocol/aztec-packages#11161)) ([e494f6b](AztecProtocol/aztec-packages@e494f6b)) * **docs:** Update tx concepts page ([#10947](AztecProtocol/aztec-packages#10947)) ([d9d9798](AztecProtocol/aztec-packages@d9d9798)) * Document aztec-nargo in readme ([#11173](AztecProtocol/aztec-packages#11173)) ([927eabf](AztecProtocol/aztec-packages@927eabf)) * Greater stability at 1TPS ([#10981](AztecProtocol/aztec-packages#10981)) ([1c23662](AztecProtocol/aztec-packages@1c23662)) * Jest reporters for CI ([#11125](AztecProtocol/aztec-packages#11125)) ([90cd9d2](AztecProtocol/aztec-packages@90cd9d2)) * Log number of instructions executed for call in AVM. Misc fix. ([#11110](AztecProtocol/aztec-packages#11110)) ([44e01f4](AztecProtocol/aztec-packages@44e01f4)) * Mark `aztec-nr` as expected to compile (noir-lang/noir#7015) ([9189120](AztecProtocol/aztec-packages@9189120)) * Mark casts as able to be deduplicated (noir-lang/noir#6996) ([9189120](AztecProtocol/aztec-packages@9189120)) * Missed test account retrieval simplification in one spot ([#11172](AztecProtocol/aztec-packages#11172)) ([b72234e](AztecProtocol/aztec-packages@b72234e)) * Move comment as part of [#6945](AztecProtocol/aztec-packages#6945) (noir-lang/noir#6959) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Move witness computation into class plus some other cleanup ([#11140](AztecProtocol/aztec-packages#11140)) ([d41e9ab](AztecProtocol/aztec-packages@d41e9ab)) * Nuke unused `getSiblingPath` oracle ([#11090](AztecProtocol/aztec-packages#11090)) ([36b640a](AztecProtocol/aztec-packages@36b640a)) * Nuking mental model of "packing into a hash" ([#11200](AztecProtocol/aztec-packages#11200)) ([e1ebcc0](AztecProtocol/aztec-packages@e1ebcc0)) * Only resolved globals monomorphization (noir-lang/noir#7006) ([9189120](AztecProtocol/aztec-packages@9189120)) * Prover db config ([#11126](AztecProtocol/aztec-packages#11126)) ([9d49393](AztecProtocol/aztec-packages@9d49393)), closes [#10267](AztecProtocol/aztec-packages#10267) * Redo typo PR by longxiangqiao ([#11109](AztecProtocol/aztec-packages#11109)) ([b8ef30e](AztecProtocol/aztec-packages@b8ef30e)) * Refactor `get_tx_effects_hash_input_helper` ([#11213](AztecProtocol/aztec-packages#11213)) ([5becb99](AztecProtocol/aztec-packages@5becb99)) * Refactor Solidity Transcript and improve error handling in sol_honk flow ([#11158](AztecProtocol/aztec-packages#11158)) ([58fdf87](AztecProtocol/aztec-packages@58fdf87)) * Remove explicit collector address ([#11227](AztecProtocol/aztec-packages#11227)) ([dfb0db5](AztecProtocol/aztec-packages@dfb0db5)) * Remove resolve_is_unconstrained pass (noir-lang/noir#7004) ([9189120](AztecProtocol/aztec-packages@9189120)) * Removing noir bug workaround ([#10535](AztecProtocol/aztec-packages#10535)) ([8be882f](AztecProtocol/aztec-packages@8be882f)) * Replace relative paths to noir-protocol-circuits ([d8619fa](AztecProtocol/aztec-packages@d8619fa)) * Replace relative paths to noir-protocol-circuits ([70cad1c](AztecProtocol/aztec-packages@70cad1c)) * Replace relative paths to noir-protocol-circuits ([e962534](AztecProtocol/aztec-packages@e962534)) * Replace relative paths to noir-protocol-circuits ([ba5a589](AztecProtocol/aztec-packages@ba5a589)) * Replace relative paths to noir-protocol-circuits ([b7c3fa2](AztecProtocol/aztec-packages@b7c3fa2)) * Replace relative paths to noir-protocol-circuits ([32840c6](AztecProtocol/aztec-packages@32840c6)) * Require safety doc comment for unsafe instead of `//[@safety](https://github.com/safety)` (noir-lang/noir#6992) ([9189120](AztecProtocol/aztec-packages@9189120)) * Reserve `enum` and `match` keywords (noir-lang/noir#6961) ([9189120](AztecProtocol/aztec-packages@9189120)) * Rpc server cleanup & misc fixes ([#11145](AztecProtocol/aztec-packages#11145)) ([8a927eb](AztecProtocol/aztec-packages@8a927eb)) * Sanity checking of proving job IDs ([#11134](AztecProtocol/aztec-packages#11134)) ([61c3e95](AztecProtocol/aztec-packages@61c3e95)) * Save kind smoke test logs as artifact ([#11212](AztecProtocol/aztec-packages#11212)) ([1389a5b](AztecProtocol/aztec-packages@1389a5b)) * Separate unconstrained functions during monomorphization (noir-lang/noir#6894) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * Simplify a couple of enum variants (noir-lang/noir#7025) ([9189120](AztecProtocol/aztec-packages@9189120)) * Simplify boolean in a mul of a mul (noir-lang/noir#6951) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * SmallSubgroupIPA tests ([#11106](AztecProtocol/aztec-packages#11106)) ([f034e2a](AztecProtocol/aztec-packages@f034e2a)) * **spartan:** Making the spartan script install jq ([#11231](AztecProtocol/aztec-packages#11231)) ([7e628cc](AztecProtocol/aztec-packages@7e628cc)) * Test:e2e defaults to no-docker ([#10966](AztecProtocol/aztec-packages#10966)) ([15e0d71](AztecProtocol/aztec-packages@15e0d71)) * Turn on averaging for protocol circuits metrics in CI (noir-lang/noir#6999) ([9189120](AztecProtocol/aztec-packages@9189120)) * Update aztec-spartan.sh script ([#11228](AztecProtocol/aztec-packages#11228)) ([52b3a87](AztecProtocol/aztec-packages@52b3a87)) * Use DFG in SSA printer (noir-lang/noir#6986) ([9189120](AztecProtocol/aztec-packages@9189120)) * Use L1 Tx Utils ([#10759](AztecProtocol/aztec-packages#10759)) ([ccf28f5](AztecProtocol/aztec-packages@ccf28f5)), closes [#10464](AztecProtocol/aztec-packages#10464) * Use logs for benchmarking (noir-lang/noir#6911) ([3883a0e](AztecProtocol/aztec-packages@3883a0e)) * VariableMerkleTree readability improvements ([#11165](AztecProtocol/aztec-packages#11165)) ([010d1b0](AztecProtocol/aztec-packages@010d1b0)) * Wait for ethereum in each pod ([#11238](AztecProtocol/aztec-packages#11238)) ([9c08e00](AztecProtocol/aztec-packages@9c08e00)) ### Documentation * Enable protocol specs for docs in dev mode ([#11219](AztecProtocol/aztec-packages#11219)) ([10c8afe](AztecProtocol/aztec-packages@10c8afe)) </details> <details><summary>barretenberg: 0.70.0</summary> ## [0.70.0](AztecProtocol/aztec-packages@barretenberg-v0.69.1...barretenberg-v0.70.0) (2025-01-15) ### Features * **avm2:** Avm redesign init ([#10906](AztecProtocol/aztec-packages#10906)) ([231f017](AztecProtocol/aztec-packages@231f017)) * Permutation argument optimizations ([#10960](AztecProtocol/aztec-packages#10960)) ([de99603](AztecProtocol/aztec-packages@de99603)) * Use tail public inputs as transaction hash ([#11100](AztecProtocol/aztec-packages#11100)) ([34be2c3](AztecProtocol/aztec-packages@34be2c3)) ### Bug Fixes * **avm:** AVM circuit fixes related calldata, returndata and call_ptr ([#11207](AztecProtocol/aztec-packages#11207)) ([2f05dc0](AztecProtocol/aztec-packages@2f05dc0)) * **avm:** Mac build ([#11195](AztecProtocol/aztec-packages#11195)) ([c4f4452](AztecProtocol/aztec-packages@c4f4452)) * **avm:** Mac build (retry) ([#11197](AztecProtocol/aztec-packages#11197)) ([0a4b763](AztecProtocol/aztec-packages@0a4b763)) * **bootstrap:** Don't download bad cache if unstaged changes ([#11198](AztecProtocol/aztec-packages#11198)) ([2bd895b](AztecProtocol/aztec-packages@2bd895b)) * Remove max lookup table size constant (for now) ([#11095](AztecProtocol/aztec-packages#11095)) ([7e9e268](AztecProtocol/aztec-packages@7e9e268)) ### Miscellaneous * **avm:** Fix mac build ([#11147](AztecProtocol/aztec-packages#11147)) ([1775e53](AztecProtocol/aztec-packages@1775e53)) * **avm:** Improve column stats ([#11135](AztecProtocol/aztec-packages#11135)) ([535a14c](AztecProtocol/aztec-packages@535a14c)) * **avm:** Re-enable bb-prover tests in CI, change some to check-circuit-only, enable multi-enqueued call tests ([#11180](AztecProtocol/aztec-packages#11180)) ([3092212](AztecProtocol/aztec-packages@3092212)) * **avm:** Vm2 followup cleanup ([#11186](AztecProtocol/aztec-packages#11186)) ([6de4013](AztecProtocol/aztec-packages@6de4013)) * **docs:** Update tx concepts page ([#10947](AztecProtocol/aztec-packages#10947)) ([d9d9798](AztecProtocol/aztec-packages@d9d9798)) * Move witness computation into class plus some other cleanup ([#11140](AztecProtocol/aztec-packages#11140)) ([d41e9ab](AztecProtocol/aztec-packages@d41e9ab)) * Redo typo PR by longxiangqiao ([#11109](AztecProtocol/aztec-packages#11109)) ([b8ef30e](AztecProtocol/aztec-packages@b8ef30e)) * Refactor Solidity Transcript and improve error handling in sol_honk flow ([#11158](AztecProtocol/aztec-packages#11158)) ([58fdf87](AztecProtocol/aztec-packages@58fdf87)) * SmallSubgroupIPA tests ([#11106](AztecProtocol/aztec-packages#11106)) ([f034e2a](AztecProtocol/aztec-packages@f034e2a)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
This is a redesign of the witgen/proving part of the AVM. There's still a lot of work to be done, but I have to merge at some point to let others contribute :). Most of the content is PoC, not supposed to be real.
We'll eventually have a doc explaining everything, but for now, some highlights:
Architecture
The proving process is now divided in 3 parts:
Possible future standalone simulation
Hints and DB accesses: The simulation/witgen process has no knowledge of hints (so far). We define a DB interface which the simulation process uses. This DB is then "seeded" with hints. This means that in the future it should be possible to switch the DB to a real DB and things should "just work™️".
I think we should try to follow this philosophy as much as possible and not rely on TS hints that we can compute ourselves.
Configurability: Other aspects of simulation are configurable. E.g., we can configure a fast simulation only variant that does no event generation and no bytecode hashing whereas for full proving you would do that (incurring in at least 25ms for a single bytecode hashing).
Philosophy
Dependency injection is used everywhere (without framework). You'll see references stored in classes and may not like it, but it's actually working well. See https://www.youtube.com/watch?v=kCYo2gJ3Y38 as well.
There are lots of interfaces for mocking. Blame C++ 🤷 .
I'm making it a priority to have the right separation of concerns and engineering practices. There's zero tolerance on hacks. If we need a hack, we trigger a refactor.
Testing
Whereas before our tests required setting up everything and basically do full proving or check circuit, now everything can be tested separately. We use a mockist approach (common in C++). Our old tests would take ~0.5s each, now they take microseconds. Simulation, tracegen, and constraining can be tested separate from each other. In particular, you can create tests for constraints at the relation or subrelation level.
Lookups/permutations
Not really supported yet. But you don't need to keep counts for lookups.
TS/C++ communication
AVM inputs are now (de)serialized with messagepack.
(**) It does require lookup/permutation settings.