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: flavor refactor, reduce duplication #3407

Merged
merged 59 commits into from
Nov 30, 2023
Merged

Conversation

ludamad
Copy link
Collaborator

@ludamad ludamad commented Nov 22, 2023

Reduces duplication in Flavor classes by using a macro that combines pointer_view with struct fields (along with a new get_all getter that is perhaps more ergonomic) and subclassing. Note that this is a stepping stone, ideally AztecProtocol/barretenberg#788 is used instead of multiple inheritance
Also resolves AztecProtocol/barretenberg#784

  • Introduces a RefVector class, like std::vector<T&> (which is impossible). It is backed by a pointer, and gives operator[] and iterator semantics on the underlying derefenced pointer. Compare std::vector<std::reference_wrapper>, which would operate more like actual pointers (you change the reference, not the value held by the reference).
  • Introduces a get_all alternative to pointer_view that uses RefVector, update other types to use RefVector, get rid of the HandleType in flavor entity classes
  • Removes some flavor base classes that didn't do much after array backing removal. Now we get rid of virtual base class methods here, but I don't think it makes sense to do polymorphism in two ways. We can instead use concepts if we want to constrain this with a static assert
  • Introduces macros that define flavor classes in flavor_macros.hpp. These remove duplication of pointer view and normal listing.
  • Use inheritance to remove duplication in the larger AllEntities classes in GoblinUltra and GoblinTranslator
  • Removes modernize-use-nodiscard - too noisy a linter setting, I doubt we'd hit a bug that it would fix (i.e. if you return error codes it can be useful to not ignore them).

@AztecBot
Copy link
Collaborator

AztecBot commented Nov 22, 2023

Benchmark results

Metrics with a significant change:

  • note_trial_decrypting_time_in_ms (32): 60.6 (+31%)
Detailed results

All benchmarks are run on txs on the Benchmarking contract on the repository. Each tx consists of a batch call to create_note and increment_balance, which guarantees that each tx has a private call, a nested private call, a public call, and a nested public call, as well as an emitted private note, an unencrypted log, and public storage read and write.

This benchmark source data is available in JSON format on S3 here.

Values are compared against data from master at commit 44bf30b0 and shown if the difference exceeds 1%.

L2 block published to L1

Each column represents the number of txs on an L2 block published to L1.

Metric 8 txs 32 txs 128 txs
l1_rollup_calldata_size_in_bytes 45,444 179,588 716,132
l1_rollup_calldata_gas 222,972 868,160 3,449,624
l1_rollup_execution_gas 842,059 3,595,268 22,204,993
l2_block_processing_time_in_ms 2,037 (-1%) 7,865 (+1%) 31,454
note_successful_decrypting_time_in_ms 317 934 (+2%) 3,412 (+3%)
note_trial_decrypting_time_in_ms 25.8 (+5%) ⚠️ 60.6 (+31%) 199 (+1%)
l2_block_building_time_in_ms 18,834 74,052 297,199
l2_block_rollup_simulation_time_in_ms 15,274 60,085 241,018
l2_block_public_tx_process_time_in_ms 3,510 (-1%) 13,819 55,620

L2 chain processing

Each column represents the number of blocks on the L2 chain where each block has 16 txs.

Metric 5 blocks 10 blocks
node_history_sync_time_in_ms 22,619 44,012
note_history_successful_decrypting_time_in_ms 2,152 (-3%) 4,151 (-1%)
note_history_trial_decrypting_time_in_ms 158 (-2%) 226 (-1%)
node_database_size_in_bytes 3,303,810 3,649,269
pxe_database_size_in_bytes 29,748 59,307

Circuits stats

Stats on running time and I/O sizes collected for every circuit run across all benchmarks.

Circuit circuit_simulation_time_in_ms circuit_input_size_in_bytes circuit_output_size_in_bytes
private-kernel-init 199 43,077 20,441
private-kernel-ordering 115 25,833 9,689
base-rollup 2,537 659,500 873
root-rollup 95.5 (+6%) 4,072 1,097
private-kernel-inner 260 64,484 20,441
public-kernel-private-input 171 (-1%) 25,203 20,441
public-kernel-non-first-iteration 168 25,245 20,441
merge-rollup 11.4 (+4%) 2,592 873

Miscellaneous

Transaction sizes based on how many contracts are deployed in the tx.

Metric 0 deployed contracts 1 deployed contracts
tx_size_in_bytes 10,323 25,938

@@ -246,7 +246,7 @@ template <class Curve> class ZeroMorphWithConcatenationTest : public CommitmentT
prover_transcript,
concatenated_polynomials_views,
c_evaluations,
concatenation_groups_views);
to_vector_of_ref_vectors(concatenation_groups_views));
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

to_vector_of_ref_vectors takes vector of vector to vector of RefVector


/**
* @brief A template class for a reference array. Behaves as if std::array<T&, N> was possible.
*
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Not currently used, but originally I was using it and maybe it will come in handy? I thought that having compile time sized arrays was not worth the type complexity vs extra std::vector allocations/dynamicness, but in tight loops it certainly could be

#include <stdexcept>
#include <vector>

/**
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Simple hand-written reference class like the above

template <typename T, std::size_t... Ns> std::array<T, (Ns + ...)> concatenate(const std::array<T, Ns>&... arrays)
{
std::array<T, (Ns + ...)> result;

Copy link
Collaborator Author

@ludamad ludamad Nov 29, 2023

Choose a reason for hiding this comment

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

Concatenation helper for std::array. I decided to call all of these 'concatenate'. I removed a redundant helper. The other helper was more dense, but I found this one easier to follow. We also didn't really need this to be constexpr

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This should have a namespace to not pollute users of bb as libraries (which may be other components we right, good to be clean). I have added AztecProtocol/barretenberg#794. My preference is to hold off on doing this for when all the flavor classes are also in bb

Copy link
Contributor

Choose a reason for hiding this comment

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

I am tending to use STL functions like copy transform and generate bc I think they can sometimes be more efficient. Your sense is this doesn't matter?

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 could be. If it's smart, it'll realize this is an opportunity for memcpy. But so should the loop compilation.

I'll refactor for cleanliness though

@@ -20,9 +20,9 @@ template <typename Fq, typename Fr, typename Params> class alignas(64) affine_el

constexpr affine_element(const Fq& a, const Fq& b) noexcept;

constexpr affine_element(const affine_element& other) noexcept;
constexpr affine_element(const affine_element& other) = default;

Copy link
Collaborator Author

@ludamad ludamad Nov 29, 2023

Choose a reason for hiding this comment

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

Just some cleanup. Rule of thumb: Unless you're using raw pointers or weird side data that is not actually meant to propagate (e.g. some debug tag), default is right

Copy link
Contributor

Choose a reason for hiding this comment

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

We should run some numbers and/or double check with Zac that this is alright. Is the point that default is not noexcept?

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 can run sanity numbers, but we don't use noexcept everywhere, I'm sure it was just the linter saying it's good to have on the move operators

};

/**
* @brief Container for all witness polynomials used/constructed by the prover.
* @details Shifts are not included here since they do not occupy their own memory.
*/
template <typename DataType, typename HandleType>
class WitnessEntities : public WitnessEntities_<DataType, HandleType, NUM_WITNESS_ENTITIES> {
template <typename DataType> class WireEntities {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Witnesses were split up into WireEntities and DerivedEntities

return view; \
} \
[[nodiscard]] auto pointer_view() const \
{ \
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Move to flavor_macros.hpp

@@ -513,14 +515,14 @@ template <typename Curve> class ZeroMorphVerifier_ {
* @param concatenation_groups_commitments
* @return Commitment
*/
static Commitment compute_C_Z_x(std::vector<Commitment> f_commitments,
std::vector<Commitment> g_commitments,
static Commitment compute_C_Z_x(const std::vector<Commitment>& f_commitments,
Copy link
Contributor

Choose a reason for hiding this comment

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

Eek, thanks for catching and fixing.

* for traversal.
*
* @tparam T The type of elements stored in the vector.
* This should NOT be used for long-term storage, only for efficient passing. Any long-term sharing should use arrays of
Copy link
Contributor

Choose a reason for hiding this comment

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

There's a doxygen tag @warning you could add here. While you're at it there's a funny line break before "for traversal".

}

/**
* @brief Nested iterator class for RefArray, based on indexing into the pointer array.
Copy link
Contributor

Choose a reason for hiding this comment

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

"Array" should be "Vector" in this comment

: storage(ptr_vector)
{}

explicit RefVector(std::vector<T>& vector)
Copy link
Contributor

Choose a reason for hiding this comment

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

also const?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Can't be, that would make the ref const, forbidding later modification

*/
template <typename T> RefVector<T> concatenate(const RefVector<T>& ref_vector, const auto&... ref_vectors)
{
std::vector<T*> concatenated;
Copy link
Contributor

Choose a reason for hiding this comment

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

I supposed you tried to reserve space here but weren't able to fold an addition of the sizes of the ref vectors?

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 I just didn't feel it would matter all that much, but certainly can do that fold.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

For a utility, it makes sense

return RefVector<T>{ concatenated };
}

template <typename T> static std::vector<RefVector<T>> to_vector_of_ref_vectors(std::vector<std::vector<T>>& vec)
Copy link
Contributor

Choose a reason for hiding this comment

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

also const?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Can't be const as we want non-const refs out

template <typename T, std::size_t... Ns> std::array<T, (Ns + ...)> concatenate(const std::array<T, Ns>&... arrays)
{
std::array<T, (Ns + ...)> result;

Copy link
Contributor

Choose a reason for hiding this comment

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

I am tending to use STL functions like copy transform and generate bc I think they can sometimes be more efficient. Your sense is this doesn't matter?

@@ -20,9 +20,9 @@ template <typename Fq, typename Fr, typename Params> class alignas(64) affine_el

constexpr affine_element(const Fq& a, const Fq& b) noexcept;

constexpr affine_element(const affine_element& other) noexcept;
constexpr affine_element(const affine_element& other) = default;

Copy link
Contributor

Choose a reason for hiding this comment

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

We should run some numbers and/or double check with Zac that this is alright. Is the point that default is not noexcept?

transcript_reset_accumulator, // column 70
precompute_select, // column 71
lookup_read_counts_0, // column 72
lookup_read_counts_1); // column 73
Copy link
Contributor

Choose a reason for hiding this comment

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

75 members before = 73 members now + 2 derived witnesses z_perm and lookup_inverse

};

/**
* @brief Container for all witness polynomials used/constructed by the prover.
* @details Shifts are not included here since they do not occupy their own memory.
*/
template <typename DataType, typename HandleType>
class WitnessEntities : public WitnessEntities_<DataType, HandleType, NUM_WITNESS_ENTITIES> {
template <typename DataType> class WitnessEntities {
Copy link
Contributor

Choose a reason for hiding this comment

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

In the ECCVM flavor, WitnessEntities has become WireEntities and had its derived witnesses split out. That hasn't happened here. Is that intentional?

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 was just a small class. I guess I applied 'do stuff to break up the really big flavor entity listings'

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

happy to take consistency as a fast follow issue, just want to stem the tide of merge conflicts coming in

Copy link
Contributor

Choose a reason for hiding this comment

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

OK thanks, yeah I think consistency across flavors is a big plus but it can happen in a follow-on

@ludamad
Copy link
Collaborator Author

ludamad commented Nov 29, 2023

@codygunton I have checked timings and they are similar + re-added noexcept just in case, but I'm sure it was just copied over without being needed (we could have many functions be noexcept, wouldn't help the compiler much). I have gone over review feedback and adjusted or responded accordingly

@ludamad ludamad force-pushed the feat/flavor-refactor branch from 87cb00f to 6289427 Compare November 30, 2023 01:55
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.

Really nice 1000+-line reduction of boilerplate.

};

/**
* @brief Container for all witness polynomials used/constructed by the prover.
* @details Shifts are not included here since they do not occupy their own memory.
*/
template <typename DataType, typename HandleType>
class WitnessEntities : public WitnessEntities_<DataType, HandleType, NUM_WITNESS_ENTITIES> {
template <typename DataType> class WitnessEntities {
Copy link
Contributor

Choose a reason for hiding this comment

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

OK thanks, yeah I think consistency across flavors is a big plus but it can happen in a follow-on

@codygunton codygunton merged commit 8d6b013 into master Nov 30, 2023
81 checks passed
@codygunton codygunton deleted the feat/flavor-refactor branch November 30, 2023 14:43
rahul-kothari pushed a commit that referenced this pull request Dec 5, 2023
🤖 I have created a release *beep* *boop*
---


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

##
[0.16.2](aztec-packages-v0.16.1...aztec-packages-v0.16.2)
(2023-12-05)


### Features

* Add tree snapshots
([#3468](#3468))
([7a86bb3](7a86bb3))
* **AVM:** First version for mini AVM (ADD, RETURN, CALLDATACOPY)
([#3439](#3439))
([b3af146](b3af146))
* Circuit optimized indexed tree batch insertion
([#3367](#3367))
([187d2f7](187d2f7))
* Devnet
([#3473](#3473))
([97c40c2](97c40c2))
* **docs:** Add simple private voting tutorial
([#3402](#3402))
([a6e0352](a6e0352))
* **docs:** Document slow update tree
([#3416](#3416))
([8e9f103](8e9f103))
* Flavor refactor, reduce duplication
([#3407](#3407))
([8d6b013](8d6b013))
* Inclusion and non-inclusion proofs experiment
([#3255](#3255))
([b911e65](b911e65)),
closes
[#2572](#2572)
[#2584](#2584)
* New Poseidon2 circuit builder gates
([#3346](#3346))
([91cb369](91cb369))
* New Poseidon2 relations
([#3406](#3406))
([14b9736](14b9736))
* Pull latest noir for brillig optimizations
([#3464](#3464))
([d356bac](d356bac))
* Refactor StandardIndexedTree for abstract leaves and preimages and
optimized it
([#3530](#3530))
([63b9cdc](63b9cdc))
* Removing historical roots from circuits
([#3544](#3544))
([9f682cb](9f682cb))
* Seperate pil files for sub machines
([#3454](#3454))
([d09d6f5](d09d6f5))
* Throw compile time error if contract has too many fns
([#3536](#3536))
([ad66ad0](ad66ad0))
* Use tree snapshots in aztec-node/pxe/oracles
([#3504](#3504))
([6e40427](6e40427))
* Yellow paper cross-chain communication
([#3477](#3477))
([d51df8c](d51df8c))


### Bug Fixes

* Check version, chainid and sender for cross-chain l1 to l2 msgs
([#3457](#3457))
([d251703](d251703))
* **ci:** Add DEPLOY_TAG in fork log group
([#3510](#3510))
([f021041](f021041))
* **ci:** Check if l1 contracts img has been deployed
([#3531](#3531))
([ac1f03c](ac1f03c))
* **ci:** Comment out LB listeners (for now)
([#3519](#3519))
([640aabc](640aabc))
* **ci:** Count for bootnode discovery service
([#3517](#3517))
([2a38788](2a38788))
* **ci:** Define REPOSITORY in deploy_l1_contracts
([#3514](#3514))
([b246d1b](b246d1b))
* **ci:** Don't deploy to npm on master merge
([#3502](#3502))
([a138860](a138860))
* **ci:** Env vars for deploying l1-contracts
([#3513](#3513))
([27106b2](27106b2))
* **ci:** Export FORK_API_KEY from setup_env
([#3512](#3512))
([7e81e2c](7e81e2c))
* **ci:** Fix docker architecture for devnet packages
([#3505](#3505))
([66d0287](66d0287))
* **ci:** Fix faucet vars + don't deploy contracts from node
([#3553](#3553))
([c7176f6](c7176f6))
* **ci:** L1 contracts directories
([#3545](#3545))
([63dd0c8](63dd0c8))
* **ci:** Login to ecr to fetch contracts image
([#3538](#3538))
([b033538](b033538))
* **ci:** Remove unused ADDRESS vars & export private key vars
([#3520](#3520))
([d889359](d889359))
* **ci:** Set default value for $TO_TAINT
([#3508](#3508))
([8b6688a](8b6688a))
* **ci:** Terraform listener resources
([#3534](#3534))
([c3b9cce](c3b9cce))
* **ci:** Terraform_deploy for devnet
([#3516](#3516))
([ba3803e](ba3803e))
* **ci:** Tf variable references &
formatting([#3522](#3522))
([d37cf52](d37cf52))
* Disable e2e-slow-tree
([#3459](#3459))
([5927103](5927103))
* **docs:** Update package name of aztec-cli
([#3474](#3474))
([98d7ba0](98d7ba0))
* Double slash in deployed faucet routes
([#3555](#3555))
([6c704a5](6c704a5))
* Faucet lb_listener priority
([#3554](#3554))
([3f56dd7](3f56dd7))
* Handling low_nullifier.next_value equal to 0
([#3562](#3562))
([c800502](c800502)),
closes
[#3550](#3550)
* Remove x86_64 form l1-contracts img tag
([#3549](#3549))
([6828f1a](6828f1a))
* Throw error if fn sig has whitespaces
([#3509](#3509))
([7671063](7671063)),
closes
[#3055](#3055)


### Miscellaneous

* (yellow paper) public-vm section of yellow paper
([#3493](#3493))
([8ff3780](8ff3780))
* Add mermaid diagram support
([#3499](#3499))
([537d552](537d552))
* Add yellow paper build check to CI
([#3490](#3490))
([3ebd2f2](3ebd2f2))
* **avm:** Enable AVM unit tests in CI
([#3463](#3463))
([051dda9](051dda9)),
closes
[#3461](#3461)
* **bb:** Pointer_view to reference-based get_all
([#3495](#3495))
([50d7327](50d7327))
* **bb:** Reuse entities from GoblinUltra in GoblinUltraRecursive
([#3521](#3521))
([8259636](8259636))
* Build the acir test vectors as part of CI.
([#3447](#3447))
([1a2d1f8](1a2d1f8))
* Containers reduced to ~100MB total. ~30s installation.
([#3487](#3487))
([b49cef2](b49cef2))
* **docs:** Fix broken Noir stdlib link
([#3496](#3496))
([787d59a](787d59a))
* Field-agnostic and reusable transcript
([#3433](#3433))
([d78775a](d78775a))
* Fix broken link in txs in yellow paper
([#3484](#3484))
([798565d](798565d))
* Fix yellow paper build error
([32881a4](32881a4))
* Fixed typo in build system
([#3501](#3501))
([3a80ac2](3a80ac2))
* Increase functions per contract from 16 to 32
([#3503](#3503))
([ebdeea3](ebdeea3))
* Naming fixes
([#3476](#3476))
([1db30bf](1db30bf))
* Optimise bb.js package size and sandox/cli dockerfiles to unbloat
final containers.
([#3462](#3462))
([cb3db5d](cb3db5d))
* Pin node version in docker base images and bump nvmrc
([#3537](#3537))
([5d3895a](5d3895a))
* Recursive verifier updates
([#3452](#3452))
([dbb4a12](dbb4a12))
* Refactor `WitnessEntities` to be able to derive `WitnessCommitments`
from it
([#3479](#3479))
([9c9b561](9c9b561))
* Remove temporary logging
([#3466](#3466))
([8c8387b](8c8387b))
* Transcript handled through shared_ptr
([#3434](#3434))
([30fca33](30fca33))
* Typo fixes
([#3488](#3488))
([d9a44dc](d9a44dc))
* **yellow_paper:** Public&lt;&gt;private messaging
([#3491](#3491))
([6ecc406](6ecc406))


### Documentation

* Add transaction section to yellow paper
([#3418](#3418))
([44bf30b](44bf30b))
* Apply comments from Jan on contracts
([#3539](#3539))
([e351873](e351873))
* Fees update in yellow paper
([#3486](#3486))
([a8b2608](a8b2608))
* First go at generated AVM instruction set doc
([#3469](#3469))
([8cc54a4](8cc54a4))
* Further update to the yellow paper
([#3542](#3542))
([751bb6a](751bb6a))
* Yellow paper updates
([#3478](#3478))
([11f754d](11f754d))
* Yellow paper updates for private message delivery
([#3472](#3472))
([6ba9e18](6ba9e18))
* **yellow-paper:** Sync, enqueued, and static calls
([#3494](#3494))
([00835c6](00835c6)),
closes
[#3108](#3108)
* **yellowpaper:** Instruction set updates and fixes
([#3515](#3515))
([bfb61dd](bfb61dd))
</details>

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

##
[0.16.2](barretenberg.js-v0.16.1...barretenberg.js-v0.16.2)
(2023-12-05)


### Miscellaneous

* Optimise bb.js package size and sandox/cli dockerfiles to unbloat
final containers.
([#3462](#3462))
([cb3db5d](cb3db5d))
* Pin node version in docker base images and bump nvmrc
([#3537](#3537))
([5d3895a](5d3895a))
</details>

<details><summary>barretenberg: 0.16.2</summary>

##
[0.16.2](barretenberg-v0.16.1...barretenberg-v0.16.2)
(2023-12-05)


### Features

* **AVM:** First version for mini AVM (ADD, RETURN, CALLDATACOPY)
([#3439](#3439))
([b3af146](b3af146))
* Flavor refactor, reduce duplication
([#3407](#3407))
([8d6b013](8d6b013))
* New Poseidon2 circuit builder gates
([#3346](#3346))
([91cb369](91cb369))
* New Poseidon2 relations
([#3406](#3406))
([14b9736](14b9736))
* Pull latest noir for brillig optimizations
([#3464](#3464))
([d356bac](d356bac))
* Seperate pil files for sub machines
([#3454](#3454))
([d09d6f5](d09d6f5))


### Miscellaneous

* **avm:** Enable AVM unit tests in CI
([#3463](#3463))
([051dda9](051dda9)),
closes
[#3461](#3461)
* **bb:** Pointer_view to reference-based get_all
([#3495](#3495))
([50d7327](50d7327))
* **bb:** Reuse entities from GoblinUltra in GoblinUltraRecursive
([#3521](#3521))
([8259636](8259636))
* Build the acir test vectors as part of CI.
([#3447](#3447))
([1a2d1f8](1a2d1f8))
* Field-agnostic and reusable transcript
([#3433](#3433))
([d78775a](d78775a))
* Optimise bb.js package size and sandox/cli dockerfiles to unbloat
final containers.
([#3462](#3462))
([cb3db5d](cb3db5d))
* Pin node version in docker base images and bump nvmrc
([#3537](#3537))
([5d3895a](5d3895a))
* Recursive verifier updates
([#3452](#3452))
([dbb4a12](dbb4a12))
* Refactor `WitnessEntities` to be able to derive `WitnessCommitments`
from it
([#3479](#3479))
([9c9b561](9c9b561))
* Transcript handled through shared_ptr
([#3434](#3434))
([30fca33](30fca33))
* Typo fixes
([#3488](#3488))
([d9a44dc](d9a44dc))
</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 Dec 6, 2023
🤖 I have created a release *beep* *boop*
---


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

##
[0.16.2](AztecProtocol/aztec-packages@aztec-packages-v0.16.1...aztec-packages-v0.16.2)
(2023-12-05)


### Features

* Add tree snapshots
([#3468](AztecProtocol/aztec-packages#3468))
([7a86bb3](AztecProtocol/aztec-packages@7a86bb3))
* **AVM:** First version for mini AVM (ADD, RETURN, CALLDATACOPY)
([#3439](AztecProtocol/aztec-packages#3439))
([b3af146](AztecProtocol/aztec-packages@b3af146))
* Circuit optimized indexed tree batch insertion
([#3367](AztecProtocol/aztec-packages#3367))
([187d2f7](AztecProtocol/aztec-packages@187d2f7))
* Devnet
([#3473](AztecProtocol/aztec-packages#3473))
([97c40c2](AztecProtocol/aztec-packages@97c40c2))
* **docs:** Add simple private voting tutorial
([#3402](AztecProtocol/aztec-packages#3402))
([a6e0352](AztecProtocol/aztec-packages@a6e0352))
* **docs:** Document slow update tree
([#3416](AztecProtocol/aztec-packages#3416))
([8e9f103](AztecProtocol/aztec-packages@8e9f103))
* Flavor refactor, reduce duplication
([#3407](AztecProtocol/aztec-packages#3407))
([8d6b013](AztecProtocol/aztec-packages@8d6b013))
* Inclusion and non-inclusion proofs experiment
([#3255](AztecProtocol/aztec-packages#3255))
([b911e65](AztecProtocol/aztec-packages@b911e65)),
closes
[#2572](AztecProtocol/aztec-packages#2572)
[#2584](AztecProtocol/aztec-packages#2584)
* New Poseidon2 circuit builder gates
([#3346](AztecProtocol/aztec-packages#3346))
([91cb369](AztecProtocol/aztec-packages@91cb369))
* New Poseidon2 relations
([#3406](AztecProtocol/aztec-packages#3406))
([14b9736](AztecProtocol/aztec-packages@14b9736))
* Pull latest noir for brillig optimizations
([#3464](AztecProtocol/aztec-packages#3464))
([d356bac](AztecProtocol/aztec-packages@d356bac))
* Refactor StandardIndexedTree for abstract leaves and preimages and
optimized it
([#3530](AztecProtocol/aztec-packages#3530))
([63b9cdc](AztecProtocol/aztec-packages@63b9cdc))
* Removing historical roots from circuits
([#3544](AztecProtocol/aztec-packages#3544))
([9f682cb](AztecProtocol/aztec-packages@9f682cb))
* Seperate pil files for sub machines
([#3454](AztecProtocol/aztec-packages#3454))
([d09d6f5](AztecProtocol/aztec-packages@d09d6f5))
* Throw compile time error if contract has too many fns
([#3536](AztecProtocol/aztec-packages#3536))
([ad66ad0](AztecProtocol/aztec-packages@ad66ad0))
* Use tree snapshots in aztec-node/pxe/oracles
([#3504](AztecProtocol/aztec-packages#3504))
([6e40427](AztecProtocol/aztec-packages@6e40427))
* Yellow paper cross-chain communication
([#3477](AztecProtocol/aztec-packages#3477))
([d51df8c](AztecProtocol/aztec-packages@d51df8c))


### Bug Fixes

* Check version, chainid and sender for cross-chain l1 to l2 msgs
([#3457](AztecProtocol/aztec-packages#3457))
([d251703](AztecProtocol/aztec-packages@d251703))
* **ci:** Add DEPLOY_TAG in fork log group
([#3510](AztecProtocol/aztec-packages#3510))
([f021041](AztecProtocol/aztec-packages@f021041))
* **ci:** Check if l1 contracts img has been deployed
([#3531](AztecProtocol/aztec-packages#3531))
([ac1f03c](AztecProtocol/aztec-packages@ac1f03c))
* **ci:** Comment out LB listeners (for now)
([#3519](AztecProtocol/aztec-packages#3519))
([640aabc](AztecProtocol/aztec-packages@640aabc))
* **ci:** Count for bootnode discovery service
([#3517](AztecProtocol/aztec-packages#3517))
([2a38788](AztecProtocol/aztec-packages@2a38788))
* **ci:** Define REPOSITORY in deploy_l1_contracts
([#3514](AztecProtocol/aztec-packages#3514))
([b246d1b](AztecProtocol/aztec-packages@b246d1b))
* **ci:** Don't deploy to npm on master merge
([#3502](AztecProtocol/aztec-packages#3502))
([a138860](AztecProtocol/aztec-packages@a138860))
* **ci:** Env vars for deploying l1-contracts
([#3513](AztecProtocol/aztec-packages#3513))
([27106b2](AztecProtocol/aztec-packages@27106b2))
* **ci:** Export FORK_API_KEY from setup_env
([#3512](AztecProtocol/aztec-packages#3512))
([7e81e2c](AztecProtocol/aztec-packages@7e81e2c))
* **ci:** Fix docker architecture for devnet packages
([#3505](AztecProtocol/aztec-packages#3505))
([66d0287](AztecProtocol/aztec-packages@66d0287))
* **ci:** Fix faucet vars + don't deploy contracts from node
([#3553](AztecProtocol/aztec-packages#3553))
([c7176f6](AztecProtocol/aztec-packages@c7176f6))
* **ci:** L1 contracts directories
([#3545](AztecProtocol/aztec-packages#3545))
([63dd0c8](AztecProtocol/aztec-packages@63dd0c8))
* **ci:** Login to ecr to fetch contracts image
([#3538](AztecProtocol/aztec-packages#3538))
([b033538](AztecProtocol/aztec-packages@b033538))
* **ci:** Remove unused ADDRESS vars & export private key vars
([#3520](AztecProtocol/aztec-packages#3520))
([d889359](AztecProtocol/aztec-packages@d889359))
* **ci:** Set default value for $TO_TAINT
([#3508](AztecProtocol/aztec-packages#3508))
([8b6688a](AztecProtocol/aztec-packages@8b6688a))
* **ci:** Terraform listener resources
([#3534](AztecProtocol/aztec-packages#3534))
([c3b9cce](AztecProtocol/aztec-packages@c3b9cce))
* **ci:** Terraform_deploy for devnet
([#3516](AztecProtocol/aztec-packages#3516))
([ba3803e](AztecProtocol/aztec-packages@ba3803e))
* **ci:** Tf variable references &
formatting([#3522](AztecProtocol/aztec-packages#3522))
([d37cf52](AztecProtocol/aztec-packages@d37cf52))
* Disable e2e-slow-tree
([#3459](AztecProtocol/aztec-packages#3459))
([5927103](AztecProtocol/aztec-packages@5927103))
* **docs:** Update package name of aztec-cli
([#3474](AztecProtocol/aztec-packages#3474))
([98d7ba0](AztecProtocol/aztec-packages@98d7ba0))
* Double slash in deployed faucet routes
([#3555](AztecProtocol/aztec-packages#3555))
([6c704a5](AztecProtocol/aztec-packages@6c704a5))
* Faucet lb_listener priority
([#3554](AztecProtocol/aztec-packages#3554))
([3f56dd7](AztecProtocol/aztec-packages@3f56dd7))
* Handling low_nullifier.next_value equal to 0
([#3562](AztecProtocol/aztec-packages#3562))
([c800502](AztecProtocol/aztec-packages@c800502)),
closes
[#3550](AztecProtocol/aztec-packages#3550)
* Remove x86_64 form l1-contracts img tag
([#3549](AztecProtocol/aztec-packages#3549))
([6828f1a](AztecProtocol/aztec-packages@6828f1a))
* Throw error if fn sig has whitespaces
([#3509](AztecProtocol/aztec-packages#3509))
([7671063](AztecProtocol/aztec-packages@7671063)),
closes
[#3055](AztecProtocol/aztec-packages#3055)


### Miscellaneous

* (yellow paper) public-vm section of yellow paper
([#3493](AztecProtocol/aztec-packages#3493))
([8ff3780](AztecProtocol/aztec-packages@8ff3780))
* Add mermaid diagram support
([#3499](AztecProtocol/aztec-packages#3499))
([537d552](AztecProtocol/aztec-packages@537d552))
* Add yellow paper build check to CI
([#3490](AztecProtocol/aztec-packages#3490))
([3ebd2f2](AztecProtocol/aztec-packages@3ebd2f2))
* **avm:** Enable AVM unit tests in CI
([#3463](AztecProtocol/aztec-packages#3463))
([051dda9](AztecProtocol/aztec-packages@051dda9)),
closes
[#3461](AztecProtocol/aztec-packages#3461)
* **bb:** Pointer_view to reference-based get_all
([#3495](AztecProtocol/aztec-packages#3495))
([50d7327](AztecProtocol/aztec-packages@50d7327))
* **bb:** Reuse entities from GoblinUltra in GoblinUltraRecursive
([#3521](AztecProtocol/aztec-packages#3521))
([8259636](AztecProtocol/aztec-packages@8259636))
* Build the acir test vectors as part of CI.
([#3447](AztecProtocol/aztec-packages#3447))
([1a2d1f8](AztecProtocol/aztec-packages@1a2d1f8))
* Containers reduced to ~100MB total. ~30s installation.
([#3487](AztecProtocol/aztec-packages#3487))
([b49cef2](AztecProtocol/aztec-packages@b49cef2))
* **docs:** Fix broken Noir stdlib link
([#3496](AztecProtocol/aztec-packages#3496))
([787d59a](AztecProtocol/aztec-packages@787d59a))
* Field-agnostic and reusable transcript
([#3433](AztecProtocol/aztec-packages#3433))
([d78775a](AztecProtocol/aztec-packages@d78775a))
* Fix broken link in txs in yellow paper
([#3484](AztecProtocol/aztec-packages#3484))
([798565d](AztecProtocol/aztec-packages@798565d))
* Fix yellow paper build error
([32881a4](AztecProtocol/aztec-packages@32881a4))
* Fixed typo in build system
([#3501](AztecProtocol/aztec-packages#3501))
([3a80ac2](AztecProtocol/aztec-packages@3a80ac2))
* Increase functions per contract from 16 to 32
([#3503](AztecProtocol/aztec-packages#3503))
([ebdeea3](AztecProtocol/aztec-packages@ebdeea3))
* Naming fixes
([#3476](AztecProtocol/aztec-packages#3476))
([1db30bf](AztecProtocol/aztec-packages@1db30bf))
* Optimise bb.js package size and sandox/cli dockerfiles to unbloat
final containers.
([#3462](AztecProtocol/aztec-packages#3462))
([cb3db5d](AztecProtocol/aztec-packages@cb3db5d))
* Pin node version in docker base images and bump nvmrc
([#3537](AztecProtocol/aztec-packages#3537))
([5d3895a](AztecProtocol/aztec-packages@5d3895a))
* Recursive verifier updates
([#3452](AztecProtocol/aztec-packages#3452))
([dbb4a12](AztecProtocol/aztec-packages@dbb4a12))
* Refactor `WitnessEntities` to be able to derive `WitnessCommitments`
from it
([#3479](AztecProtocol/aztec-packages#3479))
([9c9b561](AztecProtocol/aztec-packages@9c9b561))
* Remove temporary logging
([#3466](AztecProtocol/aztec-packages#3466))
([8c8387b](AztecProtocol/aztec-packages@8c8387b))
* Transcript handled through shared_ptr
([#3434](AztecProtocol/aztec-packages#3434))
([30fca33](AztecProtocol/aztec-packages@30fca33))
* Typo fixes
([#3488](AztecProtocol/aztec-packages#3488))
([d9a44dc](AztecProtocol/aztec-packages@d9a44dc))
* **yellow_paper:** Public&lt;&gt;private messaging
([#3491](AztecProtocol/aztec-packages#3491))
([6ecc406](AztecProtocol/aztec-packages@6ecc406))


### Documentation

* Add transaction section to yellow paper
([#3418](AztecProtocol/aztec-packages#3418))
([44bf30b](AztecProtocol/aztec-packages@44bf30b))
* Apply comments from Jan on contracts
([#3539](AztecProtocol/aztec-packages#3539))
([e351873](AztecProtocol/aztec-packages@e351873))
* Fees update in yellow paper
([#3486](AztecProtocol/aztec-packages#3486))
([a8b2608](AztecProtocol/aztec-packages@a8b2608))
* First go at generated AVM instruction set doc
([#3469](AztecProtocol/aztec-packages#3469))
([8cc54a4](AztecProtocol/aztec-packages@8cc54a4))
* Further update to the yellow paper
([#3542](AztecProtocol/aztec-packages#3542))
([751bb6a](AztecProtocol/aztec-packages@751bb6a))
* Yellow paper updates
([#3478](AztecProtocol/aztec-packages#3478))
([11f754d](AztecProtocol/aztec-packages@11f754d))
* Yellow paper updates for private message delivery
([#3472](AztecProtocol/aztec-packages#3472))
([6ba9e18](AztecProtocol/aztec-packages@6ba9e18))
* **yellow-paper:** Sync, enqueued, and static calls
([#3494](AztecProtocol/aztec-packages#3494))
([00835c6](AztecProtocol/aztec-packages@00835c6)),
closes
[#3108](AztecProtocol/aztec-packages#3108)
* **yellowpaper:** Instruction set updates and fixes
([#3515](AztecProtocol/aztec-packages#3515))
([bfb61dd](AztecProtocol/aztec-packages@bfb61dd))
</details>

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

##
[0.16.2](AztecProtocol/aztec-packages@barretenberg.js-v0.16.1...barretenberg.js-v0.16.2)
(2023-12-05)


### Miscellaneous

* Optimise bb.js package size and sandox/cli dockerfiles to unbloat
final containers.
([#3462](AztecProtocol/aztec-packages#3462))
([cb3db5d](AztecProtocol/aztec-packages@cb3db5d))
* Pin node version in docker base images and bump nvmrc
([#3537](AztecProtocol/aztec-packages#3537))
([5d3895a](AztecProtocol/aztec-packages@5d3895a))
</details>

<details><summary>barretenberg: 0.16.2</summary>

##
[0.16.2](AztecProtocol/aztec-packages@barretenberg-v0.16.1...barretenberg-v0.16.2)
(2023-12-05)


### Features

* **AVM:** First version for mini AVM (ADD, RETURN, CALLDATACOPY)
([#3439](AztecProtocol/aztec-packages#3439))
([b3af146](AztecProtocol/aztec-packages@b3af146))
* Flavor refactor, reduce duplication
([#3407](AztecProtocol/aztec-packages#3407))
([8d6b013](AztecProtocol/aztec-packages@8d6b013))
* New Poseidon2 circuit builder gates
([#3346](AztecProtocol/aztec-packages#3346))
([91cb369](AztecProtocol/aztec-packages@91cb369))
* New Poseidon2 relations
([#3406](AztecProtocol/aztec-packages#3406))
([14b9736](AztecProtocol/aztec-packages@14b9736))
* Pull latest noir for brillig optimizations
([#3464](AztecProtocol/aztec-packages#3464))
([d356bac](AztecProtocol/aztec-packages@d356bac))
* Seperate pil files for sub machines
([#3454](AztecProtocol/aztec-packages#3454))
([d09d6f5](AztecProtocol/aztec-packages@d09d6f5))


### Miscellaneous

* **avm:** Enable AVM unit tests in CI
([#3463](AztecProtocol/aztec-packages#3463))
([051dda9](AztecProtocol/aztec-packages@051dda9)),
closes
[#3461](AztecProtocol/aztec-packages#3461)
* **bb:** Pointer_view to reference-based get_all
([#3495](AztecProtocol/aztec-packages#3495))
([50d7327](AztecProtocol/aztec-packages@50d7327))
* **bb:** Reuse entities from GoblinUltra in GoblinUltraRecursive
([#3521](AztecProtocol/aztec-packages#3521))
([8259636](AztecProtocol/aztec-packages@8259636))
* Build the acir test vectors as part of CI.
([#3447](AztecProtocol/aztec-packages#3447))
([1a2d1f8](AztecProtocol/aztec-packages@1a2d1f8))
* Field-agnostic and reusable transcript
([#3433](AztecProtocol/aztec-packages#3433))
([d78775a](AztecProtocol/aztec-packages@d78775a))
* Optimise bb.js package size and sandox/cli dockerfiles to unbloat
final containers.
([#3462](AztecProtocol/aztec-packages#3462))
([cb3db5d](AztecProtocol/aztec-packages@cb3db5d))
* Pin node version in docker base images and bump nvmrc
([#3537](AztecProtocol/aztec-packages#3537))
([5d3895a](AztecProtocol/aztec-packages@5d3895a))
* Recursive verifier updates
([#3452](AztecProtocol/aztec-packages#3452))
([dbb4a12](AztecProtocol/aztec-packages@dbb4a12))
* Refactor `WitnessEntities` to be able to derive `WitnessCommitments`
from it
([#3479](AztecProtocol/aztec-packages#3479))
([9c9b561](AztecProtocol/aztec-packages@9c9b561))
* Transcript handled through shared_ptr
([#3434](AztecProtocol/aztec-packages#3434))
([30fca33](AztecProtocol/aztec-packages@30fca33))
* Typo fixes
([#3488](AztecProtocol/aztec-packages#3488))
([d9a44dc](AztecProtocol/aztec-packages@d9a44dc))
</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.

Brittleness in translator relation tests
4 participants