-
Notifications
You must be signed in to change notification settings - Fork 227
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: Update SMT Circuit class and add gate relaxation functionality #5176
Conversation
Now it returns a structure that contains valuable information for further optimizations - start_gate indicates where to start subcircuit comparison - num_gates tells a pure subcircuit size - idxs and and gate_idxs indicates where to search for the values that are used in optimized operation
barretenberg/cpp/src/barretenberg/smt_verification/circuit/circuit.hpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/smt_verification/circuit/circuit.hpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/smt_verification/circuit/circuit.hpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/smt_verification/circuit/circuit.hpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/smt_verification/circuit/circuit_schema.hpp
Outdated
Show resolved
Hide resolved
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 contract classes are registered in the tx.
Transaction processing duration by data writes.
|
barretenberg/cpp/src/barretenberg/smt_verification/circuit/subcircuits.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/smt_verification/circuit/subcircuits.test.cpp
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/smt_verification/circuit/subcircuits.test.cpp
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/smt_verification/smt_examples.test.cpp
Outdated
Show resolved
Hide resolved
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.
Please address my comments
- Changed variable names - Added cache for subcircuits - Added more comments - Renamed handle methods
…tec-packages into as/smt-update-circuit-2
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
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.28.0</summary> ## [0.28.0](aztec-package-v0.27.2...aztec-package-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](#5175)) ### Features * Support contracts with no constructor ([#5175](#5175)) ([df7fa32](df7fa32)) </details> <details><summary>barretenberg.js: 0.28.0</summary> ## [0.28.0](barretenberg.js-v0.27.2...barretenberg.js-v0.28.0) (2024-03-14) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-cli: 0.28.0</summary> ## [0.28.0](aztec-cli-v0.27.2...aztec-cli-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](#5175)) ### Features * Support contracts with no constructor ([#5175](#5175)) ([df7fa32](df7fa32)) </details> <details><summary>aztec-packages: 0.28.0</summary> ## [0.28.0](aztec-packages-v0.27.2...aztec-packages-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](#5175)) ### Features * **avm-simulator:** Euclidean and field div ([#5181](#5181)) ([037a38f](037a38f)) * Isolate Plonk dependencies ([#5068](#5068)) ([5cbbd7d](5cbbd7d)) * New brillig field operations and refactor of binary operations ([#5208](#5208)) ([eb69504](eb69504)) * Parallelize linearly dependent contribution in PG ([#4742](#4742)) ([d1799ae](d1799ae)) * Parity circuits ([#5082](#5082)) ([335c46e](335c46e)) * Support contracts with no constructor ([#5175](#5175)) ([df7fa32](df7fa32)) * Track side effects in public ([#5129](#5129)) ([d666f6f](d666f6f)), closes [#5185](#5185) * Update SMT Circuit class and add gate relaxation functionality ([#5176](#5176)) ([5948996](5948996)) ### Bug Fixes * **avm-transpiler:** FDIV and U128 test case ([#5200](#5200)) ([6977e81](6977e81)) * Barretenberg-acir-tests-bb.js thru version bump ([#5216](#5216)) ([9298f93](9298f93)) * Do not release docs on every commit to master ([#5214](#5214)) ([c34a299](c34a299)) * Fail transaction if we revert in setup or teardown ([#5093](#5093)) ([db9a960](db9a960)) * Intermittent invert 0 in Goblin ([#5189](#5189)) ([6c70624](6c70624)) * Point docs links to current tag if available ([#5219](#5219)) ([0e9c7c7](0e9c7c7)) * Remove embedded srs ([#5173](#5173)) ([cfd673d](cfd673d)) * Split setup/teardown functions when there's no public app logic ([#5156](#5156)) ([2ee13b3](2ee13b3)) * Validate EthAddress size in aztec-nr ([#5198](#5198)) ([201c5e1](201c5e1)) ### Miscellaneous * Add dependency instructions to bberg README ([#5187](#5187)) ([850febc](850febc)) * **avm-simulator:** Make sure we support Map storage ([#5207](#5207)) ([08835f9](08835f9)) * **avm-simulator:** Restructure contract storage tests ([#5194](#5194)) ([fcdd1cc](fcdd1cc)) * **docs:** Add details to getting started contract deployment ([#5220](#5220)) ([5c267ae](5c267ae)) * Moving wit comms and witness and comm labels from instance to oink ([#5199](#5199)) ([19eb7f9](19eb7f9)) * Oink ([#5210](#5210)) ([321f149](321f149)) * Pull noir ([#5193](#5193)) ([aa90f6e](aa90f6e)) * Trying to fix intermitent ci failure for boxes ([#5182](#5182)) ([f988cb8](f988cb8)) ### Documentation * **yellow-paper:** Add pseudocode for verifying broadcasted functions in contract deployment ([#4431](#4431)) ([8bdb921](8bdb921)) </details> <details><summary>barretenberg: 0.28.0</summary> ## [0.28.0](barretenberg-v0.27.2...barretenberg-v0.28.0) (2024-03-14) ### Features * **avm-simulator:** Euclidean and field div ([#5181](#5181)) ([037a38f](037a38f)) * Isolate Plonk dependencies ([#5068](#5068)) ([5cbbd7d](5cbbd7d)) * New brillig field operations and refactor of binary operations ([#5208](#5208)) ([eb69504](eb69504)) * Parallelize linearly dependent contribution in PG ([#4742](#4742)) ([d1799ae](d1799ae)) * Update SMT Circuit class and add gate relaxation functionality ([#5176](#5176)) ([5948996](5948996)) ### Bug Fixes * Barretenberg-acir-tests-bb.js thru version bump ([#5216](#5216)) ([9298f93](9298f93)) * Intermittent invert 0 in Goblin ([#5189](#5189)) ([6c70624](6c70624)) * Remove embedded srs ([#5173](#5173)) ([cfd673d](cfd673d)) ### Miscellaneous * Add dependency instructions to bberg README ([#5187](#5187)) ([850febc](850febc)) * Moving wit comms and witness and comm labels from instance to oink ([#5199](#5199)) ([19eb7f9](19eb7f9)) * Oink ([#5210](#5210)) ([321f149](321f149)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.28.0</summary> ## [0.28.0](AztecProtocol/aztec-packages@aztec-package-v0.27.2...aztec-package-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](AztecProtocol/aztec-packages#5175)) ### Features * Support contracts with no constructor ([#5175](AztecProtocol/aztec-packages#5175)) ([df7fa32](AztecProtocol/aztec-packages@df7fa32)) </details> <details><summary>barretenberg.js: 0.28.0</summary> ## [0.28.0](AztecProtocol/aztec-packages@barretenberg.js-v0.27.2...barretenberg.js-v0.28.0) (2024-03-14) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-cli: 0.28.0</summary> ## [0.28.0](AztecProtocol/aztec-packages@aztec-cli-v0.27.2...aztec-cli-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](AztecProtocol/aztec-packages#5175)) ### Features * Support contracts with no constructor ([#5175](AztecProtocol/aztec-packages#5175)) ([df7fa32](AztecProtocol/aztec-packages@df7fa32)) </details> <details><summary>aztec-packages: 0.28.0</summary> ## [0.28.0](AztecProtocol/aztec-packages@aztec-packages-v0.27.2...aztec-packages-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](AztecProtocol/aztec-packages#5175)) ### Features * **avm-simulator:** Euclidean and field div ([#5181](AztecProtocol/aztec-packages#5181)) ([037a38f](AztecProtocol/aztec-packages@037a38f)) * Isolate Plonk dependencies ([#5068](AztecProtocol/aztec-packages#5068)) ([5cbbd7d](AztecProtocol/aztec-packages@5cbbd7d)) * New brillig field operations and refactor of binary operations ([#5208](AztecProtocol/aztec-packages#5208)) ([eb69504](AztecProtocol/aztec-packages@eb69504)) * Parallelize linearly dependent contribution in PG ([#4742](AztecProtocol/aztec-packages#4742)) ([d1799ae](AztecProtocol/aztec-packages@d1799ae)) * Parity circuits ([#5082](AztecProtocol/aztec-packages#5082)) ([335c46e](AztecProtocol/aztec-packages@335c46e)) * Support contracts with no constructor ([#5175](AztecProtocol/aztec-packages#5175)) ([df7fa32](AztecProtocol/aztec-packages@df7fa32)) * Track side effects in public ([#5129](AztecProtocol/aztec-packages#5129)) ([d666f6f](AztecProtocol/aztec-packages@d666f6f)), closes [#5185](AztecProtocol/aztec-packages#5185) * Update SMT Circuit class and add gate relaxation functionality ([#5176](AztecProtocol/aztec-packages#5176)) ([5948996](AztecProtocol/aztec-packages@5948996)) ### Bug Fixes * **avm-transpiler:** FDIV and U128 test case ([#5200](AztecProtocol/aztec-packages#5200)) ([6977e81](AztecProtocol/aztec-packages@6977e81)) * Barretenberg-acir-tests-bb.js thru version bump ([#5216](AztecProtocol/aztec-packages#5216)) ([9298f93](AztecProtocol/aztec-packages@9298f93)) * Do not release docs on every commit to master ([#5214](AztecProtocol/aztec-packages#5214)) ([c34a299](AztecProtocol/aztec-packages@c34a299)) * Fail transaction if we revert in setup or teardown ([#5093](AztecProtocol/aztec-packages#5093)) ([db9a960](AztecProtocol/aztec-packages@db9a960)) * Intermittent invert 0 in Goblin ([#5189](AztecProtocol/aztec-packages#5189)) ([6c70624](AztecProtocol/aztec-packages@6c70624)) * Point docs links to current tag if available ([#5219](AztecProtocol/aztec-packages#5219)) ([0e9c7c7](AztecProtocol/aztec-packages@0e9c7c7)) * Remove embedded srs ([#5173](AztecProtocol/aztec-packages#5173)) ([cfd673d](AztecProtocol/aztec-packages@cfd673d)) * Split setup/teardown functions when there's no public app logic ([#5156](AztecProtocol/aztec-packages#5156)) ([2ee13b3](AztecProtocol/aztec-packages@2ee13b3)) * Validate EthAddress size in aztec-nr ([#5198](AztecProtocol/aztec-packages#5198)) ([201c5e1](AztecProtocol/aztec-packages@201c5e1)) ### Miscellaneous * Add dependency instructions to bberg README ([#5187](AztecProtocol/aztec-packages#5187)) ([850febc](AztecProtocol/aztec-packages@850febc)) * **avm-simulator:** Make sure we support Map storage ([#5207](AztecProtocol/aztec-packages#5207)) ([08835f9](AztecProtocol/aztec-packages@08835f9)) * **avm-simulator:** Restructure contract storage tests ([#5194](AztecProtocol/aztec-packages#5194)) ([fcdd1cc](AztecProtocol/aztec-packages@fcdd1cc)) * **docs:** Add details to getting started contract deployment ([#5220](AztecProtocol/aztec-packages#5220)) ([5c267ae](AztecProtocol/aztec-packages@5c267ae)) * Moving wit comms and witness and comm labels from instance to oink ([#5199](AztecProtocol/aztec-packages#5199)) ([19eb7f9](AztecProtocol/aztec-packages@19eb7f9)) * Oink ([#5210](AztecProtocol/aztec-packages#5210)) ([321f149](AztecProtocol/aztec-packages@321f149)) * Pull noir ([#5193](AztecProtocol/aztec-packages#5193)) ([aa90f6e](AztecProtocol/aztec-packages@aa90f6e)) * Trying to fix intermitent ci failure for boxes ([#5182](AztecProtocol/aztec-packages#5182)) ([f988cb8](AztecProtocol/aztec-packages@f988cb8)) ### Documentation * **yellow-paper:** Add pseudocode for verifying broadcasted functions in contract deployment ([#4431](AztecProtocol/aztec-packages#4431)) ([8bdb921](AztecProtocol/aztec-packages@8bdb921)) </details> <details><summary>barretenberg: 0.28.0</summary> ## [0.28.0](AztecProtocol/aztec-packages@barretenberg-v0.27.2...barretenberg-v0.28.0) (2024-03-14) ### Features * **avm-simulator:** Euclidean and field div ([#5181](AztecProtocol/aztec-packages#5181)) ([037a38f](AztecProtocol/aztec-packages@037a38f)) * Isolate Plonk dependencies ([#5068](AztecProtocol/aztec-packages#5068)) ([5cbbd7d](AztecProtocol/aztec-packages@5cbbd7d)) * New brillig field operations and refactor of binary operations ([#5208](AztecProtocol/aztec-packages#5208)) ([eb69504](AztecProtocol/aztec-packages@eb69504)) * Parallelize linearly dependent contribution in PG ([#4742](AztecProtocol/aztec-packages#4742)) ([d1799ae](AztecProtocol/aztec-packages@d1799ae)) * Update SMT Circuit class and add gate relaxation functionality ([#5176](AztecProtocol/aztec-packages#5176)) ([5948996](AztecProtocol/aztec-packages@5948996)) ### Bug Fixes * Barretenberg-acir-tests-bb.js thru version bump ([#5216](AztecProtocol/aztec-packages#5216)) ([9298f93](AztecProtocol/aztec-packages@9298f93)) * Intermittent invert 0 in Goblin ([#5189](AztecProtocol/aztec-packages#5189)) ([6c70624](AztecProtocol/aztec-packages@6c70624)) * Remove embedded srs ([#5173](AztecProtocol/aztec-packages#5173)) ([cfd673d](AztecProtocol/aztec-packages@cfd673d)) ### Miscellaneous * Add dependency instructions to bberg README ([#5187](AztecProtocol/aztec-packages#5187)) ([850febc](AztecProtocol/aztec-packages@850febc)) * Moving wit comms and witness and comm labels from instance to oink ([#5199](AztecProtocol/aztec-packages#5199)) ([19eb7f9](AztecProtocol/aztec-packages@19eb7f9)) * Oink ([#5210](AztecProtocol/aztec-packages#5210)) ([321f149](AztecProtocol/aztec-packages@321f149)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.28.0</summary> ## [0.28.0](aztec-package-v0.27.2...aztec-package-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](#5175)) ### Features * Support contracts with no constructor ([#5175](#5175)) ([df7fa32](df7fa32)) </details> <details><summary>barretenberg.js: 0.28.0</summary> ## [0.28.0](barretenberg.js-v0.27.2...barretenberg.js-v0.28.0) (2024-03-14) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-cli: 0.28.0</summary> ## [0.28.0](aztec-cli-v0.27.2...aztec-cli-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](#5175)) ### Features * Support contracts with no constructor ([#5175](#5175)) ([df7fa32](df7fa32)) </details> <details><summary>aztec-packages: 0.28.0</summary> ## [0.28.0](aztec-packages-v0.27.2...aztec-packages-v0.28.0) (2024-03-14) ### ⚠ BREAKING CHANGES * Support contracts with no constructor ([#5175](#5175)) ### Features * **avm-simulator:** Euclidean and field div ([#5181](#5181)) ([037a38f](037a38f)) * Isolate Plonk dependencies ([#5068](#5068)) ([5cbbd7d](5cbbd7d)) * New brillig field operations and refactor of binary operations ([#5208](#5208)) ([eb69504](eb69504)) * Parallelize linearly dependent contribution in PG ([#4742](#4742)) ([d1799ae](d1799ae)) * Parity circuits ([#5082](#5082)) ([335c46e](335c46e)) * Support contracts with no constructor ([#5175](#5175)) ([df7fa32](df7fa32)) * Track side effects in public ([#5129](#5129)) ([d666f6f](d666f6f)), closes [#5185](#5185) * Update SMT Circuit class and add gate relaxation functionality ([#5176](#5176)) ([5948996](5948996)) ### Bug Fixes * **avm-transpiler:** FDIV and U128 test case ([#5200](#5200)) ([6977e81](6977e81)) * Barretenberg-acir-tests-bb.js thru version bump ([#5216](#5216)) ([9298f93](9298f93)) * Do not release docs on every commit to master ([#5214](#5214)) ([c34a299](c34a299)) * Fail transaction if we revert in setup or teardown ([#5093](#5093)) ([db9a960](db9a960)) * Intermittent invert 0 in Goblin ([#5189](#5189)) ([6c70624](6c70624)) * Point docs links to current tag if available ([#5219](#5219)) ([0e9c7c7](0e9c7c7)) * Remove embedded srs ([#5173](#5173)) ([cfd673d](cfd673d)) * Split setup/teardown functions when there's no public app logic ([#5156](#5156)) ([2ee13b3](2ee13b3)) * Validate EthAddress size in aztec-nr ([#5198](#5198)) ([201c5e1](201c5e1)) ### Miscellaneous * Add dependency instructions to bberg README ([#5187](#5187)) ([850febc](850febc)) * **avm-simulator:** Make sure we support Map storage ([#5207](#5207)) ([08835f9](08835f9)) * **avm-simulator:** Restructure contract storage tests ([#5194](#5194)) ([fcdd1cc](fcdd1cc)) * **docs:** Add details to getting started contract deployment ([#5220](#5220)) ([5c267ae](5c267ae)) * Moving wit comms and witness and comm labels from instance to oink ([#5199](#5199)) ([19eb7f9](19eb7f9)) * Oink ([#5210](#5210)) ([321f149](321f149)) * Pull noir ([#5193](#5193)) ([aa90f6e](aa90f6e)) * Trying to fix intermitent ci failure for boxes ([#5182](#5182)) ([f988cb8](f988cb8)) ### Documentation * **yellow-paper:** Add pseudocode for verifying broadcasted functions in contract deployment ([#4431](#4431)) ([8bdb921](8bdb921)) </details> <details><summary>barretenberg: 0.28.0</summary> ## [0.28.0](barretenberg-v0.27.2...barretenberg-v0.28.0) (2024-03-14) ### Features * **avm-simulator:** Euclidean and field div ([#5181](#5181)) ([037a38f](037a38f)) * Isolate Plonk dependencies ([#5068](#5068)) ([5cbbd7d](5cbbd7d)) * New brillig field operations and refactor of binary operations ([#5208](#5208)) ([eb69504](eb69504)) * Parallelize linearly dependent contribution in PG ([#4742](#4742)) ([d1799ae](d1799ae)) * Update SMT Circuit class and add gate relaxation functionality ([#5176](#5176)) ([5948996](5948996)) ### Bug Fixes * Barretenberg-acir-tests-bb.js thru version bump ([#5216](#5216)) ([9298f93](9298f93)) * Intermittent invert 0 in Goblin ([#5189](#5189)) ([6c70624](6c70624)) * Remove embedded srs ([#5173](#5173)) ([cfd673d](cfd673d)) ### Miscellaneous * Add dependency instructions to bberg README ([#5187](#5187)) ([850febc](850febc)) * Moving wit comms and witness and comm labels from instance to oink ([#5199](#5199)) ([19eb7f9](19eb7f9)) * Oink ([#5210](#5210)) ([321f149](321f149)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
This pr adds gate relaxation functionality to Circuit class. It substitutes subcircuits with their "arithmetic" equivalents.
Also it adds
util
directory.Util
default_model
anddefault_model_single
will output pretty formatted result of Solver worksmt_timer
will measure the amount of time that it took to solve somethingbase4
provides you with accumulators and base4 decomposition of a numberTerms
isBitVector()
method that foreshadows futureBitVector
apiSubcircuits
subcircuits.cpp
now return new structure:CircuitProps
.CircuitProps
consists ofstart_gate
indicates where to start subcircuit comparisonnum_gates
tells a pure subcircuit sizeidxs
and andgate_idxs
indicate where to search for the values that are used in optimized operationAlso added tests to confirm that all the indices
Circuit
bool optimizations
andmap<uint32_t, bool> optimized
to keep track of optimized out variables that should not be considered by solverhandle_range_constraint
,handle_logic_constraint
. They perform binary search to indicate the bit_length of specific operation and apply optimization to subcircuitTests check that
assert_equal
'd variables handled properly during circuit initializationrange_constraints
are optimized properly