Skip to content
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: simple sparse commitment #7488

Merged
merged 23 commits into from
Jul 23, 2024
Merged

feat: simple sparse commitment #7488

merged 23 commits into from
Jul 23, 2024

Conversation

ledwards2225
Copy link
Contributor

@ledwards2225 ledwards2225 commented Jul 15, 2024

Add method for more efficiently committing to sparse polynomials.

For polynomials with very few non-zero coefficients, it turns out to be more efficient to first reduce the set of {scalars, points} defining the MSM to only those for which scalar != 0, then perform the MSM. This is implemented in a new method commit_sparse in the CommitmentKey.

This PR also introduces (1) A more comprehensive set of pippenger benchmarks, (2) Tracking of commit times in the ClientIvc benchmark scripts, and (3) a test suite for the commit_sparse functionality.

Here are some benchmarks for committing to a polynomials of varying sizes, each with only 5 random nonzero entries. The first uses commit() and the second uses the new commit_sparse() method:

---------------------------------------------------------------------------------------------------
Benchmark                                                         Time             CPU   Iterations
---------------------------------------------------------------------------------------------------
bench_commit_sparse_random<curve::BN254>/14                    5.79 ms        0.371 ms         1000
bench_commit_sparse_random<curve::BN254>/15                    10.6 ms        0.508 ms         1000
bench_commit_sparse_random<curve::BN254>/16                    12.1 ms         1.86 ms          253
bench_commit_sparse_random<curve::BN254>/17                    14.0 ms         1.71 ms          412
bench_commit_sparse_random<curve::BN254>/18                    73.1 ms         2.75 ms          100

bench_commit_sparse_random_preprocessed<curve::BN254>/14      0.132 ms        0.076 ms         9216
bench_commit_sparse_random_preprocessed<curve::BN254>/15      0.134 ms        0.077 ms         9114
bench_commit_sparse_random_preprocessed<curve::BN254>/16      0.138 ms        0.079 ms         8856
bench_commit_sparse_random_preprocessed<curve::BN254>/17      0.150 ms        0.082 ms         8579
bench_commit_sparse_random_preprocessed<curve::BN254>/18      0.177 ms        0.108 ms         6396

Below are the relevant highlights from ClientIvc bench (master vs branch). Note the reductions in commitment time from databus (bus columns plus counts/tags), ecc_op_wires, and databus_inverses. Also, note that the time spent on these commitments between the unstructured and structured cases is now almost identical, suggesting that the required zero checking is essentially free.

Master - Unstructured:

ClientIVCBench/Full/6      14277 ms        10173 ms

commit(t)                               3613   25.60%

COMMIT::wires(t)                  850    35.80%
COMMIT::z_perm(t)                 449    18.92%
COMMIT::databus(t)                262    11.04%
COMMIT::ecc_op_wires(t)           278    11.71%
COMMIT::lookup_inverses(t)        189     7.98%
COMMIT::databus_inverses(t)       250    10.54%
COMMIT::lookup_counts_tags(t)      95     4.01%

Branch - Unstructured:

ClientIVCBench/Full/6      13530 ms        10167 ms

commit(t)                               2833   21.20%

COMMIT::wires(t)                  849    51.63%
COMMIT::z_perm(t)                 447    27.15%
COMMIT::databus(t)                 10     0.63%
COMMIT::ecc_op_wires(t)            49     2.97%
COMMIT::lookup_inverses(t)        190    11.56%
COMMIT::databus_inverses(t)         4     0.24%
COMMIT::lookup_counts_tags(t)      96     5.82%

Master - STRUCTURED

ClientIVCBench/FullStructured/6      20935 ms        14669 ms            

commit(t)                               7091   34.14%

COMMIT::wires(t)                 1471    25.74%
COMMIT::z_perm(t)                1028    17.98%
COMMIT::databus(t)                509     8.90%
COMMIT::ecc_op_wires(t)           929    16.26%
COMMIT::lookup_inverses(t)        356     6.23%
COMMIT::databus_inverses(t)      1243    21.75%
COMMIT::lookup_counts_tags(t)     179     3.13%

Branch - STRUCTURED

ClientIVCBench/FullStructured/6      18316 ms        13782 ms 

commit(t)                               4398   24.23%

COMMIT::wires(t)                 1468    47.53%
COMMIT::z_perm(t)                1020    33.04%
COMMIT::databus(t)                 13     0.44%
COMMIT::ecc_op_wires(t)            52     1.68%
COMMIT::lookup_inverses(t)        350    11.32%
COMMIT::databus_inverses(t)         5     0.17%
COMMIT::lookup_counts_tags(t)     180     5.82%

@ledwards2225 ledwards2225 self-assigned this Jul 16, 2024
Copy link
Collaborator

@AztecBot AztecBot left a comment

Choose a reason for hiding this comment

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

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'C++ Benchmark'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.05.

Benchmark suite Current: 0696f08 Previous: df99d1d Ratio
Goblin::merge(t) 219939336 ns/iter 198797375 ns/iter 1.11

This comment was automatically generated by workflow using github-action-benchmark.

CC: @ludamad @codygunton

# they should be meaningful relative to one another
print('\nRelation contributions (times to be interpreted relatively):')
# Extract a set of components from the benchmark data and display timings and relative percentages
def print_contributions(prefix, ivc_bench_json, bench_name, components):
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This was logic previously used only to process bench data for the Relations but I wanted to reuse it for commitments so I just made it a method

@@ -7,25 +7,137 @@ namespace bb {

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This suite was previously just benchmarking committing to zero polynomials of various sizes. I'm assuming it was just a WiP and never used but who knows. I've updated it to include a number of different scenarios, including committing various types of sparse polynomials with the traditional commit() and the new commit_sparse()

@ledwards2225 ledwards2225 marked this pull request as ready for review July 16, 2024 21:23
@ledwards2225 ledwards2225 requested a review from codygunton July 16, 2024 21:23
@ledwards2225
Copy link
Contributor Author

ledwards2225 commented Jul 17, 2024

@codygunton Here's more data exploring some of the wonky numbers seen in the pippenger benchmarks. These are for "sparse" random polys with respectively 5, 200, 2^10 and 2^15 non-zero entries, using commit vs commit_sparse. The pattern is more in line with expectation for the denser cases, but it's a bit baffling why things are worse for very sparse polys. The 2^15 case gives a sense of how sparse the polys need to be for commit_sparse to be beneficial.

---------------------------------------------------------------------------------------------------
Benchmark                                                         Time             CPU   Iterations
---------------------------------------------------------------------------------------------------
bench_commit_sparse_random<curve::BN254>/16                    12.5 ms         1.10 ms          521
bench_commit_sparse_random<curve::BN254>/17                    14.7 ms         2.71 ms          233
bench_commit_sparse_random<curve::BN254>/18                    74.2 ms         2.92 ms          100
bench_commit_sparse_random<curve::BN254>/19                    80.8 ms         6.24 ms          122
bench_commit_sparse_random<curve::BN254>/20                    98.1 ms         12.3 ms           62

bench_commit_sparse_random_preprocessed<curve::BN254>/16      0.137 ms        0.078 ms         8963
bench_commit_sparse_random_preprocessed<curve::BN254>/17      0.151 ms        0.081 ms         8593
bench_commit_sparse_random_preprocessed<curve::BN254>/18      0.177 ms        0.107 ms         6529
bench_commit_sparse_random_preprocessed<curve::BN254>/19      0.216 ms        0.148 ms         4744
bench_commit_sparse_random_preprocessed<curve::BN254>/20      0.314 ms        0.253 ms         2790
---------------------------------------------------------------------------------------------------
Benchmark                                                         Time             CPU   Iterations
---------------------------------------------------------------------------------------------------
bench_commit_sparse_random<curve::BN254>/16                    4.26 ms         2.43 ms          276
bench_commit_sparse_random<curve::BN254>/17                    6.10 ms         3.23 ms          220
bench_commit_sparse_random<curve::BN254>/18                    18.0 ms         10.9 ms           59
bench_commit_sparse_random<curve::BN254>/19                    26.4 ms         14.1 ms           49
bench_commit_sparse_random<curve::BN254>/20                    42.0 ms         19.5 ms           36

bench_commit_sparse_random_preprocessed<curve::BN254>/16       1.85 ms         1.67 ms          420
bench_commit_sparse_random_preprocessed<curve::BN254>/17       1.83 ms         1.69 ms          420
bench_commit_sparse_random_preprocessed<curve::BN254>/18       1.83 ms         1.72 ms          414
bench_commit_sparse_random_preprocessed<curve::BN254>/19       1.94 ms         1.78 ms          405
bench_commit_sparse_random_preprocessed<curve::BN254>/20       2.02 ms         1.87 ms          389
---------------------------------------------------------------------------------------------------
Benchmark                                                         Time             CPU   Iterations
---------------------------------------------------------------------------------------------------
bench_commit_sparse_random<curve::BN254>/16                    4.54 ms         3.22 ms          221
bench_commit_sparse_random<curve::BN254>/17                    6.49 ms         3.96 ms          177
bench_commit_sparse_random<curve::BN254>/18                    18.6 ms         12.5 ms           57
bench_commit_sparse_random<curve::BN254>/19                    26.7 ms         15.3 ms           46
bench_commit_sparse_random<curve::BN254>/20                    41.6 ms         21.1 ms           33

bench_commit_sparse_random_preprocessed<curve::BN254>/16       4.79 ms         4.57 ms          152
bench_commit_sparse_random_preprocessed<curve::BN254>/17       4.87 ms         4.66 ms          151
bench_commit_sparse_random_preprocessed<curve::BN254>/18       4.91 ms         4.66 ms          151
bench_commit_sparse_random_preprocessed<curve::BN254>/19       4.93 ms         4.70 ms          150
bench_commit_sparse_random_preprocessed<curve::BN254>/20       5.10 ms         4.83 ms          146
---------------------------------------------------------------------------------------------------
Benchmark                                                         Time             CPU   Iterations
---------------------------------------------------------------------------------------------------
bench_commit_sparse_random<curve::BN254>/16                    13.7 ms         12.2 ms           58
bench_commit_sparse_random<curve::BN254>/17                    16.8 ms         14.1 ms           49
bench_commit_sparse_random<curve::BN254>/18                    30.8 ms         25.2 ms           28
bench_commit_sparse_random<curve::BN254>/19                    38.9 ms         28.4 ms           25
bench_commit_sparse_random<curve::BN254>/20                    54.7 ms         34.3 ms           21

bench_commit_sparse_random_preprocessed<curve::BN254>/16       18.7 ms         17.9 ms           38
bench_commit_sparse_random_preprocessed<curve::BN254>/17       20.5 ms         19.7 ms           35
bench_commit_sparse_random_preprocessed<curve::BN254>/18       23.2 ms         22.3 ms           33
bench_commit_sparse_random_preprocessed<curve::BN254>/19       24.2 ms         23.2 ms           30
bench_commit_sparse_random_preprocessed<curve::BN254>/20       25.6 ms         24.6 ms           27

G1* point_table = srs->get_monomial_points();

// Define structures needed to multithread the extraction of non-zero inputs
const size_t num_threads = degree >= get_num_cpus_pow2() ? get_num_cpus_pow2() : 1;
Copy link
Contributor

Choose a reason for hiding this comment

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

IIUC these shouldn't (aren't) the number of threads, just the number of things you need to iterate. If you look closely at the current implementation of parallel_for, the number of threads are not sth the caller can choose, you can only choose the number of elements to iterate (which is right):

void parallel_for_mutex_pool(size_t num_iterations, const std::function<void(size_t)>& func)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I guess I'm a little unclear what your suggestion is here. Is your objection about the name num_threads? I guess I'm thinking of it as shorthand for "num threads over which to distribute the work", which is how this value is used if I'm not mistaken. Admittedly though I am being a bit sloppy here in that I don't really need a power-of-2 thread count and my condition for when not to multithread is a bit arbitrary. In practice though the only context that matters is degree ~2^18 and higher so not so important to get the small values right

Copy link
Contributor

Choose a reason for hiding this comment

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

What I mean is that the value passed to parallel_for is in principle not the number of threads. If you have 16 cores and do parallel_for(200, some_f) then it will be chunked in 200/16 chunks over 16 threads, and f will be called from 0 to 199.

Maybe the way you set it up does make it coincide with the number of threads though. @ludamad would be the best to ask. I'm commenting because I had to use parallel_for recently and noticed this subtlety.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ah I see what you mean. In my case the "num_iterations" input will always be <= actual num threads but your point stands. I don't really love that - seems like the parallel_for interface should allow you to specify how it should multithread.

// Define structures needed to multithread the extraction of non-zero inputs
const size_t num_threads = degree >= get_num_cpus_pow2() ? get_num_cpus_pow2() : 1;
const size_t block_size = degree / num_threads;
std::vector<std::vector<Fr>> thread_scalars(num_threads);
Copy link
Contributor

Choose a reason for hiding this comment

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

My above comment also means that you might get fewer real threads than the number of elements. IIUC, this means that your division of vectors here is still thread-safe, but less efficient than you might think (i.e., not one "bucket" per thread).

Copy link
Contributor

@fcarreiro fcarreiro left a comment

Choose a reason for hiding this comment

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

This will surely help the AVM! (we currently have around 5% non-zero elements)

Maybe a dumb question: I was expecting Pippenger to already "get rid of" the zero scalars after bucketing all the scalars. Why does this preprocessing work better?

@ledwards2225
Copy link
Contributor Author

This will surely help the AVM! (we currently have around 5% non-zero elements)

Maybe a dumb question: I was expecting Pippenger to already "get rid of" the zero scalars after bucketing all the scalars. Why does this preprocessing work better?

Not a dumb question - the truth is I have not had time to properly dig into our Pippenger implementation and understand whether there is something more natural (and possible more effective) that can be done to the same effect in the core algorithm. This PR represents a very quick and dirty optimization added while I was doing analysis for a somewhat more complex optimization (note the name of this branch is analyze_commitments :)). I was somewhat surprised by its effectiveness as well. I can say two things about the original Pippenger implementation though: (1) committing to zeros or small values is much cheaper than committing to large values, i.e. we are doing less work when you'd expect we would, and (2) the algorithm was likely not at all optimized for this sparse case since it was originally used in Plonk where essentially all of the polynomials are completely dense.

At some point I'd like to understand exactly what's causing performance to be sub-par for these sparse cases and whether there's something more sophisticated and/or effective to be done, but unfortunately I haven't been able to squeeze that into the list of priorities as of yet.

Copy link
Contributor

@codygunton codygunton left a comment

Choose a reason for hiding this comment

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

Looks good for something quick and dirty. FYI I ran the bench breakdown before and after and saw it looks to be producing the same analysis.

BENCHMARK(bench_commit_sparse_preprocessed<curve::BN254>)
->DenseRange(14, MAX_LOG_NUM_POINTS)
->Unit(benchmark::kMillisecond);
BENCHMARK(bench_commit_sparse_random<curve::BN254>)->DenseRange(14, MAX_LOG_NUM_POINTS)->Unit(benchmark::kMillisecond);
Copy link
Contributor

Choose a reason for hiding this comment

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

NB the weird asymptotics including a sudden huge jump.

G1* point_table = srs->get_monomial_points();

// Define structures needed to multithread the extraction of non-zero inputs
const size_t num_threads = degree >= get_num_cpus_pow2() ? get_num_cpus_pow2() : 1;
Copy link
Contributor

Choose a reason for hiding this comment

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

This is weird for small degree but we don't care in practice?

Comment on lines +30 to +31
constexpr size_t MAX_LOG_NUM_POINTS = 20;
constexpr size_t MAX_NUM_POINTS = 1 << MAX_LOG_NUM_POINTS;
Copy link
Contributor

Choose a reason for hiding this comment

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

FWIW we prob do care about 2^24 since that's the ClientIVC recursive verifier size right now.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yeah easy enough to change for an interested party but I was running these a lot and anything larger was taking too long


auto polynomial = Polynomial<Fr>(num_points);
for (size_t i = 0; i < num_nonzero; i++) {
polynomial[i] = 1;
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe a follow-on question: if these are at random locations, do we have the same performance?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

For the random sparse polys (i.e. the ones for which I was showing bench results) the locations are randomized, but I did not see a difference before and after randomizing the locations.

});

// Reconstruct the full input to the pippenger from the individual threads
std::vector<Fr> scalars;
Copy link
Contributor

Choose a reason for hiding this comment

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

Probably worth reserving some space in these just in case / since it's easy.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

added

@ledwards2225 ledwards2225 enabled auto-merge (squash) July 22, 2024 19:28
@ledwards2225 ledwards2225 disabled auto-merge July 22, 2024 19:28
@ledwards2225 ledwards2225 merged commit df08874 into master Jul 23, 2024
35 checks passed
@ledwards2225 ledwards2225 deleted the lde/analyze_commitments branch July 23, 2024 15:55
rahul-kothari pushed a commit that referenced this pull request Jul 24, 2024
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-package: 0.47.0</summary>

##
[0.47.0](aztec-package-v0.46.7...aztec-package-v0.47.0)
(2024-07-24)


### Features

* Bootstrap devnet
([#7578](#7578))
([ade373b](ade373b))
* Bootstrap devnet on CI
([#7534](#7534))
([77ce1c3](77ce1c3))
* Prover node
([#7452](#7452))
([609a68f](609a68f)),
closes
[#7346](#7346)
* TXE nr deployments, dependency cleanup for CLI
([#7548](#7548))
([92ff2fa](92ff2fa))
</details>

<details><summary>barretenberg.js: 0.47.0</summary>

##
[0.47.0](barretenberg.js-v0.46.7...barretenberg.js-v0.47.0)
(2024-07-24)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>aztec-packages: 0.47.0</summary>

##
[0.47.0](aztec-packages-v0.46.7...aztec-packages-v0.47.0)
(2024-07-24)


### ⚠ BREAKING CHANGES

* **frontend:** Restrict numeric generic types to unsigned ints up to
`u32` (noir-lang/noir#5581)

### Features

* Add `TraitDefinition::as_trait_constraint()`
(noir-lang/noir#5541)
([a26419f](a26419f))
* Add `TraitDefinition::as_trait_constraint()`
(noir-lang/noir#5541)
([7799fc6](7799fc6))
* Add `TraitDefinition::as_trait_constraint()`
(noir-lang/noir#5541)
([c39bcdc](c39bcdc))
* Add a compile-time hash map type
(noir-lang/noir#5543)
([a26419f](a26419f))
* Add a compile-time hash map type
(noir-lang/noir#5543)
([7799fc6](7799fc6))
* Add a compile-time hash map type
(noir-lang/noir#5543)
([c39bcdc](c39bcdc))
* Add comptime support for `modulus_*` compiler builtins
(noir-lang/noir#5530)
([a26419f](a26419f))
* Add comptime support for `modulus_*` compiler builtins
(noir-lang/noir#5530)
([7799fc6](7799fc6))
* Add comptime support for `modulus_*` compiler builtins
(noir-lang/noir#5530)
([c39bcdc](c39bcdc))
* Add debug codelens action
(noir-lang/noir#5474)
([4ec86c0](4ec86c0))
* Add support for usage of `super` in import paths
(noir-lang/noir#5502)
([4ec86c0](4ec86c0))
* Add TraitConstraint type (noir-lang/noir#5499)
([a26419f](a26419f))
* Add TraitConstraint type (noir-lang/noir#5499)
([7799fc6](7799fc6))
* Add TraitConstraint type (noir-lang/noir#5499)
([c39bcdc](c39bcdc))
* Add unquote function (noir-lang/noir#5497)
([4ec86c0](4ec86c0))
* Allow arguments to attribute functions
(noir-lang/noir#5494)
([4ec86c0](4ec86c0))
* Allow comptime attributes on traits & functions
(noir-lang/noir#5496)
([4ec86c0](4ec86c0))
* **avm-simulator:** Keccakf1600 opcode
([#7545](#7545))
([b81c503](b81c503))
* **avm:** Concurrency improvements
([#7495](#7495))
([0d5c066](0d5c066))
* Avoid heap allocs when going to/from field
([#7547](#7547))
([086522d](086522d))
* Bootstrap devnet
([#7578](#7578))
([ade373b](ade373b))
* Bootstrap devnet on CI
([#7534](#7534))
([77ce1c3](77ce1c3))
* Bridge devcoin
([#7595](#7595))
([a316fcd](a316fcd)),
closes
[#7571](#7571)
* Bus updates
([#7522](#7522))
([bf774c2](bf774c2))
* **docs:** Update sandbox commands, add reference, fix tutorials
([#7580](#7580))
([4f07290](4f07290))
* Faucet takes mnemonic
([#7546](#7546))
([dbd054f](dbd054f))
* Handle ACIR calls in the debugger
(noir-lang/noir#5051)
([4ec86c0](4ec86c0))
* Implement `poseidon2_permutation` in comptime interpreter
(noir-lang/noir#5590)
([a26419f](a26419f))
* Implement `zeroed` in the interpreter
(noir-lang/noir#5540)
([a26419f](a26419f))
* LSP document symbol (noir-lang/noir#5532)
([a26419f](a26419f))
* LSP document symbol (noir-lang/noir#5532)
([7799fc6](7799fc6))
* LSP document symbol (noir-lang/noir#5532)
([c39bcdc](c39bcdc))
* LSP hover (noir-lang/noir#5491)
([4ec86c0](4ec86c0))
* LSP inlay hints for let and global
(noir-lang/noir#5510)
([a26419f](a26419f))
* LSP inlay hints for let and global
(noir-lang/noir#5510)
([7799fc6](7799fc6))
* LSP inlay hints for let and global
(noir-lang/noir#5510)
([c39bcdc](c39bcdc))
* LSP inlay parameter hints
(noir-lang/noir#5553)
([a26419f](a26419f))
* LSP inlay parameter hints
(noir-lang/noir#5553)
([7799fc6](7799fc6))
* LSP inlay parameter hints
(noir-lang/noir#5553)
([c39bcdc](c39bcdc))
* Make Brillig do integer arithmetic operations using u128 instead of
Bigint
([#7518](#7518))
([4a2011e](4a2011e))
* **nargo:** Default expression width field in `Nargo.toml`
(noir-lang/noir#5505)
([4ec86c0](4ec86c0))
* Populate recipient in outgoing
([#7390](#7390))
([3293244](3293244))
* Prover node
([#7452](#7452))
([609a68f](609a68f)),
closes
[#7346](#7346)
* Simple sparse commitment
([#7488](#7488))
([df08874](df08874))
* Skip reading values immediately after it being written into an array
(noir-lang/noir#5449)
([4ec86c0](4ec86c0))
* Solidity honk verifier
([#5485](#5485))
([8dfebe4](8dfebe4))
* Trimming 1 byte from compressed repr of Point
([#7505](#7505))
([9a68034](9a68034))
* TS keccakf1600
([#7542](#7542))
([55fb93d](55fb93d))
* TXE nr deployments, dependency cleanup for CLI
([#7548](#7548))
([92ff2fa](92ff2fa))


### Bug Fixes

* 'cannot eval non-comptime global' error
(noir-lang/noir#5586)
([a26419f](a26419f))
* Add yq to build image
([#7338](#7338))
([6035595](6035595))
* Allow calling a trait method with paths that don't consist of exactly
two segments (noir-lang/noir#5577)
([a26419f](a26419f))
* Allow calling a trait method with paths that don't consist of exactly
two segments (noir-lang/noir#5577)
([7799fc6](7799fc6))
* **avm:** One too many range check rows
([#7499](#7499))
([deb6918](deb6918))
* **aztec-nr:** Make impls not stricter than traits
([#7502](#7502))
([c498934](c498934))
* Cli fixes
([#7543](#7543))
([689000a](689000a))
* Correctly track sources for open LSP documents
(noir-lang/noir#5561)
([a26419f](a26419f))
* Do not load the BN254 CRS for verifying client ivc proofs
([#7556](#7556))
([e515b71](e515b71))
* Don't bind ports when running the cli
([#7596](#7596))
([5a907c6](5a907c6))
* Don't panic when a macro fails to resolve
(noir-lang/noir#5537)
([a26419f](a26419f))
* Don't panic when a macro fails to resolve
(noir-lang/noir#5537)
([7799fc6](7799fc6))
* Don't panic when a macro fails to resolve
(noir-lang/noir#5537)
([c39bcdc](c39bcdc))
* Don't type error when calling certain trait impls in the interpreter
(noir-lang/noir#5471)
([4ec86c0](4ec86c0))
* Error on empty function bodies
(noir-lang/noir#5519)
([a26419f](a26419f))
* Error on empty function bodies
(noir-lang/noir#5519)
([7799fc6](7799fc6))
* Error on empty function bodies
(noir-lang/noir#5519)
([c39bcdc](c39bcdc))
* Error on trait impl generics count mismatch
(noir-lang/noir#5582)
([a26419f](a26419f))
* Fix `uhashmap` test name (noir-lang/noir#5563)
([a26419f](a26419f))
* Fix `uhashmap` test name (noir-lang/noir#5563)
([7799fc6](7799fc6))
* Fix `uhashmap` test name (noir-lang/noir#5563)
([c39bcdc](c39bcdc))
* Fix occurs check (noir-lang/noir#5535)
([a26419f](a26419f))
* Fix occurs check (noir-lang/noir#5535)
([7799fc6](7799fc6))
* Fix occurs check (noir-lang/noir#5535)
([c39bcdc](c39bcdc))
* **frontend:** Disallow signed numeric generics
(noir-lang/noir#5572)
([a26419f](a26419f))
* **frontend:** Disallow signed numeric generics
(noir-lang/noir#5572)
([7799fc6](7799fc6))
* **frontend:** Disallow signed numeric generics
(noir-lang/noir#5572)
([c39bcdc](c39bcdc))
* **frontend:** Error for when impl is stricter than trait
(noir-lang/noir#5343)
([a26419f](a26419f))
* **frontend:** Error for when impl is stricter than trait
(noir-lang/noir#5343)
([7799fc6](7799fc6))
* **frontend:** Error for when impl is stricter than trait
(noir-lang/noir#5343)
([c39bcdc](c39bcdc))
* **frontend:** Restrict numeric generic types to unsigned ints up to
`u32` (noir-lang/noir#5581)
([a26419f](a26419f))
* Let unary traits work at comptime
(noir-lang/noir#5507)
([a26419f](a26419f))
* Let unary traits work at comptime
(noir-lang/noir#5507)
([7799fc6](7799fc6))
* Let unary traits work at comptime
(noir-lang/noir#5507)
([c39bcdc](c39bcdc))
* Lsp hover wasn't always working
(noir-lang/noir#5515)
([4ec86c0](4ec86c0))
* Mutability in the comptime interpreter
(noir-lang/noir#5517)
([4ec86c0](4ec86c0))
* Never panic in LSP inlay hints
(noir-lang/noir#5534)
([a26419f](a26419f))
* Never panic in LSP inlay hints
(noir-lang/noir#5534)
([7799fc6](7799fc6))
* Never panic in LSP inlay hints
(noir-lang/noir#5534)
([c39bcdc](c39bcdc))
* Nuke app siloed incoming viewing keys
([#7464](#7464))
([24d353a](24d353a))
* Prover JSON RPC
([#7496](#7496))
([ca584a0](ca584a0))
* Remove custom entrypoint from CLI image
([#7508](#7508))
([c892c6a](c892c6a))
* Revert "feat: Sync from noir
([#7512](#7512))"
([#7558](#7558))
([548701e](548701e))
* Revert PR
[#5449](#5449)
(noir-lang/noir#5548)
([a26419f](a26419f))
* Revert PR
[#5449](#5449)
(noir-lang/noir#5548)
([7799fc6](7799fc6))
* Revert PR
[#5449](#5449)
(noir-lang/noir#5548)
([c39bcdc](c39bcdc))
* Run macros within comptime contexts
(noir-lang/noir#5576)
([a26419f](a26419f))
* Run macros within comptime contexts
(noir-lang/noir#5576)
([7799fc6](7799fc6))
* **ssa:** More robust array deduplication check
(noir-lang/noir#5547)
([a26419f](a26419f))
* **ssa:** More robust array deduplication check
(noir-lang/noir#5547)
([7799fc6](7799fc6))
* **ssa:** More robust array deduplication check
(noir-lang/noir#5547)
([c39bcdc](c39bcdc))
* Type_of for pointer types
(noir-lang/noir#5536)
([a26419f](a26419f))
* Type_of for pointer types
(noir-lang/noir#5536)
([7799fc6](7799fc6))
* Type_of for pointer types
(noir-lang/noir#5536)
([c39bcdc](c39bcdc))


### Miscellaneous

* Add a regression test for bit not on untyped integer
(noir-lang/noir#5589)
([a26419f](a26419f))
* Add benchmark for ecdsa (noir-lang/noir#5113)
([4ec86c0](4ec86c0))
* Added regression test for check_for_underconstrained_values resolve
bug (noir-lang/noir#5490)
([4ec86c0](4ec86c0))
* **avm:** Bump SRS to 1 &lt;< 20
([#7575](#7575))
([fad37a7](fad37a7))
* **avm:** Count non-zero elems and others
([#7498](#7498))
([7d97c0f](7d97c0f))
* **avm:** Nuke declare_views
([#7507](#7507))
([7e07ba9](7e07ba9))
* **avm:** Use commit_sparse
([#7581](#7581))
([6812f2b](6812f2b))
* Bump hardhat version to `2.22.6`
(noir-lang/noir#5514)
([4ec86c0](4ec86c0))
* **ci:** Add workflow to run `nargo check` on external repos
(noir-lang/noir#5355)
([4ec86c0](4ec86c0))
* **ci:** Remove bad colon in yaml file
(noir-lang/noir#5520)
([4ec86c0](4ec86c0))
* Disable aztec-packages CI checks
(noir-lang/noir#5566)
([a26419f](a26419f))
* Disable aztec-packages CI checks
(noir-lang/noir#5566)
([7799fc6](7799fc6))
* Disable aztec-packages CI checks
(noir-lang/noir#5566)
([c39bcdc](c39bcdc))
* **docs:** Docs for turbofish operator
(noir-lang/noir#5555)
([a26419f](a26419f))
* **docs:** Docs for turbofish operator
(noir-lang/noir#5555)
([7799fc6](7799fc6))
* **docs:** Docs for turbofish operator
(noir-lang/noir#5555)
([c39bcdc](c39bcdc))
* **docs:** Fix migration notes
([#7599](#7599))
([ba90e2c](ba90e2c))
* Filter warnings from elaborator in Aztec Macros
(noir-lang/noir#5556)
([a26419f](a26419f))
* Filter warnings from elaborator in Aztec Macros
(noir-lang/noir#5556)
([7799fc6](7799fc6))
* Filter warnings from elaborator in Aztec Macros
(noir-lang/noir#5556)
([c39bcdc](c39bcdc))
* Fix benchmark summary credentials
([#7549](#7549))
([817dd10](817dd10))
* Introduce execution oracle
([#7521](#7521))
([645aec1](645aec1))
* Moving pub_key_to_bytes to aztec-nr
([#7506](#7506))
([5b323a7](5b323a7))
* Noir version for Pedersen commitment and hash
(noir-lang/noir#5431)
([4ec86c0](4ec86c0))
* Optimizing DA cost with new point compression
([#7473](#7473))
([2a5ee4f](2a5ee4f))
* Persist initial header in local store
([#7555](#7555))
([d65c692](d65c692))
* Release Noir(0.32.0) (noir-lang/noir#5268)
([a26419f](a26419f))
* Release Noir(0.32.0) (noir-lang/noir#5268)
([7799fc6](7799fc6))
* Release Noir(0.32.0) (noir-lang/noir#5268)
([c39bcdc](c39bcdc))
* Remove `--use-legacy` and resolution code
(noir-lang/noir#5248)
([a26419f](a26419f))
* Remove `--use-legacy` and resolution code
(noir-lang/noir#5248)
([7799fc6](7799fc6))
* Remove `--use-legacy` and resolution code
(noir-lang/noir#5248)
([c39bcdc](c39bcdc))
* Remove comptime scanning pass
(noir-lang/noir#5569)
([a26419f](a26419f))
* Remove comptime scanning pass
(noir-lang/noir#5569)
([7799fc6](7799fc6))
* Remove dbg on find_func_with_name
(noir-lang/noir#5526)
([a26419f](a26419f))
* Remove dbg on find_func_with_name
(noir-lang/noir#5526)
([7799fc6](7799fc6))
* Remove dbg on find_func_with_name
(noir-lang/noir#5526)
([c39bcdc](c39bcdc))
* Remove dummy arrays
([#7246](#7246))
([a4acd12](a4acd12))
* Remove more aztec-nr warnings (numerics and unused variables)
([#7519](#7519))
([3da86cb](3da86cb))
* Remove the remainder of legacy code
(noir-lang/noir#5525)
([a26419f](a26419f))
* Remove the remainder of legacy code
(noir-lang/noir#5525)
([7799fc6](7799fc6))
* Remove the remainder of legacy code
(noir-lang/noir#5525)
([c39bcdc](c39bcdc))
* Remove unknown annotation warning
(noir-lang/noir#5531)
([a26419f](a26419f))
* Remove unknown annotation warning
(noir-lang/noir#5531)
([7799fc6](7799fc6))
* Remove unknown annotation warning
(noir-lang/noir#5531)
([c39bcdc](c39bcdc))
* Replace relative paths to noir-protocol-circuits
([301b34f](301b34f))
* Replace relative paths to noir-protocol-circuits
([0977dec](0977dec))
* Replace relative paths to noir-protocol-circuits
([da071bf](da071bf))
* Replace relative paths to noir-protocol-circuits
([954bcd7](954bcd7))
* Standardize experimental feature disclaimer across documentation
(noir-lang/noir#5367)
([a26419f](a26419f))
* Standardize experimental feature disclaimer across documentation
(noir-lang/noir#5367)
([7799fc6](7799fc6))
* Standardize experimental feature disclaimer across documentation
(noir-lang/noir#5367)
([c39bcdc](c39bcdc))
* Switch to Noir Keccak implementation with variable size support
(noir-lang/noir#5508)
([a26419f](a26419f))
* Switch to Noir Keccak implementation with variable size support
(noir-lang/noir#5508)
([7799fc6](7799fc6))
* Switch to Noir Keccak implementation with variable size support
(noir-lang/noir#5508)
([c39bcdc](c39bcdc))
* Update typo PR script (noir-lang/noir#5488)
([4ec86c0](4ec86c0))
* Use new let syntax for generic numerics
([#7503](#7503))
([25e6684](25e6684))
</details>

<details><summary>barretenberg: 0.47.0</summary>

##
[0.47.0](barretenberg-v0.46.7...barretenberg-v0.47.0)
(2024-07-24)


### Features

* **avm:** Concurrency improvements
([#7495](#7495))
([0d5c066](0d5c066))
* Bus updates
([#7522](#7522))
([bf774c2](bf774c2))
* Make Brillig do integer arithmetic operations using u128 instead of
Bigint
([#7518](#7518))
([4a2011e](4a2011e))
* Simple sparse commitment
([#7488](#7488))
([df08874](df08874))
* Solidity honk verifier
([#5485](#5485))
([8dfebe4](8dfebe4))


### Bug Fixes

* **avm:** One too many range check rows
([#7499](#7499))
([deb6918](deb6918))
* Do not load the BN254 CRS for verifying client ivc proofs
([#7556](#7556))
([e515b71](e515b71))


### Miscellaneous

* **avm:** Bump SRS to 1 &lt;< 20
([#7575](#7575))
([fad37a7](fad37a7))
* **avm:** Count non-zero elems and others
([#7498](#7498))
([7d97c0f](7d97c0f))
* **avm:** Nuke declare_views
([#7507](#7507))
([7e07ba9](7e07ba9))
* **avm:** Use commit_sparse
([#7581](#7581))
([6812f2b](6812f2b))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
AztecBot added a commit to AztecProtocol/barretenberg that referenced this pull request Jul 25, 2024
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-package: 0.47.0</summary>

##
[0.47.0](AztecProtocol/aztec-packages@aztec-package-v0.46.7...aztec-package-v0.47.0)
(2024-07-24)


### Features

* Bootstrap devnet
([#7578](AztecProtocol/aztec-packages#7578))
([ade373b](AztecProtocol/aztec-packages@ade373b))
* Bootstrap devnet on CI
([#7534](AztecProtocol/aztec-packages#7534))
([77ce1c3](AztecProtocol/aztec-packages@77ce1c3))
* Prover node
([#7452](AztecProtocol/aztec-packages#7452))
([609a68f](AztecProtocol/aztec-packages@609a68f)),
closes
[#7346](AztecProtocol/aztec-packages#7346)
* TXE nr deployments, dependency cleanup for CLI
([#7548](AztecProtocol/aztec-packages#7548))
([92ff2fa](AztecProtocol/aztec-packages@92ff2fa))
</details>

<details><summary>barretenberg.js: 0.47.0</summary>

##
[0.47.0](AztecProtocol/aztec-packages@barretenberg.js-v0.46.7...barretenberg.js-v0.47.0)
(2024-07-24)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>aztec-packages: 0.47.0</summary>

##
[0.47.0](AztecProtocol/aztec-packages@aztec-packages-v0.46.7...aztec-packages-v0.47.0)
(2024-07-24)


### ⚠ BREAKING CHANGES

* **frontend:** Restrict numeric generic types to unsigned ints up to
`u32` (noir-lang/noir#5581)

### Features

* Add `TraitDefinition::as_trait_constraint()`
(noir-lang/noir#5541)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Add `TraitDefinition::as_trait_constraint()`
(noir-lang/noir#5541)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Add `TraitDefinition::as_trait_constraint()`
(noir-lang/noir#5541)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Add a compile-time hash map type
(noir-lang/noir#5543)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Add a compile-time hash map type
(noir-lang/noir#5543)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Add a compile-time hash map type
(noir-lang/noir#5543)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Add comptime support for `modulus_*` compiler builtins
(noir-lang/noir#5530)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Add comptime support for `modulus_*` compiler builtins
(noir-lang/noir#5530)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Add comptime support for `modulus_*` compiler builtins
(noir-lang/noir#5530)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Add debug codelens action
(noir-lang/noir#5474)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Add support for usage of `super` in import paths
(noir-lang/noir#5502)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Add TraitConstraint type (noir-lang/noir#5499)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Add TraitConstraint type (noir-lang/noir#5499)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Add TraitConstraint type (noir-lang/noir#5499)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Add unquote function (noir-lang/noir#5497)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Allow arguments to attribute functions
(noir-lang/noir#5494)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Allow comptime attributes on traits & functions
(noir-lang/noir#5496)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* **avm-simulator:** Keccakf1600 opcode
([#7545](AztecProtocol/aztec-packages#7545))
([b81c503](AztecProtocol/aztec-packages@b81c503))
* **avm:** Concurrency improvements
([#7495](AztecProtocol/aztec-packages#7495))
([0d5c066](AztecProtocol/aztec-packages@0d5c066))
* Avoid heap allocs when going to/from field
([#7547](AztecProtocol/aztec-packages#7547))
([086522d](AztecProtocol/aztec-packages@086522d))
* Bootstrap devnet
([#7578](AztecProtocol/aztec-packages#7578))
([ade373b](AztecProtocol/aztec-packages@ade373b))
* Bootstrap devnet on CI
([#7534](AztecProtocol/aztec-packages#7534))
([77ce1c3](AztecProtocol/aztec-packages@77ce1c3))
* Bridge devcoin
([#7595](AztecProtocol/aztec-packages#7595))
([a316fcd](AztecProtocol/aztec-packages@a316fcd)),
closes
[#7571](AztecProtocol/aztec-packages#7571)
* Bus updates
([#7522](AztecProtocol/aztec-packages#7522))
([bf774c2](AztecProtocol/aztec-packages@bf774c2))
* **docs:** Update sandbox commands, add reference, fix tutorials
([#7580](AztecProtocol/aztec-packages#7580))
([4f07290](AztecProtocol/aztec-packages@4f07290))
* Faucet takes mnemonic
([#7546](AztecProtocol/aztec-packages#7546))
([dbd054f](AztecProtocol/aztec-packages@dbd054f))
* Handle ACIR calls in the debugger
(noir-lang/noir#5051)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Implement `poseidon2_permutation` in comptime interpreter
(noir-lang/noir#5590)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Implement `zeroed` in the interpreter
(noir-lang/noir#5540)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* LSP document symbol (noir-lang/noir#5532)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* LSP document symbol (noir-lang/noir#5532)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* LSP document symbol (noir-lang/noir#5532)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* LSP hover (noir-lang/noir#5491)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* LSP inlay hints for let and global
(noir-lang/noir#5510)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* LSP inlay hints for let and global
(noir-lang/noir#5510)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* LSP inlay hints for let and global
(noir-lang/noir#5510)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* LSP inlay parameter hints
(noir-lang/noir#5553)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* LSP inlay parameter hints
(noir-lang/noir#5553)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* LSP inlay parameter hints
(noir-lang/noir#5553)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Make Brillig do integer arithmetic operations using u128 instead of
Bigint
([#7518](AztecProtocol/aztec-packages#7518))
([4a2011e](AztecProtocol/aztec-packages@4a2011e))
* **nargo:** Default expression width field in `Nargo.toml`
(noir-lang/noir#5505)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Populate recipient in outgoing
([#7390](AztecProtocol/aztec-packages#7390))
([3293244](AztecProtocol/aztec-packages@3293244))
* Prover node
([#7452](AztecProtocol/aztec-packages#7452))
([609a68f](AztecProtocol/aztec-packages@609a68f)),
closes
[#7346](AztecProtocol/aztec-packages#7346)
* Simple sparse commitment
([#7488](AztecProtocol/aztec-packages#7488))
([df08874](AztecProtocol/aztec-packages@df08874))
* Skip reading values immediately after it being written into an array
(noir-lang/noir#5449)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Solidity honk verifier
([#5485](AztecProtocol/aztec-packages#5485))
([8dfebe4](AztecProtocol/aztec-packages@8dfebe4))
* Trimming 1 byte from compressed repr of Point
([#7505](AztecProtocol/aztec-packages#7505))
([9a68034](AztecProtocol/aztec-packages@9a68034))
* TS keccakf1600
([#7542](AztecProtocol/aztec-packages#7542))
([55fb93d](AztecProtocol/aztec-packages@55fb93d))
* TXE nr deployments, dependency cleanup for CLI
([#7548](AztecProtocol/aztec-packages#7548))
([92ff2fa](AztecProtocol/aztec-packages@92ff2fa))


### Bug Fixes

* 'cannot eval non-comptime global' error
(noir-lang/noir#5586)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Add yq to build image
([#7338](AztecProtocol/aztec-packages#7338))
([6035595](AztecProtocol/aztec-packages@6035595))
* Allow calling a trait method with paths that don't consist of exactly
two segments (noir-lang/noir#5577)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Allow calling a trait method with paths that don't consist of exactly
two segments (noir-lang/noir#5577)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* **avm:** One too many range check rows
([#7499](AztecProtocol/aztec-packages#7499))
([deb6918](AztecProtocol/aztec-packages@deb6918))
* **aztec-nr:** Make impls not stricter than traits
([#7502](AztecProtocol/aztec-packages#7502))
([c498934](AztecProtocol/aztec-packages@c498934))
* Cli fixes
([#7543](AztecProtocol/aztec-packages#7543))
([689000a](AztecProtocol/aztec-packages@689000a))
* Correctly track sources for open LSP documents
(noir-lang/noir#5561)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Do not load the BN254 CRS for verifying client ivc proofs
([#7556](AztecProtocol/aztec-packages#7556))
([e515b71](AztecProtocol/aztec-packages@e515b71))
* Don't bind ports when running the cli
([#7596](AztecProtocol/aztec-packages#7596))
([5a907c6](AztecProtocol/aztec-packages@5a907c6))
* Don't panic when a macro fails to resolve
(noir-lang/noir#5537)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Don't panic when a macro fails to resolve
(noir-lang/noir#5537)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Don't panic when a macro fails to resolve
(noir-lang/noir#5537)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Don't type error when calling certain trait impls in the interpreter
(noir-lang/noir#5471)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Error on empty function bodies
(noir-lang/noir#5519)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Error on empty function bodies
(noir-lang/noir#5519)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Error on empty function bodies
(noir-lang/noir#5519)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Error on trait impl generics count mismatch
(noir-lang/noir#5582)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Fix `uhashmap` test name (noir-lang/noir#5563)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Fix `uhashmap` test name (noir-lang/noir#5563)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Fix `uhashmap` test name (noir-lang/noir#5563)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Fix occurs check (noir-lang/noir#5535)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Fix occurs check (noir-lang/noir#5535)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Fix occurs check (noir-lang/noir#5535)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* **frontend:** Disallow signed numeric generics
(noir-lang/noir#5572)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* **frontend:** Disallow signed numeric generics
(noir-lang/noir#5572)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* **frontend:** Disallow signed numeric generics
(noir-lang/noir#5572)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* **frontend:** Error for when impl is stricter than trait
(noir-lang/noir#5343)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* **frontend:** Error for when impl is stricter than trait
(noir-lang/noir#5343)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* **frontend:** Error for when impl is stricter than trait
(noir-lang/noir#5343)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* **frontend:** Restrict numeric generic types to unsigned ints up to
`u32` (noir-lang/noir#5581)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Let unary traits work at comptime
(noir-lang/noir#5507)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Let unary traits work at comptime
(noir-lang/noir#5507)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Let unary traits work at comptime
(noir-lang/noir#5507)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Lsp hover wasn't always working
(noir-lang/noir#5515)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Mutability in the comptime interpreter
(noir-lang/noir#5517)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Never panic in LSP inlay hints
(noir-lang/noir#5534)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Never panic in LSP inlay hints
(noir-lang/noir#5534)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Never panic in LSP inlay hints
(noir-lang/noir#5534)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Nuke app siloed incoming viewing keys
([#7464](AztecProtocol/aztec-packages#7464))
([24d353a](AztecProtocol/aztec-packages@24d353a))
* Prover JSON RPC
([#7496](AztecProtocol/aztec-packages#7496))
([ca584a0](AztecProtocol/aztec-packages@ca584a0))
* Remove custom entrypoint from CLI image
([#7508](AztecProtocol/aztec-packages#7508))
([c892c6a](AztecProtocol/aztec-packages@c892c6a))
* Revert "feat: Sync from noir
([#7512](AztecProtocol/aztec-packages#7512))"
([#7558](AztecProtocol/aztec-packages#7558))
([548701e](AztecProtocol/aztec-packages@548701e))
* Revert PR
[#5449](AztecProtocol/aztec-packages#5449)
(noir-lang/noir#5548)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Revert PR
[#5449](AztecProtocol/aztec-packages#5449)
(noir-lang/noir#5548)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Revert PR
[#5449](AztecProtocol/aztec-packages#5449)
(noir-lang/noir#5548)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Run macros within comptime contexts
(noir-lang/noir#5576)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Run macros within comptime contexts
(noir-lang/noir#5576)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* **ssa:** More robust array deduplication check
(noir-lang/noir#5547)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* **ssa:** More robust array deduplication check
(noir-lang/noir#5547)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* **ssa:** More robust array deduplication check
(noir-lang/noir#5547)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Type_of for pointer types
(noir-lang/noir#5536)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Type_of for pointer types
(noir-lang/noir#5536)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Type_of for pointer types
(noir-lang/noir#5536)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))


### Miscellaneous

* Add a regression test for bit not on untyped integer
(noir-lang/noir#5589)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Add benchmark for ecdsa (noir-lang/noir#5113)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Added regression test for check_for_underconstrained_values resolve
bug (noir-lang/noir#5490)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* **avm:** Bump SRS to 1 &lt;< 20
([#7575](AztecProtocol/aztec-packages#7575))
([fad37a7](AztecProtocol/aztec-packages@fad37a7))
* **avm:** Count non-zero elems and others
([#7498](AztecProtocol/aztec-packages#7498))
([7d97c0f](AztecProtocol/aztec-packages@7d97c0f))
* **avm:** Nuke declare_views
([#7507](AztecProtocol/aztec-packages#7507))
([7e07ba9](AztecProtocol/aztec-packages@7e07ba9))
* **avm:** Use commit_sparse
([#7581](AztecProtocol/aztec-packages#7581))
([6812f2b](AztecProtocol/aztec-packages@6812f2b))
* Bump hardhat version to `2.22.6`
(noir-lang/noir#5514)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* **ci:** Add workflow to run `nargo check` on external repos
(noir-lang/noir#5355)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* **ci:** Remove bad colon in yaml file
(noir-lang/noir#5520)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Disable aztec-packages CI checks
(noir-lang/noir#5566)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Disable aztec-packages CI checks
(noir-lang/noir#5566)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Disable aztec-packages CI checks
(noir-lang/noir#5566)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* **docs:** Docs for turbofish operator
(noir-lang/noir#5555)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* **docs:** Docs for turbofish operator
(noir-lang/noir#5555)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* **docs:** Docs for turbofish operator
(noir-lang/noir#5555)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* **docs:** Fix migration notes
([#7599](AztecProtocol/aztec-packages#7599))
([ba90e2c](AztecProtocol/aztec-packages@ba90e2c))
* Filter warnings from elaborator in Aztec Macros
(noir-lang/noir#5556)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Filter warnings from elaborator in Aztec Macros
(noir-lang/noir#5556)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Filter warnings from elaborator in Aztec Macros
(noir-lang/noir#5556)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Fix benchmark summary credentials
([#7549](AztecProtocol/aztec-packages#7549))
([817dd10](AztecProtocol/aztec-packages@817dd10))
* Introduce execution oracle
([#7521](AztecProtocol/aztec-packages#7521))
([645aec1](AztecProtocol/aztec-packages@645aec1))
* Moving pub_key_to_bytes to aztec-nr
([#7506](AztecProtocol/aztec-packages#7506))
([5b323a7](AztecProtocol/aztec-packages@5b323a7))
* Noir version for Pedersen commitment and hash
(noir-lang/noir#5431)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Optimizing DA cost with new point compression
([#7473](AztecProtocol/aztec-packages#7473))
([2a5ee4f](AztecProtocol/aztec-packages@2a5ee4f))
* Persist initial header in local store
([#7555](AztecProtocol/aztec-packages#7555))
([d65c692](AztecProtocol/aztec-packages@d65c692))
* Release Noir(0.32.0) (noir-lang/noir#5268)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Release Noir(0.32.0) (noir-lang/noir#5268)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Release Noir(0.32.0) (noir-lang/noir#5268)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Remove `--use-legacy` and resolution code
(noir-lang/noir#5248)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Remove `--use-legacy` and resolution code
(noir-lang/noir#5248)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Remove `--use-legacy` and resolution code
(noir-lang/noir#5248)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Remove comptime scanning pass
(noir-lang/noir#5569)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Remove comptime scanning pass
(noir-lang/noir#5569)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Remove dbg on find_func_with_name
(noir-lang/noir#5526)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Remove dbg on find_func_with_name
(noir-lang/noir#5526)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Remove dbg on find_func_with_name
(noir-lang/noir#5526)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Remove dummy arrays
([#7246](AztecProtocol/aztec-packages#7246))
([a4acd12](AztecProtocol/aztec-packages@a4acd12))
* Remove more aztec-nr warnings (numerics and unused variables)
([#7519](AztecProtocol/aztec-packages#7519))
([3da86cb](AztecProtocol/aztec-packages@3da86cb))
* Remove the remainder of legacy code
(noir-lang/noir#5525)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Remove the remainder of legacy code
(noir-lang/noir#5525)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Remove the remainder of legacy code
(noir-lang/noir#5525)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Remove unknown annotation warning
(noir-lang/noir#5531)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Remove unknown annotation warning
(noir-lang/noir#5531)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Remove unknown annotation warning
(noir-lang/noir#5531)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Replace relative paths to noir-protocol-circuits
([301b34f](AztecProtocol/aztec-packages@301b34f))
* Replace relative paths to noir-protocol-circuits
([0977dec](AztecProtocol/aztec-packages@0977dec))
* Replace relative paths to noir-protocol-circuits
([da071bf](AztecProtocol/aztec-packages@da071bf))
* Replace relative paths to noir-protocol-circuits
([954bcd7](AztecProtocol/aztec-packages@954bcd7))
* Standardize experimental feature disclaimer across documentation
(noir-lang/noir#5367)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Standardize experimental feature disclaimer across documentation
(noir-lang/noir#5367)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Standardize experimental feature disclaimer across documentation
(noir-lang/noir#5367)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Switch to Noir Keccak implementation with variable size support
(noir-lang/noir#5508)
([a26419f](AztecProtocol/aztec-packages@a26419f))
* Switch to Noir Keccak implementation with variable size support
(noir-lang/noir#5508)
([7799fc6](AztecProtocol/aztec-packages@7799fc6))
* Switch to Noir Keccak implementation with variable size support
(noir-lang/noir#5508)
([c39bcdc](AztecProtocol/aztec-packages@c39bcdc))
* Update typo PR script (noir-lang/noir#5488)
([4ec86c0](AztecProtocol/aztec-packages@4ec86c0))
* Use new let syntax for generic numerics
([#7503](AztecProtocol/aztec-packages#7503))
([25e6684](AztecProtocol/aztec-packages@25e6684))
</details>

<details><summary>barretenberg: 0.47.0</summary>

##
[0.47.0](AztecProtocol/aztec-packages@barretenberg-v0.46.7...barretenberg-v0.47.0)
(2024-07-24)


### Features

* **avm:** Concurrency improvements
([#7495](AztecProtocol/aztec-packages#7495))
([0d5c066](AztecProtocol/aztec-packages@0d5c066))
* Bus updates
([#7522](AztecProtocol/aztec-packages#7522))
([bf774c2](AztecProtocol/aztec-packages@bf774c2))
* Make Brillig do integer arithmetic operations using u128 instead of
Bigint
([#7518](AztecProtocol/aztec-packages#7518))
([4a2011e](AztecProtocol/aztec-packages@4a2011e))
* Simple sparse commitment
([#7488](AztecProtocol/aztec-packages#7488))
([df08874](AztecProtocol/aztec-packages@df08874))
* Solidity honk verifier
([#5485](AztecProtocol/aztec-packages#5485))
([8dfebe4](AztecProtocol/aztec-packages@8dfebe4))


### Bug Fixes

* **avm:** One too many range check rows
([#7499](AztecProtocol/aztec-packages#7499))
([deb6918](AztecProtocol/aztec-packages@deb6918))
* Do not load the BN254 CRS for verifying client ivc proofs
([#7556](AztecProtocol/aztec-packages#7556))
([e515b71](AztecProtocol/aztec-packages@e515b71))


### Miscellaneous

* **avm:** Bump SRS to 1 &lt;< 20
([#7575](AztecProtocol/aztec-packages#7575))
([fad37a7](AztecProtocol/aztec-packages@fad37a7))
* **avm:** Count non-zero elems and others
([#7498](AztecProtocol/aztec-packages#7498))
([7d97c0f](AztecProtocol/aztec-packages@7d97c0f))
* **avm:** Nuke declare_views
([#7507](AztecProtocol/aztec-packages#7507))
([7e07ba9](AztecProtocol/aztec-packages@7e07ba9))
* **avm:** Use commit_sparse
([#7581](AztecProtocol/aztec-packages#7581))
([6812f2b](AztecProtocol/aztec-packages@6812f2b))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
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