Skip to content

feat: no longer recompute vk's in CIVC proofs #13590

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

Merged
merged 166 commits into from
Apr 17, 2025
Merged

Conversation

ludamad
Copy link
Collaborator

@ludamad ludamad commented Apr 16, 2025

Apologies for the big PR. Lots of the stuff in here ended up being chicken and egg with wanting to do refactoring to make this process smoother/help debug tricky issues, and wanting to see that those refactorings actually make sense by the end.

We no longer compute VKs on the fly in CIVC. This saves ~25% of computation. This is done throughout by consolidating IVC inputs into a single ivc-inputs.msgpack structure which supports passing bytecode, witness & vk information to the bb backend. Now attaches a name for each function, as well.

Major features:

  • IVC inputs passed thru native and wasm are always passed a single file/buffer. This is encoded using msgpack and capture bytecode, witness, vk, and function name (which is now printed, but only properly passed by native) For native, the bincode and witnesses are gzipped, for WASM they are uncompressed. For actions such as gates or write_vk, the IVC inputs are used with same structure but witness and vk data can be blank.

This has a bunch of implications, such as having to break away from the rigid API base class in bb cli (which overall doesn't feel worthwhile anyway as CIVC is fundamentally different than UH), having to string vk info along, etc.

Other features:

Debuggability:

  • Correct README.md instructions on WASM stack traces (give up on getting line numbers working :/)
  • clangd now properly shows all errors in a C++ file you're browsing, instead of only showing you the first error.

Cleanup

  • small cleanup to acir tests, but still not testing new ivc flow there. Lightest weight test is ivc-integration in yarn-project
  • Get rid of --input_type in bb cli for CIVC. now implied always to be what was previously runtime_stack. Simplifies usages, other modes were unused.
  • more ignored linting in the clangd file. Maybe one day we can enforce the remaining as errors.
  • Clean up msgpack usage. Msgpack headers were leaking everywhere and it is a chunky library.
  • Consolidate with using msgpackr as our only typescript messagepack library

Benches

  • use wasmtime helper in bb bootstrap. deduplicate code in bench. bench now honours NATIVE_PRESET, and if you do
export NATIVE_PRESET=op-count-time
./bootstrap.sh
./bootstrap.sh bench

you will get op count timings for our native ivc benches.

@@ -128,23 +128,23 @@
"isAsync": false
},
{
"functionName": "blake2s",
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm not sure why this file isnt git-ignored tbh

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably out of scope of this already overscoped PR tho

@@ -89,6 +88,7 @@
"html-webpack-plugin": "^5.5.1",
"idb-keyval": "^6.2.1",
"jest": "^29.5.0",
"msgpackr": "^1.11.2",
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

consolidation of msgpack libs used

functionName,
});
}
return new Encoder({ useRecords: false }).pack(steps);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

useRecords: false just means 'dont do fancy key name compression' - needed by our C++ msgpack lib

@@ -1,182 +0,0 @@
import { TextEncoder } from 'util';
import { Buffer128, Buffer32, Fq, Fr, Point } from '../types/index.js';
import { Barretenberg } from './index.js';
Copy link
Collaborator Author

@ludamad ludamad Apr 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No longer exposed via bindings. I had trouble generating auto-bindings for it and it is unused logic

@@ -12,26 +12,6 @@ import {
OutputType,
} from '../serialize/index.js';
import { Fr, Fq, Point, Buffer32, Buffer128, Ptr } from '../types/index.js';
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

everyone was editing the file that said DO NOT EDIT. I have finally regenerated it. Luckily mostly people kept to the pattern

@@ -13,6 +13,7 @@ const typeMap: { [key: string]: string } = {
'fq::vec_in_buf': 'Fq[]',
'fq::vec_out_buf': 'Fq[]',
'const uint8_t *': 'Uint8Array',
'uint8_vec_vec_in_buf': 'Uint8Array[]',
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ended up unused, but meh

@@ -9,6 +9,7 @@ export function generateTypeScriptCode(filename: string) {

let output = `// WARNING: FILE CODE GENERATED BY BINDGEN UTILITY. DO NOT EDIT!
/* eslint-disable @typescript-eslint/no-unused-vars */
import { BarretenbergWasmMain } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
import { BarretenbergWasmWorker, BarretenbergWasm } from '../barretenberg_wasm/index.js';
import { BufferDeserializer, NumberDeserializer, VectorDeserializer, BoolDeserializer, StringDeserializer, serializeBufferable, OutputType } from '../serialize/index.js';
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capture a manual edit that had been made

const verified = await api.acirProveAndVerifyAztecClient(bytecode, witness);
debug(`Verification ${verified ? 'successful' : 'failed'}`);
return verified;
} finally {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just removing CIVC from the CLI as it would have been maintenance effort

@@ -12,6 +12,7 @@
"declarationMap": true,
"importHelpers": true,
"resolveJsonModule": true,
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

msgpackr didnt type check, but doesnt affect much. this makes compilation faster, too


pinned_civc_inputs_url="https://aztec-ci-artifacts.s3.us-east-2.amazonaws.com/protocol/bb-civc-inputs-v2.tar.gz"
pinned_civc_inputs_url="https://aztec-ci-artifacts.s3.us-east-2.amazonaws.com/protocol/bb-civc-inputs-v3.tar.gz"
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bump as this stuff is now formatted as a single file ivc-inputs.msgpack

@@ -30,11 +31,11 @@ if [ "${ISOLATE:-0}" -eq 1 ]; then
-e NODE_OPTIONS="--no-warnings --experimental-vm-modules --loader @swc-node/register" \
-e LOG_LEVEL \
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

allows filtering the exact test by passing args along

Copy link
Contributor

@ledwards2225 ledwards2225 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks great. Lots of good cleanup in here. As always, I think its worth striving for more incremental PRs but I can see how the scope of this one could have naturally evolved as you went.

It seems like this raises questions about the CIVC API, the extent to which it should adhere to something modeled after UH or whether it should exist at all.

@@ -215,9 +215,6 @@ function run_benchmark {

# TODO(https://github.com/AztecProtocol/barretenberg/issues/1254): More complete testing, including failure tests
function bench {
# TODO(https://github.com/AztecProtocol/barretenberg/issues/1265) fix acir benchmarking
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this issue be closed? I see it doesn't have a description

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. it was the old acir benchmarks. they're probably not coming back at this point

@@ -300,7 +298,7 @@ case "$cmd" in
# Takes an optional master commit to download them from. Otherwise, downloads from latest master commit.
git fetch origin master

build the benchmarked benches
# build the benchmarked benches
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

huh.. how was this working

Copy link
Collaborator Author

@ludamad ludamad Apr 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it calls 'build' simply :) its valid BASH

@@ -53,21 +51,11 @@ class API {
const std::filesystem::path& bytecode_path,
const std::filesystem::path& witness_path) = 0;

virtual void prove(const Flags& flags,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flag - This is surprising

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok I see, just not defining it as part of the interface anymore. I suppose once we get rid of plonk there's very little value to defining this interface at all if UH and CIVC dont both adhere to something

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

plonk doesnt even adhere to this

@@ -237,6 +227,12 @@ int parse_and_run_cli_command(int argc, char* argv[])
/* ->check(CLI::ExistingFile) OR stdin indicator - */;
};

const auto add_ivc_inputs_path_options = [&](CLI::App* subcommand) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not directly related to this change but this does make me think: what exactly is the value in having a CLI for CIVC? To the extent there is one, it seems to be for internal testing only.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's valuable right now for power users who can use aztec.js with a native bb and get speedups. It's probably not something we should get rid of until we have another native way to expose this functionality

@@ -698,8 +694,9 @@ int parse_and_run_cli_command(int argc, char* argv[])
print_subcommand_options(deepest);
}

// prob this construction is too much
const auto execute_command = [&](API& api) {
// TODO(AD): it is inflexible that CIVC shares an API command (prove) with UH this way. The base API class is a
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think Cody had an overly optimistic view of the extent to which it made sense to uniformize across "proving systems" here. At the end of the day it will just be UH and CIVC and as I alluded to, I'm not sure I see any real benefit to a CIVC CLI. Much less one that adheres to the interface of UH

acir_format::circuit_buf_to_acir_format(bytecode_buf, /*honk_recursion=*/0);
acir_format::WitnessVector witness = acir_format::witness_buf_to_witness_data(witness_buf);

folding_stack.push_back({ constraints, witness });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think you introduced this pattern but this is probably an amount of copying that's worth avoiding. These things can be pretty large

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I posted about this in noir-lang trying to resolve the root cause - bincode expecting fresh uint8_t vectors

@@ -42,6 +45,7 @@ export abstract class BBWASMPrivateKernelProver extends BBPrivateKernelProver {
}

public override async computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string): Promise<number> {
// Note we do not pass the vk to the backend. This is unneeded for gate counts.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eventually we should just store gate counts along with the VK and such a command will not be needed

@ludamad ludamad added this pull request to the merge queue Apr 17, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to no response for status checks Apr 17, 2025
@ludamad ludamad added this pull request to the merge queue Apr 17, 2025
@ludamad ludamad removed this pull request from the merge queue due to a manual request Apr 17, 2025
@ludamad ludamad merged commit 66a61ba into master Apr 17, 2025
7 checks passed
@ludamad ludamad deleted the ad/ivc-verifier-breakdown branch April 17, 2025 20:39
github-merge-queue bot pushed a commit that referenced this pull request Apr 24, 2025
🤖 I have created a new Aztec Packages release
---


##
[0.86.0](v0.85.0...v0.86.0)
(2025-04-24)


### ⚠ BREAKING CHANGES

* Use combined p2p and http prover coordination
([#13760](#13760))
* use single extended viem client
([#13715](#13715))
* remove slice read from CALL
([#13729](#13729))

### Features

* `#[allow(dead_code)]` (noir-lang/noir#8066)
([366d980](366d980))
* add aztec-up amm test w/ proving & sponsoredfpc
([#13209](#13209))
([f54c8a1](f54c8a1))
* Add Rollup to registry and produce blocks
([#13556](#13556))
([9ed10d3](9ed10d3))
* adding devnet tests
([#12808](#12808))
([7687a1f](7687a1f))
* audit tracking tooling
([#13639](#13639))
([e50d8e0](e50d8e0))
* **avm:** fast entity indexing without macros
([#13737](#13737))
([5c8a993](5c8a993))
* **avm:** quick n dirty memory trace
([#13659](#13659))
([062c6a9](062c6a9))
* **avm:** support col arrays and add keccak cols
([#13711](#13711))
([9c4345a](9c4345a))
* **avm:** tagged value type in C++
([#13540](#13540))
([b30b5b3](b30b5b3))
* avoid unnecessary zero check in brillig overflow check
(noir-lang/noir#8109)
([366d980](366d980))
* **contracts:** static + snapshotted validator set
([#13046](#13046))
([90033f2](90033f2))
* enable mempool limiter on devnet
([#13722](#13722))
([36fb0a1](36fb0a1))
* exec opcode spec table
([#13594](#13594))
([d4d503a](d4d503a))
* **experimental:** Implement separate `-Zownership` analysis for
ownership pass (noir-lang/noir#7861)
([366d980](366d980))
* expose mempool limit through helm chart
([#13616](#13616))
([822e8d9](822e8d9))
* Garaga UltraStarknet[Zk]Honk flavours
([#11489](#11489))
([6bc34a1](6bc34a1))
* IPA claim as public component
([#13429](#13429))
([1ce3c43](1ce3c43))
* no longer recompute vk's in CIVC proofs
([#13590](#13590))
([66a61ba](66a61ba))
* **p2p:** add private peers
([#12585](#12585))
([4264c8c](4264c8c))
* **p2p:** optional P2P_BROADCAST_PORT
([#13525](#13525))
([f709fab](f709fab))
* Port callstack resolution from aztec to noirjs
(noir-lang/noir#7642)
([366d980](366d980))
* Refactor IPA claim handling in acir format to support them for AVM
([#13547](#13547))
([df73c05](df73c05))
* remove slice read from CALL
([#13729](#13729))
([7e7eb85](7e7eb85))
* replace field divisions by constants with multiplication by inv…
(noir-lang/noir#8053)
([366d980](366d980))
* report world state size on disk
([#13706](#13706))
([0dd8a7e](0dd8a7e))
* skip inverting field elements with values +-1 in ACVM
(noir-lang/noir#8049)
([44c1347](44c1347))
* SMT Verificaiton Module: Data Structures
([#13658](#13658))
([2de3bc5](2de3bc5))
* SMT verification module updates
([#13551](#13551))
([f02123d](f02123d))
* ssa fuzzer (noir-lang/noir#7641)
([366d980](366d980))
* Tighter timing on ACVM
([#13743](#13743))
([45cd39b](45cd39b))
* track rewards and slots
([#13546](#13546))
([489c6cf](489c6cf))
* Use combined p2p and http prover coordination
([#13760](#13760))
([4d04e62](4d04e62))
* VK generation test for HonkRecursionConstraint
([#13637](#13637))
([71e81ce](71e81ce))


### Bug Fixes

* **acir:** Check whether opcodes were laid down for non-equality check
before fetching payload locations
(noir-lang/noir#8133)
([366d980](366d980))
* add proper handling for `u128` in comptime interpreter
(noir-lang/noir#8079)
([366d980](366d980))
* Add version to gossipsub protocol
([#13567](#13567))
([8ce4829](8ce4829))
* allow keywords in function names in SSA parser
(noir-lang/noir#8063)
([44c1347](44c1347))
* Allow more slack in AST calibration for CI
(noir-lang/noir#8076)
([366d980](366d980))
* amm bot
([#13553](#13553))
([6b93832](6b93832)),
closes
[#13544](#13544)
* **avm:** cpp addressing
([#13652](#13652))
([9d941b6](9d941b6))
* blob sink waits for reg address when needed
([#13628](#13628))
([486a42a](486a42a))
* **brillig:** SliceRefCount reads from the appropriate pointer
(noir-lang/noir#8148)
([366d980](366d980))
* Check against multiple aws profiles in build instance credentails
([#13421](#13421))
([71a408a](71a408a))
* dependency cycles in public simulator - part 0 (sim -&gt; context)
([#13678](#13678))
([e00089f](e00089f))
* dependency cycles in public simulator - part 1 (errors/revertReason)
([#13679](#13679))
([c75e365](c75e365))
* dependency cycles in public simulator part 2 (serializable bytecode)
([#13680](#13680))
([5d3e24c](5d3e24c))
* discv5 test failure
([#13653](#13653))
([58c143b](58c143b))
* **docs:** Make viewing (outdated) protocol specs work locally
([#13534](#13534))
([694537d](694537d))
* Increase timeout for p2p integration test
([#13720](#13720))
([c244b2e](c244b2e))
* mac bb --version
([#13690](#13690))
([9f8b64f](9f8b64f))
* make translator use ultra rather than eccvm ops
([#13489](#13489))
([53c070d](53c070d))
* more worker fixes
([#13759](#13759))
([080485a](080485a))
* move helm lint to build
([#13532](#13532))
([7768ff8](7768ff8))
* native ivc benches not publishing
([#13665](#13665))
([7ab712d](7ab712d))
* no exports of simulator should depend on jest-mock-extended
([#13694](#13694))
([65a9f33](65a9f33))
* only clear trailing zeros on logs
([#13727](#13727))
([e392d7c](e392d7c))
* **p2p:** better batch connection sampling
([#13674](#13674))
([9c1d9f1](9c1d9f1))
* **p2p:** reqresp types + batch request tx pool filtering
([#13666](#13666))
([8e2a3c9](8e2a3c9))
* **parser:** error on missing let semicolon in trait (and others)
(noir-lang/noir#8101)
([366d980](366d980))
* pass along coinbase
([#13560](#13560))
([593f810](593f810)),
closes
[#13643](#13643)
* prover-node start
([#13627](#13627))
([5d87f7a](5d87f7a))
* quote numbers
([#13654](#13654))
([f0d1ec1](f0d1ec1))
* remove all txs from a failed epoch
([#13771](#13771))
([abc4623](abc4623))
* remove insecure dummy round derivation from sumcheck and shplemini
([#13488](#13488))
([9a3bb46](9a3bb46))
* replace values in data_bus too
(noir-lang/noir#8086)
([366d980](366d980))
* retry deploy npm
([#13691](#13691))
([76cab3f](76cab3f))
* run yarn
([#13713](#13713))
([0e51259](0e51259))
* squash nightly foundry warning
([#13640](#13640))
([e21f9fd](e21f9fd))
* SSA pass print filter to include the count
(noir-lang/noir#8074)
([366d980](366d980))
* **ssa:** Do not inline simple recursive functions
(noir-lang/noir#8127)
([366d980](366d980))
* **ssa:** Do not unroll loop with break
(noir-lang/noir#8090)
([366d980](366d980))
* **ssa:** Do not use inner else condition when collapsing IfElse based
upon the then condition (noir-lang/noir#8040)
([44c1347](44c1347))
* **ssa:** fix possibility to `Field % Field` operaions in Brillig from
SSA (noir-lang/noir#8105)
([366d980](366d980))
* **ssa:** Loop range with u1
(noir-lang/noir#8131)
([366d980](366d980))
* update metric name to avoid conflicts
([#13629](#13629))
([70c58ab](70c58ab)),
closes
[#13626](#13626)
* wasm memory benchmark
([#13573](#13573))
([9a73c4a](9a73c4a))
* wrapping mul support for u128
(noir-lang/noir#7941)
([366d980](366d980))


### Miscellaneous

* Accept optional test path for emitting integration tests
(noir-lang/noir#8062)
([366d980](366d980))
* Add `GITHUB_TOKEN` to more workflow steps
(noir-lang/noir#8046)
([44c1347](44c1347))
* add a benchmark for opcodes which need a batchable inversion
(noir-lang/noir#8110)
([366d980](366d980))
* add hacky faster bootstrap for bb-centric e2e flow
([#13587](#13587))
([498d433](498d433))
* address some visibility warnings
([#13728](#13728))
([35dec90](35dec90))
* **avm:** less codegen for lookups
([#13741](#13741))
([ec468d9](ec468d9))
* **avm:** move interaction jobs to trace builders
([#13621](#13621))
([caac1c9](caac1c9))
* bb.js non-inlined web workers
([#13736](#13736))
([0e604a1](0e604a1))
* **bb:** debugging helpers
([#13584](#13584))
([0ebb29e](0ebb29e))
* **bb:** Make goblin a proper source module
([#13580](#13580))
([3048a14](3048a14))
* bespoke export for client native prover / PXE server store lazy load
([#13783](#13783))
([640dd08](640dd08))
* Blob and archiver syncing improvements
([#13542](#13542))
([629aa2a](629aa2a)),
closes
[#13530](#13530)
* blob archive client factory code
([#13648](#13648))
([7b16791](7b16791))
* bug list
([#13773](#13773))
([c6d4fb8](c6d4fb8))
* bump axois
([#13453](#13453))
([1c20920](1c20920))
* bump bb to 0.84.0 (noir-lang/noir#8047)
([44c1347](44c1347))
* bump bignum timeout (noir-lang/noir#8080)
([366d980](366d980))
* bump external pinned commits
(noir-lang/noir#8045)
([44c1347](44c1347))
* **ci:** run non dependent bootstrap build steps in parallel
([#13454](#13454))
([b17e18d](b17e18d))
* cleanup aztec up amm test
([#13754](#13754))
([3d92afe](3d92afe))
* Cleanup scripts in package jsons in yarn-project
([#13527](#13527))
([a296945](a296945))
* **contracts:** core/staking -&gt; core/slashing
([#13748](#13748))
([5d93a0e](5d93a0e))
* create module for array handling in acirgen
(noir-lang/noir#8119)
([366d980](366d980))
* dashboards use ${data_source} variable
([#13613](#13613))
([45533d9](45533d9))
* delete honk_recursion for building ACIR
([#13664](#13664))
([ac95729](ac95729))
* delete Ultra Vanilla CIVC
([#13669](#13669))
([ae578a2](ae578a2))
* delete zeromorph
([#13667](#13667))
([c8acae0](c8acae0))
* Disable blobscan by default
([#13742](#13742))
([c55088e](c55088e))
* **docs:** `aztec` and `aztec-wallet` cli reference updates
([#13692](#13692))
([d11d154](d11d154))
* **docs:** add 0.85.0 docs
([#13578](#13578))
([cf07358](cf07358))
* **docs:** add AND/XOR bug to bug list
([#13784](#13784))
([797ae6d](797ae6d))
* **docs:** Add architecture docs
(noir-lang/noir#7992)
([366d980](366d980))
* **docs:** adding redirects for node guide
([#13768](#13768))
([e96e5bf](e96e5bf))
* **docs:** bugfix + deploy on master
([#13717](#13717))
([010975a](010975a))
* **docs:** Fix some stuff on fees, rm confusing storage example
([#13501](#13501))
([c00b20b](c00b20b))
* **docs:** Sequencer and Prover Guide
([#13433](#13433))
([55b9a2b](55b9a2b))
* **docs:** update bb commands to match 0.84.0
(noir-lang/noir#8050)
([366d980](366d980))
* **docs:** Update docs bootrap to to include release
([#13615](#13615))
([2154d5e](2154d5e))
* don't use `set_from_value_id` in `remove_if_else`
(noir-lang/noir#8070)
([366d980](366d980))
* don't use `set_value_from_id` in `as_slice_length`
(noir-lang/noir#8039)
([44c1347](44c1347))
* don't use `set_value_from_id` in `constant_folding`
(noir-lang/noir#8091)
([366d980](366d980))
* don't use `set_value_from_id` in `loop_invariant`
(noir-lang/noir#8085)
([366d980](366d980))
* don't use `set_value_from_id` in `remove_bit_shifts`
(noir-lang/noir#8071)
([366d980](366d980))
* don't use `set_value_from_id` in `simplify_cfg`
(noir-lang/noir#8072)
([366d980](366d980))
* **experimental:** Function::simple_optimization for SSA optimizations
(noir-lang/noir#8102)
([366d980](366d980))
* Fetch rollup address using version as index
([#13620](#13620))
([60e73f9](60e73f9))
* Fix license files
([#13695](#13695))
([9931fb8](9931fb8))
* mempool limit
([#13735](#13735))
([def1287](def1287))
* mint block rewards for 200K blocks at deployment
([#13537](#13537))
([1a3a326](1a3a326))
* move check_circuit functionality from `TranslatorCircuitBuilder` into
a `TranslatorCircuitChecker`
([#13761](#13761))
([e4e7fca](e4e7fca))
* noir test flake addition
([#13663](#13663))
([c302fdd](c302fdd))
* **noir-contracts:** update readme
([#13563](#13563))
([42dfbbf](42dfbbf))
* **optimization:** Enable experimental ownership clone scheme by
default (noir-lang/noir#8097)
([366d980](366d980))
* parse nop in SSA parser (noir-lang/noir#8141)
([366d980](366d980))
* ping luke instead of cody on bb benchmark regressions
([#13718](#13718))
([2802f5a](2802f5a))
* playground improvements
([#13588](#13588))
([4c3453b](4c3453b))
* **playground:** bump vite
([#13750](#13750))
([7e72420](7e72420))
* Print `unsafe { ... }` around calls to Brillig from ACIR in AST
(noir-lang/noir#8077)
([366d980](366d980))
* **public/avm:** from hints to the end of the world
([#13459](#13459))
([a89de5d](a89de5d))
* redo typo PR by dizer-ti
([#13757](#13757))
([075d3a8](075d3a8))
* release playground on s3.
([#13582](#13582))
([2f9458a](2f9458a))
* **release:** give aztec release image sensible default entrypoint
([#13517](#13517))
([a864c06](a864c06))
* remove circuit simulator
([#13689](#13689))
([a00566c](a00566c))
* Remove code of the fake AVM recursive verifier
([#13614](#13614))
([048dfed](048dfed))
* remove msm sorter
([#13668](#13668))
([ff29d86](ff29d86))
* remove old terraform configs
([#13716](#13716))
([49ac1db](49ac1db)),
closes
[#13651](#13651)
* remove omit param from serialize derivation
([#13703](#13703))
([6af5943](6af5943))
* remove pcs vk from vk
([#13638](#13638))
([0e941ef](0e941ef))
* remove try_merge_only_changed_indices
(noir-lang/noir#8142)
([366d980](366d980))
* replace relative paths to noir-protocol-circuits
([78c87b5](78c87b5))
* replace relative paths to noir-protocol-circuits
([4e53cd1](4e53cd1))
* replace relative paths to noir-protocol-circuits
([3a33c47](3a33c47))
* replace relative paths to noir-protocol-circuits
([eaaa85b](eaaa85b))
* replace relative paths to noir-protocol-circuits
([648a4fe](648a4fe))
* replace relative paths to noir-protocol-circuits
([b3f4745](b3f4745))
* replace relative paths to noir-protocol-circuits
([269b316](269b316))
* replace relative paths to noir-protocol-circuits
([1330efe](1330efe))
* replace relative paths to noir-protocol-circuits
([a739284](a739284))
* Sanity check block number from archiver before returning it
([#13631](#13631))
([e459b2a](e459b2a))
* simpler `make_mutable` in `array_set` optimization
(noir-lang/noir#8106)
([366d980](366d980))
* **spartan:** bump default kind resources
([#13747](#13747))
([8ca828f](8ca828f))
* **ssa:** Additional unrolling and mem2reg passes
(noir-lang/noir#8017)
([44c1347](44c1347))
* **ssa:** Remove IfElse pass basic SSA tests
(noir-lang/noir#8058)
([44c1347](44c1347))
* **ssa:** Test terminator value constant folding and resolve cache for
data bus (noir-lang/noir#8132)
([366d980](366d980))
* starknet feature flag
([#13681](#13681))
([2b6c627](2b6c627))
* stop prover node swallowing start prover job errors
([#13676](#13676))
([90c2b7b](90c2b7b))
* **test:** AST generation calibration test
(noir-lang/noir#8054)
([44c1347](44c1347))
* update ACVM doc (noir-lang/noir#8004)
([366d980](366d980))
* Update docs snippet
([#13739](#13739))
([7fb333a](7fb333a))
* update staking asset handler address
([#13566](#13566))
([daa09f2](daa09f2))
* Updated contract addresses for alpha-testnet
([#13585](#13585))
([9f0ff4a](9f0ff4a))
* Use chain monitor to sync system time in p2p tests
([#13632](#13632))
([abbad4c](abbad4c))
* use public component key for pairing inputs
([#13705](#13705))
([467166f](467166f))
* use PublicComponentKeys
([#13686](#13686))
([68e4b6f](68e4b6f))
* use single extended viem client
([#13715](#13715))
([cf637dc](cf637dc))
* validate block header hash in circuits
([#13094](#13094))
([f19c182](f19c182))
* wasm proof verifying with native bb
([#13499](#13499))
([1ad9249](1ad9249))


### Documentation

* fees tutorial
([#13357](#13357))
([c580657](c580657))
* move snippets all versions
([#13650](#13650))
([a2f5553](a2f5553))
* Update glossary & snippets
([#13661](#13661))
([d55816d](d55816d))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: AztecBot <[email protected]>
Thunkar added a commit that referenced this pull request Apr 28, 2025
Apologies for the big PR. Lots of the stuff in here ended up being
chicken and egg with wanting to do refactoring to make this process
smoother/help debug tricky issues, and wanting to see that those
refactorings actually make sense by the end.

We no longer compute VKs on the fly in CIVC. This saves ~25% of
computation. This is done throughout by consolidating IVC inputs into a
single ivc-inputs.msgpack structure which supports passing bytecode,
witness & vk information to the bb backend. Now attaches a name for each
function, as well.

Major features:
- IVC inputs passed thru native and wasm are always passed a single
file/buffer. This is encoded using msgpack and capture bytecode,
witness, vk, and function name (which is now printed, but only properly
passed by native) For native, the bincode and witnesses are gzipped, for
WASM they are uncompressed. For actions such as gates or write_vk, the
IVC inputs are used with same structure but witness and vk data can be
blank.

This has a bunch of implications, such as having to break away from the
rigid API base class in bb cli (which overall doesn't feel worthwhile
anyway as CIVC is fundamentally different than UH), having to string vk
info along, etc.

Other features:

Debuggability:

- Correct README.md instructions on WASM stack traces (give up on
getting line numbers working :/)
- clangd now properly shows all errors in a C++ file you're browsing,
instead of only showing you the first error.

Cleanup

- small cleanup to acir tests, but still not testing new ivc flow there.
Lightest weight test is ivc-integration in yarn-project
- Get rid of --input_type in bb cli for CIVC. now implied always to be
what was previously runtime_stack. Simplifies usages, other modes were
unused.
- more ignored linting in the clangd file. Maybe one day we can enforce
the remaining as errors.
- Clean up msgpack usage. Msgpack headers were leaking everywhere and it
is a chunky library.
- Consolidate with using msgpackr as our only typescript messagepack
library

Benches

- use wasmtime helper in bb bootstrap. deduplicate code in bench. bench
now honours NATIVE_PRESET, and if you do
```
export NATIVE_PRESET=op-count-time
./bootstrap.sh
./bootstrap.sh bench
```
you will get op count timings for our native ivc benches.

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: thunkar <[email protected]>
Co-authored-by: maramihali <[email protected]>
Co-authored-by: ledwards2225 <[email protected]>
github-merge-queue bot pushed a commit that referenced this pull request May 15, 2025
This PR fixes the issue in bb.js dependencies which is causing failures
in noir-lang/noir#8506

This was broken in
#13590 where the
existing msgpack dependency was removed.

Co-authored-by: AztecBot <[email protected]>
AztecBot pushed a commit to AztecProtocol/barretenberg that referenced this pull request May 16, 2025
This PR fixes the issue in bb.js dependencies which is causing failures
in noir-lang/noir#8506

This was broken in
AztecProtocol/aztec-packages#13590 where the
existing msgpack dependency was removed.

Co-authored-by: AztecBot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants