-
Notifications
You must be signed in to change notification settings - Fork 234
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(avm): Bytecode parsing and proof generation #4191
Conversation
f426be5
to
e392ef5
Compare
Benchmark resultsMetrics with a significant change:
Detailed resultsAll benchmarks are run on txs on the This benchmark source data is available in JSON format on S3 here. Values are compared against data from master at commit L2 block published to L1Each column represents the number of txs on an L2 block published to L1.
L2 chain processingEach column represents the number of blocks on the L2 chain where each block has 16 txs.
Circuits statsStats on running time and I/O sizes collected for every circuit run across all benchmarks.
Tree insertion statsThe duration to insert a fixed batch of leaves into each tree type.
MiscellaneousTransaction sizes based on how many contracts are deployed in the tx.
Transaction processing duration by data writes.
|
4e55ad7
to
10649b9
Compare
10649b9
to
c0126da
Compare
barretenberg/cpp/src/barretenberg/vm/avm_trace/AvmMini_execution.cpp
Outdated
Show resolved
Hide resolved
d028db6
to
ede2dfb
Compare
ede2dfb
to
cc9652d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Added some comments. Approved, but it might be good to get Facundo's eyes on this too. Not sure if he has the bandwidth at the moment, so at the very least let's bookmark these discussions for later.
barretenberg/cpp/src/barretenberg/vm/avm_trace/AvmMini_execution.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/vm/avm_trace/AvmMini_execution.cpp
Outdated
Show resolved
Hide resolved
case AvmMemoryTag::U8: | ||
case AvmMemoryTag::U16: | ||
case AvmMemoryTag::U32: | ||
val = inst.operands.at(0); | ||
dst_offset = inst.operands.at(1); | ||
break; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Comment why u8 and u16 can use the same codepath as u32
switch (inst.op_code) { | ||
case OpCode::ADD: | ||
trace_builder.add(inst.operands.at(0), inst.operands.at(1), inst.operands.at(2), inst.in_tag); | ||
break; | ||
case OpCode::SUB: | ||
trace_builder.sub(inst.operands.at(0), inst.operands.at(1), inst.operands.at(2), inst.in_tag); | ||
break; | ||
case OpCode::MUL: | ||
trace_builder.mul(inst.operands.at(0), inst.operands.at(1), inst.operands.at(2), inst.in_tag); | ||
break; | ||
case OpCode::DIV: | ||
trace_builder.div(inst.operands.at(0), inst.operands.at(1), inst.operands.at(2), inst.in_tag); | ||
break; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably best to think about how we've implemented the TS instruction classes and the TS "interpreter" and keep track of our decisions to do things the same/differently here.
I'm perfectly fine with the answer "let's just make it a switch-case to keep it simple for now", or "this way of representing instructions and this switch-case may be more efficient than the more object-oriented/functional way it's handled in TS." But it'd be good to get it written in comments or elsewhere just so in the future it's easier to decide to change it or leave it alone.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall great!
@@ -12,6 +13,9 @@ namespace avm_trace { | |||
// Number of rows | |||
static const size_t AVM_TRACE_SIZE = 256; | |||
enum class IntermRegister : uint32_t { IA = 0, IB = 1, IC = 2 }; | |||
|
|||
// Keep following enum in sync with MAX_NEM_TAG below | |||
enum class AvmMemoryTag : uint32_t { U0 = 0, U8 = 1, U16 = 2, U32 = 3, U64 = 4, U128 = 5, FF = 6 }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could go in the enum itself as MAX, then you can just check for < AvmMemoryTag.MAX
, this will ensure it remains up to date
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Then, MAX would be a valid value for the enum which is not what I want.
Adding a method in an enum class in cpp is also not possible unfortunately.
Do you see a better way?
|
||
namespace { | ||
|
||
// TODO: move to a common utils BB file (following code copied from ecdsa.test.cpp) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just drawing attention
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have added a utils file with this routine.
// Parsing, trace generation and proving is verified. | ||
TEST_F(AvmMiniExecutionTests, basicAddReturn) | ||
{ | ||
std::string bytecode_hex = "00" // ADD |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think hardcoding these as strings may become a tad unweildly to maintain as our opcode numbers move around with possible spec changes, I will not block this work, but we should consider having some kind of builder to do this in a more sustainable way. ( it could reuse typescript maybe )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I hesitated to be honest. For more complex bytecode, we will have to change this or rely on Noir.
I do not think we will change very often the opcode value.
Having hardcoded hex test vectors has a certain benefit. Using code to generate bytecode might lead to doing the same mistake in the code and the test generation code.
EXPECT_EQ(instructions.size(), 2); | ||
|
||
// ADD | ||
EXPECT_EQ(instructions.at(0).op_code, OpCode::ADD); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For ease of maintanance would auto const& instruction = instructions.at(0)
then
EXPECT_EQ(instruction.operatnds.size(), 3)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, I will adapt as you suggested.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually, this does not work well.
A reference in cpp cannot be rebound. So, I cannot use the same identifier "instruction" in the same test.
Renaming differently for every opcode is also not very nice. You end up doing:
auto const& instr_set1 = instructions.at(0)
auto const& instr_set2 = instructions.at(01)
size_t pos = 0; | ||
const auto length = bytecode.size(); | ||
|
||
static_assert(sizeof(uint32_t) / sizeof(uint8_t) == AVM_OPERAND_BYTE_LENGTH); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this need to be in this file?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I moved it just after the definition of AVM_OPERAND_BYTE_LENGTH in the header file.
} | ||
|
||
const auto opcode = static_cast<OpCode>(opcode_byte); | ||
auto in_tag_u8 = static_cast<uint8_t>(AvmMemoryTag::U0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whats the casting for, is u8 = 0 not enough?
question asked as a cpp noob
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The goal here is to keep in sync with the value defined in the enum. Sure, normally the enum value for U0 should always be 0, but if we decide to change the above code will become invalid.
Even though the enum is defined over uint8_t, the static cast is required otherwise compiler screams.
barretenberg/cpp/src/barretenberg/vm/avm_trace/AvmMini_execution.cpp
Outdated
Show resolved
Hide resolved
cc9652d
to
723f29f
Compare
723f29f
to
cf01c3f
Compare
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-packages: 0.21.0</summary> ## [0.21.0](aztec-packages-v0.20.0...aztec-packages-v0.21.0) (2024-01-30) ### ⚠ BREAKING CHANGES * aztec binary ([#3927](#3927)) * add opcode for sha256 compression function ([#4229](#4229)) * add opcode for poseidon2 permutation ([#4214](#4214)) * remove ec_double opcode ([#4210](#4210)) * Updates singleton usage ([#4186](#4186)) * Add big int opcodes (without implementation) ([#4050](#4050)) ### Features * **3738:** AVM basic arithmetic operations for non ff types ([#3881](#3881)) ([457a3f9](457a3f9)), closes [#3996](#3996) * Accrued substate instructions ([#4197](#4197)) ([bfe30d2](bfe30d2)) * Add big int opcodes (without implementation) ([#4050](#4050)) ([bcab9ce](bcab9ce)) * Add comparators to get/view note ([#3136](#3136)) ([#4205](#4205)) ([6de36b3](6de36b3)) * Add inclusion check l1->l2 ([#4141](#4141)) ([bef65c3](bef65c3)) * Add opcode for poseidon2 permutation ([#4214](#4214)) ([53c5ba5](53c5ba5)) * Add opcode for sha256 compression function ([#4229](#4229)) ([ac25ff7](ac25ff7)) * Adding slither to l1-contracts ([#4226](#4226)) ([b4dc31d](b4dc31d)) * **avm:** Add tests for memory and bitwise instructions ([#4184](#4184)) ([6dac650](6dac650)) * **avm:** Bytecode avm control flow ([#4253](#4253)) ([fb1d742](fb1d742)), closes [#4209](#4209) * **avm:** Bytecode parsing and proof generation ([#4191](#4191)) ([6c70548](6c70548)), closes [#3791](#3791) * **avm:** Environment getters ([#4203](#4203)) ([60d2377](60d2377)) * **avm:** Implement comparator opcodes ([#4232](#4232)) ([973ff2f](973ff2f)) * **avm:** Initial external calls ([#4194](#4194)) ([d8aa966](d8aa966)) * **avm:** Link up storage ([#4150](#4150)) ([3e86870](3e86870)) * **avm:** Revert instruction ([#4206](#4206)) ([bd6e797](bd6e797)) * **avm:** Tagged memory ([#4213](#4213)) ([e5ff2f6](e5ff2f6)) * Aztec binary ([#3927](#3927)) ([12356d9](12356d9)) * Contract classes and instances ([#4192](#4192)) ([1858126](1858126)), closes [#4053](#4053) * Deserialize AztecAddress when contract's view function returns it in Aztec.js [#3641](#3641) ([#4224](#4224)) ([11f400f](11f400f)) * **docs:** DIP1: Extract Explanations ([#4228](#4228)) ([3b25737](3b25737)) * **docs:** Historical trees docs ([#3895](#3895)) ([8c3efba](8c3efba)) * **docs:** PXE docs ([#4021](#4021)) ([a656034](a656034)) * Implement bigint in Noir, using bigint opcodes ([#4198](#4198)) ([3720415](3720415)) * Implement Embedded EC add and double opcodes ([#3982](#3982)) ([ccb7bff](ccb7bff)) * Limit exposed functions on note utils ([#4207](#4207)) ([8338f39](8338f39)) * Nullifier key validation ([#4176](#4176)) ([1c72c0d](1c72c0d)) * Produce graph of internal Barretenberg dependencies ([#4225](#4225)) ([88e7923](88e7923)) * Recursive folding and decider verifier for Protogalaxy ([#4156](#4156)) ([9342048](9342048)) * Remove ec_double opcode ([#4210](#4210)) ([75f26c4](75f26c4)) * Replace single bit range constraints with basic bool gates ([#4164](#4164)) ([0a3553b](0a3553b)) * Updates singleton usage ([#4186](#4186)) ([301f0e6](301f0e6)) ### Bug Fixes * **avm:** Fix usage of Fr with tagged memory ([#4240](#4240)) ([b82e70c](b82e70c)) * **bb:** .gitignore ([#4201](#4201)) ([a56e418](a56e418)) * **docs:** Add missing deps to token tutorial references ([#4265](#4265)) ([d7e2d9c](d7e2d9c)) * Generic Honk dependencies ([#4239](#4239)) ([382dfbe](382dfbe)) ### Miscellaneous * Add note getter test to cci ([#4236](#4236)) ([e1184ff](e1184ff)) * **avm-simulator:** Cleanup, tags as first instruction constructor args ([#4244](#4244)) ([e46b865](e46b865)) * **avm:** Remove the state manager in favour of journal ([#4195](#4195)) ([40f9324](40f9324)) * **bb:** Rearrange namespaces ([#4147](#4147)) ([5de0a8e](5de0a8e)) * Cleaning up circuits test setup ([#4235](#4235)) ([fa6915a](fa6915a)), closes [#4237](#4237) * Delete C++ PK circuits ([#4219](#4219)) ([9136d32](9136d32)) * Delete MemoryDB ([#4241](#4241)) ([9e6250a](9e6250a)) * **docs:** Fix a few links to docs ([#4260](#4260)) ([1c8ea49](1c8ea49)) * **docs:** Fix autogen docs ([#4261](#4261)) ([3b9927a](3b9927a)) * **docs:** Fix public and private storage not in docs ([#4257](#4257)) ([48ceafd](48ceafd)) * **docs:** Fix token bridge tutorial ([#3935](#3935)) ([84c9fdb](84c9fdb)) * **docs:** Split contract storage pages ([#4202](#4202)) ([1e05f33](1e05f33)) * Fix typo in yellow paper ([#4247](#4247)) ([ac82e6b](ac82e6b)) * Fixes test file from [#4205](#4205) ([#4216](#4216)) ([18a9b72](18a9b72)) * Git subrepo pull (merge) noir ([#4252](#4252)) ([80be57d](80be57d)) * Nuking old `BlockHeader` ([#4154](#4154)) ([997791a](997791a)), closes [#3937](#3937) [#3564](#3564) [#4134](#4134) * Remove flaky e2e p2p test ([#4181](#4181)) ([688e4af](688e4af)) * Remove mandatory jsdoc ([#4180](#4180)) ([9625b43](9625b43)), closes [#3860](#3860) * Remove stubbed docs ([#4196](#4196)) ([25a4bc4](25a4bc4)) * Replace leveldb with lmdb for merkle trees ([#4119](#4119)) ([84967b2](84967b2)), closes [#3362](#3362) * Replace relative paths to noir-protocol-circuits ([a9839a8](a9839a8)) * Replace relative paths to noir-protocol-circuits ([2ef6e56](2ef6e56)) * Replace relative paths to noir-protocol-circuits ([426c17d](426c17d)) * Replace relative paths to noir-protocol-circuits ([12adb71](12adb71)) * Replace relative paths to noir-protocol-circuits ([fcd048d](fcd048d)) * Unifying Header serialization accross domains ([#4230](#4230)) ([92080a0](92080a0)) * Update .gitrepo with correct parent hash ([#4279](#4279)) ([9253c8a](9253c8a)) ### Documentation * **bb:** How to use docker_interactive.sh ([#4220](#4220)) ([f44c6b1](f44c6b1)) * Update welcome page and dev pages ([#4143](#4143)) ([d2a86ff](d2a86ff)) </details> <details><summary>barretenberg.js: 0.21.0</summary> ## [0.21.0](barretenberg.js-v0.20.0...barretenberg.js-v0.21.0) (2024-01-30) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>barretenberg: 0.21.0</summary> ## [0.21.0](barretenberg-v0.20.0...barretenberg-v0.21.0) (2024-01-30) ### ⚠ BREAKING CHANGES * add opcode for sha256 compression function ([#4229](#4229)) * add opcode for poseidon2 permutation ([#4214](#4214)) * remove ec_double opcode ([#4210](#4210)) * Add big int opcodes (without implementation) ([#4050](#4050)) ### Features * **3738:** AVM basic arithmetic operations for non ff types ([#3881](#3881)) ([457a3f9](457a3f9)), closes [#3996](#3996) * Add big int opcodes (without implementation) ([#4050](#4050)) ([bcab9ce](bcab9ce)) * Add opcode for poseidon2 permutation ([#4214](#4214)) ([53c5ba5](53c5ba5)) * Add opcode for sha256 compression function ([#4229](#4229)) ([ac25ff7](ac25ff7)) * **avm:** Bytecode avm control flow ([#4253](#4253)) ([fb1d742](fb1d742)), closes [#4209](#4209) * **avm:** Bytecode parsing and proof generation ([#4191](#4191)) ([6c70548](6c70548)), closes [#3791](#3791) * Implement Embedded EC add and double opcodes ([#3982](#3982)) ([ccb7bff](ccb7bff)) * Produce graph of internal Barretenberg dependencies ([#4225](#4225)) ([88e7923](88e7923)) * Recursive folding and decider verifier for Protogalaxy ([#4156](#4156)) ([9342048](9342048)) * Remove ec_double opcode ([#4210](#4210)) ([75f26c4](75f26c4)) * Replace single bit range constraints with basic bool gates ([#4164](#4164)) ([0a3553b](0a3553b)) ### Bug Fixes * **bb:** .gitignore ([#4201](#4201)) ([a56e418](a56e418)) * Generic Honk dependencies ([#4239](#4239)) ([382dfbe](382dfbe)) ### Miscellaneous * **bb:** Rearrange namespaces ([#4147](#4147)) ([5de0a8e](5de0a8e)) * Delete C++ PK circuits ([#4219](#4219)) ([9136d32](9136d32)) ### Documentation * **bb:** How to use docker_interactive.sh ([#4220](#4220)) ([f44c6b1](f44c6b1)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-packages: 0.21.0</summary> ## [0.21.0](AztecProtocol/aztec-packages@aztec-packages-v0.20.0...aztec-packages-v0.21.0) (2024-01-30) ### ⚠ BREAKING CHANGES * aztec binary ([#3927](AztecProtocol/aztec-packages#3927)) * add opcode for sha256 compression function ([#4229](AztecProtocol/aztec-packages#4229)) * add opcode for poseidon2 permutation ([#4214](AztecProtocol/aztec-packages#4214)) * remove ec_double opcode ([#4210](AztecProtocol/aztec-packages#4210)) * Updates singleton usage ([#4186](AztecProtocol/aztec-packages#4186)) * Add big int opcodes (without implementation) ([#4050](AztecProtocol/aztec-packages#4050)) ### Features * **3738:** AVM basic arithmetic operations for non ff types ([#3881](AztecProtocol/aztec-packages#3881)) ([457a3f9](AztecProtocol/aztec-packages@457a3f9)), closes [#3996](AztecProtocol/aztec-packages#3996) * Accrued substate instructions ([#4197](AztecProtocol/aztec-packages#4197)) ([bfe30d2](AztecProtocol/aztec-packages@bfe30d2)) * Add big int opcodes (without implementation) ([#4050](AztecProtocol/aztec-packages#4050)) ([bcab9ce](AztecProtocol/aztec-packages@bcab9ce)) * Add comparators to get/view note ([#3136](AztecProtocol/aztec-packages#3136)) ([#4205](AztecProtocol/aztec-packages#4205)) ([6de36b3](AztecProtocol/aztec-packages@6de36b3)) * Add inclusion check l1->l2 ([#4141](AztecProtocol/aztec-packages#4141)) ([bef65c3](AztecProtocol/aztec-packages@bef65c3)) * Add opcode for poseidon2 permutation ([#4214](AztecProtocol/aztec-packages#4214)) ([53c5ba5](AztecProtocol/aztec-packages@53c5ba5)) * Add opcode for sha256 compression function ([#4229](AztecProtocol/aztec-packages#4229)) ([ac25ff7](AztecProtocol/aztec-packages@ac25ff7)) * Adding slither to l1-contracts ([#4226](AztecProtocol/aztec-packages#4226)) ([b4dc31d](AztecProtocol/aztec-packages@b4dc31d)) * **avm:** Add tests for memory and bitwise instructions ([#4184](AztecProtocol/aztec-packages#4184)) ([6dac650](AztecProtocol/aztec-packages@6dac650)) * **avm:** Bytecode avm control flow ([#4253](AztecProtocol/aztec-packages#4253)) ([fb1d742](AztecProtocol/aztec-packages@fb1d742)), closes [#4209](AztecProtocol/aztec-packages#4209) * **avm:** Bytecode parsing and proof generation ([#4191](AztecProtocol/aztec-packages#4191)) ([6c70548](AztecProtocol/aztec-packages@6c70548)), closes [#3791](AztecProtocol/aztec-packages#3791) * **avm:** Environment getters ([#4203](AztecProtocol/aztec-packages#4203)) ([60d2377](AztecProtocol/aztec-packages@60d2377)) * **avm:** Implement comparator opcodes ([#4232](AztecProtocol/aztec-packages#4232)) ([973ff2f](AztecProtocol/aztec-packages@973ff2f)) * **avm:** Initial external calls ([#4194](AztecProtocol/aztec-packages#4194)) ([d8aa966](AztecProtocol/aztec-packages@d8aa966)) * **avm:** Link up storage ([#4150](AztecProtocol/aztec-packages#4150)) ([3e86870](AztecProtocol/aztec-packages@3e86870)) * **avm:** Revert instruction ([#4206](AztecProtocol/aztec-packages#4206)) ([bd6e797](AztecProtocol/aztec-packages@bd6e797)) * **avm:** Tagged memory ([#4213](AztecProtocol/aztec-packages#4213)) ([e5ff2f6](AztecProtocol/aztec-packages@e5ff2f6)) * Aztec binary ([#3927](AztecProtocol/aztec-packages#3927)) ([12356d9](AztecProtocol/aztec-packages@12356d9)) * Contract classes and instances ([#4192](AztecProtocol/aztec-packages#4192)) ([1858126](AztecProtocol/aztec-packages@1858126)), closes [#4053](AztecProtocol/aztec-packages#4053) * Deserialize AztecAddress when contract's view function returns it in Aztec.js [#3641](AztecProtocol/aztec-packages#3641) ([#4224](AztecProtocol/aztec-packages#4224)) ([11f400f](AztecProtocol/aztec-packages@11f400f)) * **docs:** DIP1: Extract Explanations ([#4228](AztecProtocol/aztec-packages#4228)) ([3b25737](AztecProtocol/aztec-packages@3b25737)) * **docs:** Historical trees docs ([#3895](AztecProtocol/aztec-packages#3895)) ([8c3efba](AztecProtocol/aztec-packages@8c3efba)) * **docs:** PXE docs ([#4021](AztecProtocol/aztec-packages#4021)) ([a656034](AztecProtocol/aztec-packages@a656034)) * Implement bigint in Noir, using bigint opcodes ([#4198](AztecProtocol/aztec-packages#4198)) ([3720415](AztecProtocol/aztec-packages@3720415)) * Implement Embedded EC add and double opcodes ([#3982](AztecProtocol/aztec-packages#3982)) ([ccb7bff](AztecProtocol/aztec-packages@ccb7bff)) * Limit exposed functions on note utils ([#4207](AztecProtocol/aztec-packages#4207)) ([8338f39](AztecProtocol/aztec-packages@8338f39)) * Nullifier key validation ([#4176](AztecProtocol/aztec-packages#4176)) ([1c72c0d](AztecProtocol/aztec-packages@1c72c0d)) * Produce graph of internal Barretenberg dependencies ([#4225](AztecProtocol/aztec-packages#4225)) ([88e7923](AztecProtocol/aztec-packages@88e7923)) * Recursive folding and decider verifier for Protogalaxy ([#4156](AztecProtocol/aztec-packages#4156)) ([9342048](AztecProtocol/aztec-packages@9342048)) * Remove ec_double opcode ([#4210](AztecProtocol/aztec-packages#4210)) ([75f26c4](AztecProtocol/aztec-packages@75f26c4)) * Replace single bit range constraints with basic bool gates ([#4164](AztecProtocol/aztec-packages#4164)) ([0a3553b](AztecProtocol/aztec-packages@0a3553b)) * Updates singleton usage ([#4186](AztecProtocol/aztec-packages#4186)) ([301f0e6](AztecProtocol/aztec-packages@301f0e6)) ### Bug Fixes * **avm:** Fix usage of Fr with tagged memory ([#4240](AztecProtocol/aztec-packages#4240)) ([b82e70c](AztecProtocol/aztec-packages@b82e70c)) * **bb:** .gitignore ([#4201](AztecProtocol/aztec-packages#4201)) ([a56e418](AztecProtocol/aztec-packages@a56e418)) * **docs:** Add missing deps to token tutorial references ([#4265](AztecProtocol/aztec-packages#4265)) ([d7e2d9c](AztecProtocol/aztec-packages@d7e2d9c)) * Generic Honk dependencies ([#4239](AztecProtocol/aztec-packages#4239)) ([382dfbe](AztecProtocol/aztec-packages@382dfbe)) ### Miscellaneous * Add note getter test to cci ([#4236](AztecProtocol/aztec-packages#4236)) ([e1184ff](AztecProtocol/aztec-packages@e1184ff)) * **avm-simulator:** Cleanup, tags as first instruction constructor args ([#4244](AztecProtocol/aztec-packages#4244)) ([e46b865](AztecProtocol/aztec-packages@e46b865)) * **avm:** Remove the state manager in favour of journal ([#4195](AztecProtocol/aztec-packages#4195)) ([40f9324](AztecProtocol/aztec-packages@40f9324)) * **bb:** Rearrange namespaces ([#4147](AztecProtocol/aztec-packages#4147)) ([5de0a8e](AztecProtocol/aztec-packages@5de0a8e)) * Cleaning up circuits test setup ([#4235](AztecProtocol/aztec-packages#4235)) ([fa6915a](AztecProtocol/aztec-packages@fa6915a)), closes [#4237](AztecProtocol/aztec-packages#4237) * Delete C++ PK circuits ([#4219](AztecProtocol/aztec-packages#4219)) ([9136d32](AztecProtocol/aztec-packages@9136d32)) * Delete MemoryDB ([#4241](AztecProtocol/aztec-packages#4241)) ([9e6250a](AztecProtocol/aztec-packages@9e6250a)) * **docs:** Fix a few links to docs ([#4260](AztecProtocol/aztec-packages#4260)) ([1c8ea49](AztecProtocol/aztec-packages@1c8ea49)) * **docs:** Fix autogen docs ([#4261](AztecProtocol/aztec-packages#4261)) ([3b9927a](AztecProtocol/aztec-packages@3b9927a)) * **docs:** Fix public and private storage not in docs ([#4257](AztecProtocol/aztec-packages#4257)) ([48ceafd](AztecProtocol/aztec-packages@48ceafd)) * **docs:** Fix token bridge tutorial ([#3935](AztecProtocol/aztec-packages#3935)) ([84c9fdb](AztecProtocol/aztec-packages@84c9fdb)) * **docs:** Split contract storage pages ([#4202](AztecProtocol/aztec-packages#4202)) ([1e05f33](AztecProtocol/aztec-packages@1e05f33)) * Fix typo in yellow paper ([#4247](AztecProtocol/aztec-packages#4247)) ([ac82e6b](AztecProtocol/aztec-packages@ac82e6b)) * Fixes test file from [#4205](AztecProtocol/aztec-packages#4205) ([#4216](AztecProtocol/aztec-packages#4216)) ([18a9b72](AztecProtocol/aztec-packages@18a9b72)) * Git subrepo pull (merge) noir ([#4252](AztecProtocol/aztec-packages#4252)) ([80be57d](AztecProtocol/aztec-packages@80be57d)) * Nuking old `BlockHeader` ([#4154](AztecProtocol/aztec-packages#4154)) ([997791a](AztecProtocol/aztec-packages@997791a)), closes [#3937](AztecProtocol/aztec-packages#3937) [#3564](AztecProtocol/aztec-packages#3564) [#4134](AztecProtocol/aztec-packages#4134) * Remove flaky e2e p2p test ([#4181](AztecProtocol/aztec-packages#4181)) ([688e4af](AztecProtocol/aztec-packages@688e4af)) * Remove mandatory jsdoc ([#4180](AztecProtocol/aztec-packages#4180)) ([9625b43](AztecProtocol/aztec-packages@9625b43)), closes [#3860](AztecProtocol/aztec-packages#3860) * Remove stubbed docs ([#4196](AztecProtocol/aztec-packages#4196)) ([25a4bc4](AztecProtocol/aztec-packages@25a4bc4)) * Replace leveldb with lmdb for merkle trees ([#4119](AztecProtocol/aztec-packages#4119)) ([84967b2](AztecProtocol/aztec-packages@84967b2)), closes [#3362](AztecProtocol/aztec-packages#3362) * Replace relative paths to noir-protocol-circuits ([a9839a8](AztecProtocol/aztec-packages@a9839a8)) * Replace relative paths to noir-protocol-circuits ([2ef6e56](AztecProtocol/aztec-packages@2ef6e56)) * Replace relative paths to noir-protocol-circuits ([426c17d](AztecProtocol/aztec-packages@426c17d)) * Replace relative paths to noir-protocol-circuits ([12adb71](AztecProtocol/aztec-packages@12adb71)) * Replace relative paths to noir-protocol-circuits ([fcd048d](AztecProtocol/aztec-packages@fcd048d)) * Unifying Header serialization accross domains ([#4230](AztecProtocol/aztec-packages#4230)) ([92080a0](AztecProtocol/aztec-packages@92080a0)) * Update .gitrepo with correct parent hash ([#4279](AztecProtocol/aztec-packages#4279)) ([9253c8a](AztecProtocol/aztec-packages@9253c8a)) ### Documentation * **bb:** How to use docker_interactive.sh ([#4220](AztecProtocol/aztec-packages#4220)) ([f44c6b1](AztecProtocol/aztec-packages@f44c6b1)) * Update welcome page and dev pages ([#4143](AztecProtocol/aztec-packages#4143)) ([d2a86ff](AztecProtocol/aztec-packages@d2a86ff)) </details> <details><summary>barretenberg.js: 0.21.0</summary> ## [0.21.0](AztecProtocol/aztec-packages@barretenberg.js-v0.20.0...barretenberg.js-v0.21.0) (2024-01-30) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>barretenberg: 0.21.0</summary> ## [0.21.0](AztecProtocol/aztec-packages@barretenberg-v0.20.0...barretenberg-v0.21.0) (2024-01-30) ### ⚠ BREAKING CHANGES * add opcode for sha256 compression function ([#4229](AztecProtocol/aztec-packages#4229)) * add opcode for poseidon2 permutation ([#4214](AztecProtocol/aztec-packages#4214)) * remove ec_double opcode ([#4210](AztecProtocol/aztec-packages#4210)) * Add big int opcodes (without implementation) ([#4050](AztecProtocol/aztec-packages#4050)) ### Features * **3738:** AVM basic arithmetic operations for non ff types ([#3881](AztecProtocol/aztec-packages#3881)) ([457a3f9](AztecProtocol/aztec-packages@457a3f9)), closes [#3996](AztecProtocol/aztec-packages#3996) * Add big int opcodes (without implementation) ([#4050](AztecProtocol/aztec-packages#4050)) ([bcab9ce](AztecProtocol/aztec-packages@bcab9ce)) * Add opcode for poseidon2 permutation ([#4214](AztecProtocol/aztec-packages#4214)) ([53c5ba5](AztecProtocol/aztec-packages@53c5ba5)) * Add opcode for sha256 compression function ([#4229](AztecProtocol/aztec-packages#4229)) ([ac25ff7](AztecProtocol/aztec-packages@ac25ff7)) * **avm:** Bytecode avm control flow ([#4253](AztecProtocol/aztec-packages#4253)) ([fb1d742](AztecProtocol/aztec-packages@fb1d742)), closes [#4209](AztecProtocol/aztec-packages#4209) * **avm:** Bytecode parsing and proof generation ([#4191](AztecProtocol/aztec-packages#4191)) ([6c70548](AztecProtocol/aztec-packages@6c70548)), closes [#3791](AztecProtocol/aztec-packages#3791) * Implement Embedded EC add and double opcodes ([#3982](AztecProtocol/aztec-packages#3982)) ([ccb7bff](AztecProtocol/aztec-packages@ccb7bff)) * Produce graph of internal Barretenberg dependencies ([#4225](AztecProtocol/aztec-packages#4225)) ([88e7923](AztecProtocol/aztec-packages@88e7923)) * Recursive folding and decider verifier for Protogalaxy ([#4156](AztecProtocol/aztec-packages#4156)) ([9342048](AztecProtocol/aztec-packages@9342048)) * Remove ec_double opcode ([#4210](AztecProtocol/aztec-packages#4210)) ([75f26c4](AztecProtocol/aztec-packages@75f26c4)) * Replace single bit range constraints with basic bool gates ([#4164](AztecProtocol/aztec-packages#4164)) ([0a3553b](AztecProtocol/aztec-packages@0a3553b)) ### Bug Fixes * **bb:** .gitignore ([#4201](AztecProtocol/aztec-packages#4201)) ([a56e418](AztecProtocol/aztec-packages@a56e418)) * Generic Honk dependencies ([#4239](AztecProtocol/aztec-packages#4239)) ([382dfbe](AztecProtocol/aztec-packages@382dfbe)) ### Miscellaneous * **bb:** Rearrange namespaces ([#4147](AztecProtocol/aztec-packages#4147)) ([5de0a8e](AztecProtocol/aztec-packages@5de0a8e)) * Delete C++ PK circuits ([#4219](AztecProtocol/aztec-packages#4219)) ([9136d32](AztecProtocol/aztec-packages@9136d32)) ### Documentation * **bb:** How to use docker_interactive.sh ([#4220](AztecProtocol/aztec-packages#4220)) ([f44c6b1](AztecProtocol/aztec-packages@f44c6b1)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-packages: 0.21.0</summary> ## [0.21.0](AztecProtocol/aztec-packages@aztec-packages-v0.20.0...aztec-packages-v0.21.0) (2024-01-30) ### ⚠ BREAKING CHANGES * aztec binary ([AztecProtocol#3927](AztecProtocol#3927)) * add opcode for sha256 compression function ([AztecProtocol#4229](AztecProtocol#4229)) * add opcode for poseidon2 permutation ([AztecProtocol#4214](AztecProtocol#4214)) * remove ec_double opcode ([AztecProtocol#4210](AztecProtocol#4210)) * Updates singleton usage ([AztecProtocol#4186](AztecProtocol#4186)) * Add big int opcodes (without implementation) ([AztecProtocol#4050](AztecProtocol#4050)) ### Features * **3738:** AVM basic arithmetic operations for non ff types ([AztecProtocol#3881](AztecProtocol#3881)) ([457a3f9](AztecProtocol@457a3f9)), closes [AztecProtocol#3996](AztecProtocol#3996) * Accrued substate instructions ([AztecProtocol#4197](AztecProtocol#4197)) ([bfe30d2](AztecProtocol@bfe30d2)) * Add big int opcodes (without implementation) ([AztecProtocol#4050](AztecProtocol#4050)) ([bcab9ce](AztecProtocol@bcab9ce)) * Add comparators to get/view note ([AztecProtocol#3136](AztecProtocol#3136)) ([AztecProtocol#4205](AztecProtocol#4205)) ([6de36b3](AztecProtocol@6de36b3)) * Add inclusion check l1->l2 ([AztecProtocol#4141](AztecProtocol#4141)) ([bef65c3](AztecProtocol@bef65c3)) * Add opcode for poseidon2 permutation ([AztecProtocol#4214](AztecProtocol#4214)) ([53c5ba5](AztecProtocol@53c5ba5)) * Add opcode for sha256 compression function ([AztecProtocol#4229](AztecProtocol#4229)) ([ac25ff7](AztecProtocol@ac25ff7)) * Adding slither to l1-contracts ([AztecProtocol#4226](AztecProtocol#4226)) ([b4dc31d](AztecProtocol@b4dc31d)) * **avm:** Add tests for memory and bitwise instructions ([AztecProtocol#4184](AztecProtocol#4184)) ([6dac650](AztecProtocol@6dac650)) * **avm:** Bytecode avm control flow ([AztecProtocol#4253](AztecProtocol#4253)) ([fb1d742](AztecProtocol@fb1d742)), closes [AztecProtocol#4209](AztecProtocol#4209) * **avm:** Bytecode parsing and proof generation ([AztecProtocol#4191](AztecProtocol#4191)) ([6c70548](AztecProtocol@6c70548)), closes [AztecProtocol#3791](AztecProtocol#3791) * **avm:** Environment getters ([AztecProtocol#4203](AztecProtocol#4203)) ([60d2377](AztecProtocol@60d2377)) * **avm:** Implement comparator opcodes ([AztecProtocol#4232](AztecProtocol#4232)) ([973ff2f](AztecProtocol@973ff2f)) * **avm:** Initial external calls ([AztecProtocol#4194](AztecProtocol#4194)) ([d8aa966](AztecProtocol@d8aa966)) * **avm:** Link up storage ([AztecProtocol#4150](AztecProtocol#4150)) ([3e86870](AztecProtocol@3e86870)) * **avm:** Revert instruction ([AztecProtocol#4206](AztecProtocol#4206)) ([bd6e797](AztecProtocol@bd6e797)) * **avm:** Tagged memory ([AztecProtocol#4213](AztecProtocol#4213)) ([e5ff2f6](AztecProtocol@e5ff2f6)) * Aztec binary ([AztecProtocol#3927](AztecProtocol#3927)) ([12356d9](AztecProtocol@12356d9)) * Contract classes and instances ([AztecProtocol#4192](AztecProtocol#4192)) ([1858126](AztecProtocol@1858126)), closes [AztecProtocol#4053](AztecProtocol#4053) * Deserialize AztecAddress when contract's view function returns it in Aztec.js [AztecProtocol#3641](AztecProtocol#3641) ([AztecProtocol#4224](AztecProtocol#4224)) ([11f400f](AztecProtocol@11f400f)) * **docs:** DIP1: Extract Explanations ([AztecProtocol#4228](AztecProtocol#4228)) ([3b25737](AztecProtocol@3b25737)) * **docs:** Historical trees docs ([AztecProtocol#3895](AztecProtocol#3895)) ([8c3efba](AztecProtocol@8c3efba)) * **docs:** PXE docs ([AztecProtocol#4021](AztecProtocol#4021)) ([a656034](AztecProtocol@a656034)) * Implement bigint in Noir, using bigint opcodes ([AztecProtocol#4198](AztecProtocol#4198)) ([3720415](AztecProtocol@3720415)) * Implement Embedded EC add and double opcodes ([AztecProtocol#3982](AztecProtocol#3982)) ([ccb7bff](AztecProtocol@ccb7bff)) * Limit exposed functions on note utils ([AztecProtocol#4207](AztecProtocol#4207)) ([8338f39](AztecProtocol@8338f39)) * Nullifier key validation ([AztecProtocol#4176](AztecProtocol#4176)) ([1c72c0d](AztecProtocol@1c72c0d)) * Produce graph of internal Barretenberg dependencies ([AztecProtocol#4225](AztecProtocol#4225)) ([88e7923](AztecProtocol@88e7923)) * Recursive folding and decider verifier for Protogalaxy ([AztecProtocol#4156](AztecProtocol#4156)) ([9342048](AztecProtocol@9342048)) * Remove ec_double opcode ([AztecProtocol#4210](AztecProtocol#4210)) ([75f26c4](AztecProtocol@75f26c4)) * Replace single bit range constraints with basic bool gates ([AztecProtocol#4164](AztecProtocol#4164)) ([0a3553b](AztecProtocol@0a3553b)) * Updates singleton usage ([AztecProtocol#4186](AztecProtocol#4186)) ([301f0e6](AztecProtocol@301f0e6)) ### Bug Fixes * **avm:** Fix usage of Fr with tagged memory ([AztecProtocol#4240](AztecProtocol#4240)) ([b82e70c](AztecProtocol@b82e70c)) * **bb:** .gitignore ([AztecProtocol#4201](AztecProtocol#4201)) ([a56e418](AztecProtocol@a56e418)) * **docs:** Add missing deps to token tutorial references ([AztecProtocol#4265](AztecProtocol#4265)) ([d7e2d9c](AztecProtocol@d7e2d9c)) * Generic Honk dependencies ([AztecProtocol#4239](AztecProtocol#4239)) ([382dfbe](AztecProtocol@382dfbe)) ### Miscellaneous * Add note getter test to cci ([AztecProtocol#4236](AztecProtocol#4236)) ([e1184ff](AztecProtocol@e1184ff)) * **avm-simulator:** Cleanup, tags as first instruction constructor args ([AztecProtocol#4244](AztecProtocol#4244)) ([e46b865](AztecProtocol@e46b865)) * **avm:** Remove the state manager in favour of journal ([AztecProtocol#4195](AztecProtocol#4195)) ([40f9324](AztecProtocol@40f9324)) * **bb:** Rearrange namespaces ([AztecProtocol#4147](AztecProtocol#4147)) ([5de0a8e](AztecProtocol@5de0a8e)) * Cleaning up circuits test setup ([AztecProtocol#4235](AztecProtocol#4235)) ([fa6915a](AztecProtocol@fa6915a)), closes [AztecProtocol#4237](AztecProtocol#4237) * Delete C++ PK circuits ([AztecProtocol#4219](AztecProtocol#4219)) ([9136d32](AztecProtocol@9136d32)) * Delete MemoryDB ([AztecProtocol#4241](AztecProtocol#4241)) ([9e6250a](AztecProtocol@9e6250a)) * **docs:** Fix a few links to docs ([AztecProtocol#4260](AztecProtocol#4260)) ([1c8ea49](AztecProtocol@1c8ea49)) * **docs:** Fix autogen docs ([AztecProtocol#4261](AztecProtocol#4261)) ([3b9927a](AztecProtocol@3b9927a)) * **docs:** Fix public and private storage not in docs ([AztecProtocol#4257](AztecProtocol#4257)) ([48ceafd](AztecProtocol@48ceafd)) * **docs:** Fix token bridge tutorial ([AztecProtocol#3935](AztecProtocol#3935)) ([84c9fdb](AztecProtocol@84c9fdb)) * **docs:** Split contract storage pages ([AztecProtocol#4202](AztecProtocol#4202)) ([1e05f33](AztecProtocol@1e05f33)) * Fix typo in yellow paper ([AztecProtocol#4247](AztecProtocol#4247)) ([ac82e6b](AztecProtocol@ac82e6b)) * Fixes test file from [AztecProtocol#4205](AztecProtocol#4205) ([AztecProtocol#4216](AztecProtocol#4216)) ([18a9b72](AztecProtocol@18a9b72)) * Git subrepo pull (merge) noir ([AztecProtocol#4252](AztecProtocol#4252)) ([80be57d](AztecProtocol@80be57d)) * Nuking old `BlockHeader` ([AztecProtocol#4154](AztecProtocol#4154)) ([997791a](AztecProtocol@997791a)), closes [AztecProtocol#3937](AztecProtocol#3937) [AztecProtocol#3564](AztecProtocol#3564) [AztecProtocol#4134](AztecProtocol#4134) * Remove flaky e2e p2p test ([AztecProtocol#4181](AztecProtocol#4181)) ([688e4af](AztecProtocol@688e4af)) * Remove mandatory jsdoc ([AztecProtocol#4180](AztecProtocol#4180)) ([9625b43](AztecProtocol@9625b43)), closes [AztecProtocol#3860](AztecProtocol#3860) * Remove stubbed docs ([AztecProtocol#4196](AztecProtocol#4196)) ([25a4bc4](AztecProtocol@25a4bc4)) * Replace leveldb with lmdb for merkle trees ([AztecProtocol#4119](AztecProtocol#4119)) ([84967b2](AztecProtocol@84967b2)), closes [AztecProtocol#3362](AztecProtocol#3362) * Replace relative paths to noir-protocol-circuits ([a9839a8](AztecProtocol@a9839a8)) * Replace relative paths to noir-protocol-circuits ([2ef6e56](AztecProtocol@2ef6e56)) * Replace relative paths to noir-protocol-circuits ([426c17d](AztecProtocol@426c17d)) * Replace relative paths to noir-protocol-circuits ([12adb71](AztecProtocol@12adb71)) * Replace relative paths to noir-protocol-circuits ([fcd048d](AztecProtocol@fcd048d)) * Unifying Header serialization accross domains ([AztecProtocol#4230](AztecProtocol#4230)) ([92080a0](AztecProtocol@92080a0)) * Update .gitrepo with correct parent hash ([AztecProtocol#4279](AztecProtocol#4279)) ([9253c8a](AztecProtocol@9253c8a)) ### Documentation * **bb:** How to use docker_interactive.sh ([AztecProtocol#4220](AztecProtocol#4220)) ([f44c6b1](AztecProtocol@f44c6b1)) * Update welcome page and dev pages ([AztecProtocol#4143](AztecProtocol#4143)) ([d2a86ff](AztecProtocol@d2a86ff)) </details> <details><summary>barretenberg.js: 0.21.0</summary> ## [0.21.0](AztecProtocol/aztec-packages@barretenberg.js-v0.20.0...barretenberg.js-v0.21.0) (2024-01-30) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>barretenberg: 0.21.0</summary> ## [0.21.0](AztecProtocol/aztec-packages@barretenberg-v0.20.0...barretenberg-v0.21.0) (2024-01-30) ### ⚠ BREAKING CHANGES * add opcode for sha256 compression function ([AztecProtocol#4229](AztecProtocol#4229)) * add opcode for poseidon2 permutation ([AztecProtocol#4214](AztecProtocol#4214)) * remove ec_double opcode ([AztecProtocol#4210](AztecProtocol#4210)) * Add big int opcodes (without implementation) ([AztecProtocol#4050](AztecProtocol#4050)) ### Features * **3738:** AVM basic arithmetic operations for non ff types ([AztecProtocol#3881](AztecProtocol#3881)) ([457a3f9](AztecProtocol@457a3f9)), closes [AztecProtocol#3996](AztecProtocol#3996) * Add big int opcodes (without implementation) ([AztecProtocol#4050](AztecProtocol#4050)) ([bcab9ce](AztecProtocol@bcab9ce)) * Add opcode for poseidon2 permutation ([AztecProtocol#4214](AztecProtocol#4214)) ([53c5ba5](AztecProtocol@53c5ba5)) * Add opcode for sha256 compression function ([AztecProtocol#4229](AztecProtocol#4229)) ([ac25ff7](AztecProtocol@ac25ff7)) * **avm:** Bytecode avm control flow ([AztecProtocol#4253](AztecProtocol#4253)) ([fb1d742](AztecProtocol@fb1d742)), closes [AztecProtocol#4209](AztecProtocol#4209) * **avm:** Bytecode parsing and proof generation ([AztecProtocol#4191](AztecProtocol#4191)) ([6c70548](AztecProtocol@6c70548)), closes [AztecProtocol#3791](AztecProtocol#3791) * Implement Embedded EC add and double opcodes ([AztecProtocol#3982](AztecProtocol#3982)) ([ccb7bff](AztecProtocol@ccb7bff)) * Produce graph of internal Barretenberg dependencies ([AztecProtocol#4225](AztecProtocol#4225)) ([88e7923](AztecProtocol@88e7923)) * Recursive folding and decider verifier for Protogalaxy ([AztecProtocol#4156](AztecProtocol#4156)) ([9342048](AztecProtocol@9342048)) * Remove ec_double opcode ([AztecProtocol#4210](AztecProtocol#4210)) ([75f26c4](AztecProtocol@75f26c4)) * Replace single bit range constraints with basic bool gates ([AztecProtocol#4164](AztecProtocol#4164)) ([0a3553b](AztecProtocol@0a3553b)) ### Bug Fixes * **bb:** .gitignore ([AztecProtocol#4201](AztecProtocol#4201)) ([a56e418](AztecProtocol@a56e418)) * Generic Honk dependencies ([AztecProtocol#4239](AztecProtocol#4239)) ([382dfbe](AztecProtocol@382dfbe)) ### Miscellaneous * **bb:** Rearrange namespaces ([AztecProtocol#4147](AztecProtocol#4147)) ([5de0a8e](AztecProtocol@5de0a8e)) * Delete C++ PK circuits ([AztecProtocol#4219](AztecProtocol#4219)) ([9136d32](AztecProtocol@9136d32)) ### Documentation * **bb:** How to use docker_interactive.sh ([AztecProtocol#4220](AztecProtocol#4220)) ([f44c6b1](AztecProtocol@f44c6b1)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Resolves #3791