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: indexed protocol contracts tree #11897

Merged
merged 9 commits into from
Feb 13, 2025
Merged

Conversation

MirandaWood
Copy link
Contributor

@MirandaWood MirandaWood commented Feb 10, 2025

Closes #11843

This PR converts the protocol contract address tree to an indexed tree. This is so:

  • If a user is calling a protocol contract address, its calculated address must be in the tree
  • If a user is NOT calling a protocol contract address, its calculated address must NOT be in the tree

This required more changes than expected because the old code had this statement:

    let computed_protocol_contract_tree_root = if (MAX_PROTOCOL_CONTRACTS as Field).lt(
        protocol_contract_index,
    ) {
        0
    } else {
        root_from_sibling_path(
            computed_address.to_field(),
            protocol_contract_index,
            private_call_data.protocol_contract_sibling_path,
        )
    };
    assert(
        computed_address.eq(contract_address)
            | computed_protocol_contract_tree_root.eq(protocol_contract_tree_root),
        "computed contract address does not match expected one",
    );

For many tests in and out of nr, we input protocol_contract_tree_root = 0. That meant that even if we weren't calling a protocol contract address, an incorrect contract_address would pass the assert statement. The current code does not allow this, so I had to update some old fixtures and provide a real root for all calls (not just protocol contract ones).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Note that I didn't change anything that caused these fixtures to update - they hadn't been updated in a while because the final address value was never tested, so passed when it should have failed.
This is because the tests set protocol_contract_tree_root to be 0, so the contract address checks would pass even if there was a computed address mismatch (see old code in validate_contract_address for the if statement).

Comment on lines +55 to +56
const defaultVkHash = await hashVK(new Array(CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS).fill(Fr.ZERO));
contract.privateFunctions.forEach(p => (p.vkHash = defaultVkHash));
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I edited this because there was a mismatch in the noir fixtures - the nr versioned hashed the vk, while the ts did not. This never became an issue because of the above comment.

@MirandaWood MirandaWood self-assigned this Feb 10, 2025
Copy link
Contributor

github-actions bot commented Feb 11, 2025

Changes to circuit sizes

Generated at commit: c264b3e1dcdd1f0a8114e60158d03845e38c5486, compared to commit: 7901cacd898f9df806942cbe8e454aef2fd8e5c3

🧾 Summary (100% most significant diffs)

Program ACIR opcodes (+/-) % Circuit size (+/-) %
private_kernel_init +179 ❌ +0.96% +446 ❌ +1.12%
private_kernel_inner +179 ❌ +0.63% +446 ❌ +0.62%

Full diff report 👇
Program ACIR opcodes (+/-) % Circuit size (+/-) %
private_kernel_init 18,858 (+179) +0.96% 40,292 (+446) +1.12%
private_kernel_inner 28,546 (+179) +0.63% 72,679 (+446) +0.62%

@AztecBot
Copy link
Collaborator

AztecBot commented Feb 12, 2025

Docs Preview

Hey there! 👋 You can check your preview at https://67adcdaea0dfca717548fdab--aztec-docs-dev.netlify.app

@MirandaWood MirandaWood merged commit 96e84d4 into master Feb 13, 2025
52 checks passed
@MirandaWood MirandaWood deleted the mw/protocol-contract-tree branch February 13, 2025 11:07
sklppy88 pushed a commit that referenced this pull request Feb 13, 2025
🤖 I have created a release *beep* *boop*
---


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

##
[0.76.4](aztec-package-v0.76.3...aztec-package-v0.76.4)
(2025-02-13)


### Miscellaneous

* **aztec-package:** Synchronize aztec-packages versions
</details>

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

##
[0.76.4](barretenberg.js-v0.76.3...barretenberg.js-v0.76.4)
(2025-02-13)


### Miscellaneous

* Unify webpack dev server versions
([#11965](#11965))
([921d2cd](921d2cd))
</details>

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

##
[0.76.4](aztec-packages-v0.76.3...aztec-packages-v0.76.4)
(2025-02-13)


### Features

* `FunctionDefinition::as_typed_expr`
(noir-lang/noir#7358)
([5efdd57](5efdd57))
* Aes decryption oracle
([#11907](#11907))
([c4ce913](c4ce913))
* **avm:** Constrained ec_add
([#11525](#11525))
([f8fe602](f8fe602))
* **avm:** Interaction testing
([#11947](#11947))
([fc647eb](fc647eb))
* **avm:** Relation microbenchmarks
([#11974](#11974))
([95b581d](95b581d))
* **cli:** Add `--target-dir` option
(noir-lang/noir#7350)
([5efdd57](5efdd57))
* Indexed protocol contracts tree
([#11897](#11897))
([96e84d4](96e84d4))
* **performance:** Check sub operations against induction variables
(noir-lang/noir#7356)
([5efdd57](5efdd57))
* **performance:** Use unchecked ops based upon known induction
variables (noir-lang/noir#7344)
([5efdd57](5efdd57))
* Small blob fixes/improvements
([#11686](#11686))
([4eab9fc](4eab9fc))
* Update fee model
([#11953](#11953))
([2798d58](2798d58))
* Use brillig optimized sha256
([#11696](#11696))
([438c905](438c905))


### Bug Fixes

* Ci fixes
([#11973](#11973))
([6386f4e](6386f4e))
* **cli:** Only lock the packages selected in the workspace
(noir-lang/noir#7345)
([5efdd57](5efdd57))
* Deterministic generation of vkeys in ts
([#11951](#11951))
([7901cac](7901cac))
* Incorrect secondary file in LSP errors
(noir-lang/noir#7347)
([5efdd57](5efdd57))
* Lock git dependencies folder when resolving workspace
(noir-lang/noir#7327)
([5efdd57](5efdd57))
* Perform SSA constraints check on final SSA
(noir-lang/noir#7334)
([5efdd57](5efdd57))
* Remove deprecated artifacts
([#11979](#11979))
([4f0dce7](4f0dce7))
* Remove serial queue in broker facade
([#11956](#11956))
([3485b52](3485b52))
* **ssa:** Make the lookback feature opt-in
(noir-lang/noir#7190)
([5efdd57](5efdd57))


### Miscellaneous

* **avm:** Tracegen interactions assertion
([#11972](#11972))
([b865ccc](b865ccc))
* Avoid doing all brillig integer arithmetic on u128s
(noir-lang/noir#7357)
([5efdd57](5efdd57))
* Basic test for MSM in Noir to catch performance improvements and
regressions (noir-lang/noir#7341)
([5efdd57](5efdd57))
* Bump devnet boot node resources
([#11958](#11958))
([bbcdefc](bbcdefc))
* **ci:** Add Vecs and vecs to cspell
(noir-lang/noir#7342)
([5efdd57](5efdd57))
* Deprecate keccak256 (noir-lang/noir#7361)
([5efdd57](5efdd57))
* Fix warnings (noir-lang/noir#7330)
([5efdd57](5efdd57))
* Mark sha256 as deprecated from the stdlib
(noir-lang/noir#7351)
([5efdd57](5efdd57))
* Moving storage slot out of `NoteHeader`
([#11904](#11904))
([8c4bb1c](8c4bb1c))
* Normalize path displayed by `nargo new`
(noir-lang/noir#7328)
([5efdd57](5efdd57))
* Redo typo PR by osrm (noir-lang/noir#7238)
([5efdd57](5efdd57))
* Release Noir(1.0.0-beta.2)
(noir-lang/noir#6914)
([5efdd57](5efdd57))
* Remove foreign calls array from Brillig VM constructor
(noir-lang/noir#7337)
([5efdd57](5efdd57))
* Remove misleading output from `nargo check`
(noir-lang/noir#7329)
([5efdd57](5efdd57))
* Remove some unused types and functions in the AST
(noir-lang/noir#7339)
([5efdd57](5efdd57))
* Remove unnecessary constants
(noir-lang/noir#7326)
([5efdd57](5efdd57))
* Revive browser test before killing it
([#11964](#11964))
([cb47cc0](cb47cc0))
* Split acirgen into multiple modules
(noir-lang/noir#7310)
([5efdd57](5efdd57))
* Unify webpack dev server versions
([#11965](#11965))
([921d2cd](921d2cd))
</details>

<details><summary>barretenberg: 0.76.4</summary>

##
[0.76.4](barretenberg-v0.76.3...barretenberg-v0.76.4)
(2025-02-13)


### Features

* Aes decryption oracle
([#11907](#11907))
([c4ce913](c4ce913))
* **avm:** Constrained ec_add
([#11525](#11525))
([f8fe602](f8fe602))
* **avm:** Interaction testing
([#11947](#11947))
([fc647eb](fc647eb))
* **avm:** Relation microbenchmarks
([#11974](#11974))
([95b581d](95b581d))


### Miscellaneous

* **avm:** Tracegen interactions assertion
([#11972](#11972))
([b865ccc](b865ccc))
* Unify webpack dev server versions
([#11965](#11965))
([921d2cd](921d2cd))
</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 Feb 14, 2025
🤖 I have created a release *beep* *boop*
---


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

##
[0.76.4](AztecProtocol/aztec-packages@aztec-package-v0.76.3...aztec-package-v0.76.4)
(2025-02-13)


### Miscellaneous

* **aztec-package:** Synchronize aztec-packages versions
</details>

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

##
[0.76.4](AztecProtocol/aztec-packages@barretenberg.js-v0.76.3...barretenberg.js-v0.76.4)
(2025-02-13)


### Miscellaneous

* Unify webpack dev server versions
([#11965](AztecProtocol/aztec-packages#11965))
([921d2cd](AztecProtocol/aztec-packages@921d2cd))
</details>

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

##
[0.76.4](AztecProtocol/aztec-packages@aztec-packages-v0.76.3...aztec-packages-v0.76.4)
(2025-02-13)


### Features

* `FunctionDefinition::as_typed_expr`
(noir-lang/noir#7358)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Aes decryption oracle
([#11907](AztecProtocol/aztec-packages#11907))
([c4ce913](AztecProtocol/aztec-packages@c4ce913))
* **avm:** Constrained ec_add
([#11525](AztecProtocol/aztec-packages#11525))
([f8fe602](AztecProtocol/aztec-packages@f8fe602))
* **avm:** Interaction testing
([#11947](AztecProtocol/aztec-packages#11947))
([fc647eb](AztecProtocol/aztec-packages@fc647eb))
* **avm:** Relation microbenchmarks
([#11974](AztecProtocol/aztec-packages#11974))
([95b581d](AztecProtocol/aztec-packages@95b581d))
* **cli:** Add `--target-dir` option
(noir-lang/noir#7350)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Indexed protocol contracts tree
([#11897](AztecProtocol/aztec-packages#11897))
([96e84d4](AztecProtocol/aztec-packages@96e84d4))
* **performance:** Check sub operations against induction variables
(noir-lang/noir#7356)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* **performance:** Use unchecked ops based upon known induction
variables (noir-lang/noir#7344)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Small blob fixes/improvements
([#11686](AztecProtocol/aztec-packages#11686))
([4eab9fc](AztecProtocol/aztec-packages@4eab9fc))
* Update fee model
([#11953](AztecProtocol/aztec-packages#11953))
([2798d58](AztecProtocol/aztec-packages@2798d58))
* Use brillig optimized sha256
([#11696](AztecProtocol/aztec-packages#11696))
([438c905](AztecProtocol/aztec-packages@438c905))


### Bug Fixes

* Ci fixes
([#11973](AztecProtocol/aztec-packages#11973))
([6386f4e](AztecProtocol/aztec-packages@6386f4e))
* **cli:** Only lock the packages selected in the workspace
(noir-lang/noir#7345)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Deterministic generation of vkeys in ts
([#11951](AztecProtocol/aztec-packages#11951))
([7901cac](AztecProtocol/aztec-packages@7901cac))
* Incorrect secondary file in LSP errors
(noir-lang/noir#7347)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Lock git dependencies folder when resolving workspace
(noir-lang/noir#7327)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Perform SSA constraints check on final SSA
(noir-lang/noir#7334)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Remove deprecated artifacts
([#11979](AztecProtocol/aztec-packages#11979))
([4f0dce7](AztecProtocol/aztec-packages@4f0dce7))
* Remove serial queue in broker facade
([#11956](AztecProtocol/aztec-packages#11956))
([3485b52](AztecProtocol/aztec-packages@3485b52))
* **ssa:** Make the lookback feature opt-in
(noir-lang/noir#7190)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))


### Miscellaneous

* **avm:** Tracegen interactions assertion
([#11972](AztecProtocol/aztec-packages#11972))
([b865ccc](AztecProtocol/aztec-packages@b865ccc))
* Avoid doing all brillig integer arithmetic on u128s
(noir-lang/noir#7357)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Basic test for MSM in Noir to catch performance improvements and
regressions (noir-lang/noir#7341)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Bump devnet boot node resources
([#11958](AztecProtocol/aztec-packages#11958))
([bbcdefc](AztecProtocol/aztec-packages@bbcdefc))
* **ci:** Add Vecs and vecs to cspell
(noir-lang/noir#7342)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Deprecate keccak256 (noir-lang/noir#7361)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Fix warnings (noir-lang/noir#7330)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Mark sha256 as deprecated from the stdlib
(noir-lang/noir#7351)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Moving storage slot out of `NoteHeader`
([#11904](AztecProtocol/aztec-packages#11904))
([8c4bb1c](AztecProtocol/aztec-packages@8c4bb1c))
* Normalize path displayed by `nargo new`
(noir-lang/noir#7328)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Redo typo PR by osrm (noir-lang/noir#7238)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Release Noir(1.0.0-beta.2)
(noir-lang/noir#6914)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Remove foreign calls array from Brillig VM constructor
(noir-lang/noir#7337)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Remove misleading output from `nargo check`
(noir-lang/noir#7329)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Remove some unused types and functions in the AST
(noir-lang/noir#7339)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Remove unnecessary constants
(noir-lang/noir#7326)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Revive browser test before killing it
([#11964](AztecProtocol/aztec-packages#11964))
([cb47cc0](AztecProtocol/aztec-packages@cb47cc0))
* Split acirgen into multiple modules
(noir-lang/noir#7310)
([5efdd57](AztecProtocol/aztec-packages@5efdd57))
* Unify webpack dev server versions
([#11965](AztecProtocol/aztec-packages#11965))
([921d2cd](AztecProtocol/aztec-packages@921d2cd))
</details>

<details><summary>barretenberg: 0.76.4</summary>

##
[0.76.4](AztecProtocol/aztec-packages@barretenberg-v0.76.3...barretenberg-v0.76.4)
(2025-02-13)


### Features

* Aes decryption oracle
([#11907](AztecProtocol/aztec-packages#11907))
([c4ce913](AztecProtocol/aztec-packages@c4ce913))
* **avm:** Constrained ec_add
([#11525](AztecProtocol/aztec-packages#11525))
([f8fe602](AztecProtocol/aztec-packages@f8fe602))
* **avm:** Interaction testing
([#11947](AztecProtocol/aztec-packages#11947))
([fc647eb](AztecProtocol/aztec-packages@fc647eb))
* **avm:** Relation microbenchmarks
([#11974](AztecProtocol/aztec-packages#11974))
([95b581d](AztecProtocol/aztec-packages@95b581d))


### Miscellaneous

* **avm:** Tracegen interactions assertion
([#11972](AztecProtocol/aztec-packages#11972))
([b865ccc](AztecProtocol/aztec-packages@b865ccc))
* Unify webpack dev server versions
([#11965](AztecProtocol/aztec-packages#11965))
([921d2cd](AztecProtocol/aztec-packages@921d2cd))
</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.

Convert the protocol contract tree to an indexed tree
3 participants