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

fix: don't deduplicate binary math of unsigned types #6848

Merged
merged 9 commits into from
Dec 19, 2024

Conversation

asterite
Copy link
Collaborator

@asterite asterite commented Dec 17, 2024

Description

Problem

Resolves #6834

Summary

Additional Context

Documentation

Check one:

  • No documentation needed.
  • Documentation included in this PR.
  • [For Experimental Features] Documentation to be submitted in a separate PR.

PR Checklist

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt on default settings.

Copy link
Contributor

github-actions bot commented Dec 17, 2024

Changes to Brillig bytecode sizes

Generated at commit: 820178286e8332a05e4dfe5f697847ebaf40264e, compared to commit: 0d7642cb2071fbee148978a89a0922bfffe5be6a

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
sha2_byte +8 ❌ +0.29%
poseidonsponge_x5_254 +10 ❌ +0.24%

Full diff report 👇
Program Brillig opcodes (+/-) %
sha2_byte 2,775 (+8) +0.29%
poseidonsponge_x5_254 4,264 (+10) +0.24%
regression_5252 4,604 (+10) +0.22%
poseidon_bn254_hash 5,435 (+10) +0.18%
poseidon_bn254_hash_width_3 5,435 (+10) +0.18%
uhashmap 14,019 (+15) +0.11%
hashmap 21,813 (+12) +0.06%

Copy link
Contributor

github-actions bot commented Dec 17, 2024

Peak Memory Sample

Program Peak Memory
keccak256 78.15M
workspace 122.62M
regression_4709 423.26M
ram_blowup_regression 1.58G
private-kernel-tail 206.71M
private-kernel-reset 720.29M
private-kernel-inner 291.91M
parity-root 171.71M

Copy link
Contributor

github-actions bot commented Dec 17, 2024

Compilation Sample

Program Compilation Time %
sha256_regression 0m1.369s 1%
regression_4709 0m0.822s 6%
ram_blowup_regression 0m14.236s -1%
rollup-base-public 3m17.289s -6%
rollup-base-private 2m57.411s -3%
private-kernel-tail 0m1.162s -23%
private-kernel-reset 0m8.258s 9%
private-kernel-inner 0m2.347s -3%
parity-root 0m0.862s -10%
noir-contracts 2m39.470s -9%

@asterite
Copy link
Collaborator Author

Without the assert (the failing program) we get this SSA:

# Without assert
acir(inline) fn main f0 {
  b0(v0: u32, v1: u8):
    v3 = eq v1, u8 0
    v5 = lt u32 2028, v0
    enable_side_effects v3
    v6 = mul v3, v5
    enable_side_effects v6
    v8 = sub v0, u32 1
    v9 = sub v8, u32 2028
    v11 = div v9, u32 4
    v12 = add v11, u32 1
    v13 = cast v12 as i32
    v15 = lt v13, i32 0
    v16 = mul v15, v6
    constrain v16 == u1 0
    v18 = not v3
    enable_side_effects v18
    v19 = mul v18, v5
    v20 = div v9, u32 4
    enable_side_effects v19
    v21 = add v20, u32 1
    v22 = cast v21 as i32
    v23 = lt v22, i32 0
    v24 = mul v23, v19
    constrain v24 == u1 0
    enable_side_effects u1 1
    return
}

With it, we get this:

# With assert
acir(inline) fn main f0 {
  b0(v0: u32, v1: u8):
    v3 = eq v1, u8 0
    v5 = lt u32 2028, v0
    enable_side_effects v3
    v6 = mul v3, v5
    enable_side_effects v6
    v8 = sub v0, u32 1
    v9 = sub v8, u32 2028
    v11 = div v9, u32 4
    v12 = add v11, u32 1
    v13 = cast v12 as i32
    v15 = lt v13, i32 0
    v16 = mul v15, v6
    constrain v16 == u1 0
    v18 = not v3
    enable_side_effects v18
    v19 = mul v18, v5
    enable_side_effects v19
    v20 = mul v5, v19
    constrain v20 == v19
    v21 = div v9, u32 4
    v22 = add v21, u32 1
    v23 = cast v22 as i32
    v24 = lt v23, i32 0
    v25 = mul v24, v19
    constrain v25 == u1 0
    enable_side_effects u1 1
    return
}

If we rename some SSA vars so that they are the same on both sides, here's the diff we get:

image

@asterite
Copy link
Collaborator Author

asterite commented Dec 17, 2024

Here's the diff if it's a println instead of an assert:

image

@asterite
Copy link
Collaborator Author

The failure we get in both cases is this:

error: Failed constraint
   ┌─ /Users/asterite/Sandbox/one/src/main.nr:10:21
   │
10 │             assert((((year - 1) - 2028) / 4 + 1) as i32 >= 0);
   │                     -----------------------
   │
   = Call stack:
     1. /Users/asterite/Sandbox/one/src/main.nr:10:21

Copy link
Contributor

github-actions bot commented Dec 17, 2024

Changes to number of Brillig opcodes executed

Generated at commit: 820178286e8332a05e4dfe5f697847ebaf40264e, compared to commit: 0d7642cb2071fbee148978a89a0922bfffe5be6a

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
ram_blowup_regression +98,719 ❌ +12.68%
brillig_cow_regression +64,620 ❌ +12.45%
sha256_var_size_regression +1,326 ❌ +8.10%
sha256_regression +9,606 ❌ +8.09%

Full diff report 👇
Program Brillig opcodes (+/-) %
ram_blowup_regression 877,369 (+98,719) +12.68%
brillig_cow_regression 583,706 (+64,620) +12.45%
sha256_var_size_regression 17,703 (+1,326) +8.10%
sha256_regression 128,313 (+9,606) +8.09%
regression_4449 214,927 (+14,070) +7.00%
sha256_var_padding_regression 237,282 (+15,066) +6.78%
sha256_brillig_performance_regression 24,718 (+1,524) +6.57%
array_dynamic_blackbox_input 19,199 (+990) +5.44%
ecdsa_secp256k1 7,158 (+369) +5.44%
6 7,852 (+402) +5.40%
conditional_regression_short_circuit 7,930 (+402) +5.34%
sha256_var_witness_const_regression 7,560 (+360) +5.00%
sha256 15,716 (+720) +4.80%
sha2_byte 49,532 (+2,223) +4.70%
array_dynamic_nested_blackbox_input 4,730 (+180) +3.96%
loop_invariant_regression 1,206 (+42) +3.61%
conditional_1 5,918 (+201) +3.52%
keccak256 35,477 (+700) +2.01%
regression_6674_3 1,645 (+30) +1.86%
regression_5252 926,396 (+11,370) +1.24%
poseidonsponge_x5_254 186,027 (+2,274) +1.24%
poseidon_bn254_hash 164,193 (+1,599) +0.98%
poseidon_bn254_hash_width_3 164,193 (+1,599) +0.98%
hashmap 54,205 (+62) +0.11%
uhashmap 145,611 (+62) +0.04%

Copy link
Contributor

github-actions bot commented Dec 17, 2024

Changes to circuit sizes

Generated at commit: 820178286e8332a05e4dfe5f697847ebaf40264e, compared to commit: 0d7642cb2071fbee148978a89a0922bfffe5be6a

🧾 Summary (10% most significant diffs)

Program ACIR opcodes (+/-) % Circuit size (+/-) %
hashmap +4,569 ❌ +9.28% +6,068 ❌ +5.37%
slices +28 ❌ +3.64% +64 ❌ +1.64%

Full diff report 👇
Program ACIR opcodes (+/-) % Circuit size (+/-) %
hashmap 53,818 (+4,569) +9.28% 119,081 (+6,068) +5.37%
slices 798 (+28) +3.64% 3,962 (+64) +1.64%
nested_array_dynamic 3,514 (+72) +2.09% 13,033 (+100) +0.77%
nested_array_in_slice 1,038 (+28) +2.77% 5,589 (+39) +0.70%
regression_struct_array_conditional 75 (+4) +5.63% 3,208 (+5) +0.16%
regression_3607 54 (+2) +3.85% 2,821 (+3) +0.11%
conditional_regression_661 38 (+2) +5.56% 2,807 (+2) +0.07%
sha256_var_size_regression 21,969 (+2) +0.01% 79,870 (+4) +0.01%
regression 319 (-12) -3.63% 3,854 (-16) -0.41%

Copy link
Contributor

github-actions bot commented Dec 18, 2024

Execution Sample

Program Execution Time %
sha256_regression 0m0.617s 3%
regression_4709 0m0.388s -2%
ram_blowup_regression 0m4.355s -1%
rollup-base-public 0m28.148s -5%
rollup-base-private 0m26.221s 0%
private-kernel-tail 0m0.708s 4%
private-kernel-reset 0m1.485s -2%
private-kernel-inner 0m0.969s -5%
parity-root 0m0.524s 1%

@asterite
Copy link
Collaborator Author

I pushed a commit just to try something and see how opcodes change.

@vezenovm
Copy link
Contributor

vezenovm commented Dec 18, 2024

I pushed a commit just to try something and see how opcodes change.

I think marking overflowing ops as requiring acir gen predicates is the most accurate, as these ops do in fact require the predicate. This will essentially prevent hoisting sub in the same block. We just hoist based upon the current predicate. Moving has_side_effects in the cache get would prevent more deduplications than needed.

@vezenovm
Copy link
Contributor

vezenovm commented Dec 18, 2024

ram_blowup_regression +98,719 ❌ +12.68%
brillig_cow_regression +64,620 ❌ +12.45%

We may be able to optimize this regression a bit in a follow-up as loop invariant code motion currently checks whether a binary operation requires a predicate inside of the check for whether an instruction can be deduplicated.

let can_be_deduplicated = instruction.can_be_deduplicated(self.inserter.function, false)

Looking at the overflow check in brillig gen:

We can see that there are a few instructions generated during brillig gen (the Mul check is the most expensive) that we should be able to move to SSA. All instructions other than the final constrain we should then be able to hoist out of the loop.

@asterite asterite changed the title Add a regression test for 6834 fix: don't deduplicate binary math of unsigned types Dec 18, 2024
@asterite
Copy link
Collaborator Author

I think marking overflowing ops as requiring acir gen predicates is the most accurate

Given that the name is requires_acir_gen_predicate, and that there brillig opcodes executed has increased in this PR... does this new logic is the same in acir and brillig?

@vezenovm
Copy link
Contributor

vezenovm commented Dec 18, 2024

Given that the name is requires_acir_gen_predicate, and that there brillig opcodes executed has increased in this PR... does this new logic is the same in acir and brillig?

It is the same in the case of loop invariant code motion. For ACIR this just helps compilation time as we unroll all loops, but this can change the final Brillig bytecode and execution trace. In both cases we do not want to be hoisting these instructions. This means we want this check:

let can_be_deduplicated = instruction.can_be_deduplicated(self.inserter.function, false)

to return false.

can_be_deduplicated currently calls requires_acir_gen_predicate internally. A lot of the instructions which require a predicate have the same status in Brillig and ACIR (such as array get and checked binary ops), thus can_be_deduplicated was re-using requires_acir_gen_predicate. can_be_deduplicated in fact has more strict conditions than requires_acir_gen_predicate.

As noted above, the method to determine whether we can deduplicate instructions is muddled as it is used for both ACIR and Brillig runtimes. The intertwining of this logic has happened before and is why these methods were originally written, but we should re-assess. We may simply want better documentation surrounding these methods. We could also make a separate can_be_deduplicated method for Brillig vs. ACIR runtimes as to have a clear distinction. For example, in the Brillig runtime case, we would instead deduplicate Binary instructions based off of the deduplicate_with_predicate flag. This is more accurate for Brillig as the reason it cannot be hoisted is not due to its reliance on the acir gen predicate, but rather due to that the brillig gen overflow check code gens constrains:

.codegen_constrain(condition, Some("attempt to add with overflow".to_string()));

This can happen in follow-up work though, and updating just requires_acir_gen_predicate should be fine for this PR.

@asterite asterite added this pull request to the merge queue Dec 19, 2024
Merged via the queue into master with commit ee0754b Dec 19, 2024
87 checks passed
@asterite asterite deleted the ab/assertion-changes-program branch December 19, 2024 16:39
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Dec 20, 2024
chore: Avoid duplicate Not instructions during flattening (noir-lang/noir#6886)
chore: Use smallvec for instruction results (noir-lang/noir#6877)
chore(ci): Display times in compilation and execution reports only with seconds (noir-lang/noir#6880)
feat: flatten nested if-else statements with equivalent conditions (noir-lang/noir#6875)
chore(ci): Take averages for compilation and execution report of small programs (noir-lang/noir#6874)
fix: don't deduplicate binary math of unsigned types (noir-lang/noir#6848)
feat: warn on unnecessary unsafe blocks (noir-lang/noir#6867)
chore: remove the `as_field` and `from_field` built-ins (noir-lang/noir#6845)
chore: fix warnings (noir-lang/noir#6863)
fix: detect cycles in globals (noir-lang/noir#6859)
chore(ci): Execution time report (noir-lang/noir#6827)
chore(ci): Add non determinism check and fixes (noir-lang/noir#6847)
chore(docs): updating the solidity contract how-to guide (noir-lang/noir#6804)
fix: double alias in path (noir-lang/noir#6855)
feat: configurable external check failures (noir-lang/noir#6810)
chore: move constant creation out of loop (noir-lang/noir#6836)
fix: implement `as_field` and `from_field` in the interpreter (noir-lang/noir#6829)
chore: Use Vec for callstacks (noir-lang/noir#6821)
feat: replace `eval_global_as_array_length` with type/interpreter evaluation (noir-lang/noir#6469)
chore: refactor `DataFlowGraph.insert_instruction_and_results` (noir-lang/noir#6823)
chore(docs): updating noirjs tutorial for 1.0.0 (noir-lang/noir#6792)
feat: Sync from aztec-packages (noir-lang/noir#6824)
chore: Have rust-analyzer use the stable toolchain (noir-lang/noir#6825)
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Dec 20, 2024
chore: Avoid duplicate Not instructions during flattening (noir-lang/noir#6886)
chore: Use smallvec for instruction results (noir-lang/noir#6877)
chore(ci): Display times in compilation and execution reports only with seconds (noir-lang/noir#6880)
feat: flatten nested if-else statements with equivalent conditions (noir-lang/noir#6875)
chore(ci): Take averages for compilation and execution report of small programs (noir-lang/noir#6874)
fix: don't deduplicate binary math of unsigned types (noir-lang/noir#6848)
feat: warn on unnecessary unsafe blocks (noir-lang/noir#6867)
chore: remove the `as_field` and `from_field` built-ins (noir-lang/noir#6845)
chore: fix warnings (noir-lang/noir#6863)
fix: detect cycles in globals (noir-lang/noir#6859)
chore(ci): Execution time report (noir-lang/noir#6827)
chore(ci): Add non determinism check and fixes (noir-lang/noir#6847)
chore(docs): updating the solidity contract how-to guide (noir-lang/noir#6804)
fix: double alias in path (noir-lang/noir#6855)
feat: configurable external check failures (noir-lang/noir#6810)
chore: move constant creation out of loop (noir-lang/noir#6836)
fix: implement `as_field` and `from_field` in the interpreter (noir-lang/noir#6829)
chore: Use Vec for callstacks (noir-lang/noir#6821)
feat: replace `eval_global_as_array_length` with type/interpreter evaluation (noir-lang/noir#6469)
chore: refactor `DataFlowGraph.insert_instruction_and_results` (noir-lang/noir#6823)
chore(docs): updating noirjs tutorial for 1.0.0 (noir-lang/noir#6792)
feat: Sync from aztec-packages (noir-lang/noir#6824)
chore: Have rust-analyzer use the stable toolchain (noir-lang/noir#6825)
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Dec 20, 2024
…oir-lang/noir#6898)

chore: clean up gates reports script (noir-lang/noir#6896)
chore: move empty programs to `compile_success_empty` (noir-lang/noir#6891)
feat: add a warning when using unsafe blocks without safety comments (noir-lang/noir#6860)
chore: quick docs fix for #6839 (noir-lang/noir#6840)
chore: Avoid duplicate Not instructions during flattening (noir-lang/noir#6886)
chore: Use smallvec for instruction results (noir-lang/noir#6877)
chore(ci): Display times in compilation and execution reports only with seconds (noir-lang/noir#6880)
feat: flatten nested if-else statements with equivalent conditions (noir-lang/noir#6875)
chore(ci): Take averages for compilation and execution report of small programs (noir-lang/noir#6874)
fix: don't deduplicate binary math of unsigned types (noir-lang/noir#6848)
feat: warn on unnecessary unsafe blocks (noir-lang/noir#6867)
chore: remove the `as_field` and `from_field` built-ins (noir-lang/noir#6845)
chore: fix warnings (noir-lang/noir#6863)
fix: detect cycles in globals (noir-lang/noir#6859)
chore(ci): Execution time report (noir-lang/noir#6827)
chore(ci): Add non determinism check and fixes (noir-lang/noir#6847)
chore(docs): updating the solidity contract how-to guide (noir-lang/noir#6804)
fix: double alias in path (noir-lang/noir#6855)
feat: configurable external check failures (noir-lang/noir#6810)
chore: move constant creation out of loop (noir-lang/noir#6836)
fix: implement `as_field` and `from_field` in the interpreter (noir-lang/noir#6829)
chore: Use Vec for callstacks (noir-lang/noir#6821)
feat: replace `eval_global_as_array_length` with type/interpreter evaluation (noir-lang/noir#6469)
chore: refactor `DataFlowGraph.insert_instruction_and_results` (noir-lang/noir#6823)
chore(docs): updating noirjs tutorial for 1.0.0 (noir-lang/noir#6792)
feat: Sync from aztec-packages (noir-lang/noir#6824)
chore: Have rust-analyzer use the stable toolchain (noir-lang/noir#6825)
AztecBot added a commit to AztecProtocol/aztec-packages that referenced this pull request Dec 20, 2024
…r#6898)

chore: clean up gates reports script (noir-lang/noir#6896)
chore: move empty programs to `compile_success_empty` (noir-lang/noir#6891)
feat: add a warning when using unsafe blocks without safety comments (noir-lang/noir#6860)
chore: quick docs fix for #6839 (noir-lang/noir#6840)
chore: Avoid duplicate Not instructions during flattening (noir-lang/noir#6886)
chore: Use smallvec for instruction results (noir-lang/noir#6877)
chore(ci): Display times in compilation and execution reports only with seconds (noir-lang/noir#6880)
feat: flatten nested if-else statements with equivalent conditions (noir-lang/noir#6875)
chore(ci): Take averages for compilation and execution report of small programs (noir-lang/noir#6874)
fix: don't deduplicate binary math of unsigned types (noir-lang/noir#6848)
feat: warn on unnecessary unsafe blocks (noir-lang/noir#6867)
chore: remove the `as_field` and `from_field` built-ins (noir-lang/noir#6845)
chore: fix warnings (noir-lang/noir#6863)
fix: detect cycles in globals (noir-lang/noir#6859)
chore(ci): Execution time report (noir-lang/noir#6827)
chore(ci): Add non determinism check and fixes (noir-lang/noir#6847)
chore(docs): updating the solidity contract how-to guide (noir-lang/noir#6804)
fix: double alias in path (noir-lang/noir#6855)
feat: configurable external check failures (noir-lang/noir#6810)
chore: move constant creation out of loop (noir-lang/noir#6836)
fix: implement `as_field` and `from_field` in the interpreter (noir-lang/noir#6829)
chore: Use Vec for callstacks (noir-lang/noir#6821)
feat: replace `eval_global_as_array_length` with type/interpreter evaluation (noir-lang/noir#6469)
chore: refactor `DataFlowGraph.insert_instruction_and_results` (noir-lang/noir#6823)
chore(docs): updating noirjs tutorial for 1.0.0 (noir-lang/noir#6792)
feat: Sync from aztec-packages (noir-lang/noir#6824)
chore: Have rust-analyzer use the stable toolchain (noir-lang/noir#6825)
TomAFrench added a commit to AztecProtocol/aztec-packages that referenced this pull request Dec 20, 2024
Automated pull of development from the
[noir](https://github.com/noir-lang/noir) programming language, a
dependency of Aztec.
BEGIN_COMMIT_OVERRIDE
chore: remove malformed functions from brillig reports
(noir-lang/noir#6898)
chore: clean up gates reports script
(noir-lang/noir#6896)
chore: move empty programs to `compile_success_empty`
(noir-lang/noir#6891)
feat: add a warning when using unsafe blocks without safety comments
(noir-lang/noir#6860)
chore: quick docs fix for #6839
(noir-lang/noir#6840)
chore: Avoid duplicate Not instructions during flattening
(noir-lang/noir#6886)
chore: Use smallvec for instruction results
(noir-lang/noir#6877)
chore(ci): Display times in compilation and execution reports only with
seconds (noir-lang/noir#6880)
feat: flatten nested if-else statements with equivalent conditions
(noir-lang/noir#6875)
chore(ci): Take averages for compilation and execution report of small
programs (noir-lang/noir#6874)
fix: don't deduplicate binary math of unsigned types
(noir-lang/noir#6848)
feat: warn on unnecessary unsafe blocks
(noir-lang/noir#6867)
chore: remove the `as_field` and `from_field` built-ins
(noir-lang/noir#6845)
chore: fix warnings (noir-lang/noir#6863)
fix: detect cycles in globals
(noir-lang/noir#6859)
chore(ci): Execution time report
(noir-lang/noir#6827)
chore(ci): Add non determinism check and fixes
(noir-lang/noir#6847)
chore(docs): updating the solidity contract how-to guide
(noir-lang/noir#6804)
fix: double alias in path (noir-lang/noir#6855)
feat: configurable external check failures
(noir-lang/noir#6810)
chore: move constant creation out of loop
(noir-lang/noir#6836)
fix: implement `as_field` and `from_field` in the interpreter
(noir-lang/noir#6829)
chore: Use Vec for callstacks
(noir-lang/noir#6821)
feat: replace `eval_global_as_array_length` with type/interpreter
evaluation (noir-lang/noir#6469)
chore: refactor `DataFlowGraph.insert_instruction_and_results`
(noir-lang/noir#6823)
chore(docs): updating noirjs tutorial for 1.0.0
(noir-lang/noir#6792)
feat: Sync from aztec-packages
(noir-lang/noir#6824)
chore: Have rust-analyzer use the stable toolchain
(noir-lang/noir#6825)
END_COMMIT_OVERRIDE

---------

Co-authored-by: ludamad <[email protected]>
Co-authored-by: Tom French <[email protected]>
Co-authored-by: Tom French <[email protected]>
PhilWindle pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Dec 23, 2024
🤖 I have created a release *beep* *boop*
---


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

##
[0.68.1](aztec-package-v0.68.0...aztec-package-v0.68.1)
(2024-12-23)


### Miscellaneous

* Configurable parallelism in bootstrap
([#10909](#10909))
([5260f1e](5260f1e))
</details>

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

##
[0.68.1](barretenberg.js-v0.68.0...barretenberg.js-v0.68.1)
(2024-12-23)


### Miscellaneous

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

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

##
[0.68.1](aztec-packages-v0.68.0...aztec-packages-v0.68.1)
(2024-12-23)


### Features

* Add a warning when using unsafe blocks without safety comments
(noir-lang/noir#6860)
([84a4005](84a4005))
* Add limit to unique contract call
([#10640](#10640))
([d340f0b](d340f0b))
* Configurable external check failures
(noir-lang/noir#6810)
([84a4005](84a4005))
* **docs:** Add aztec-wallet proving
([#10847](#10847))
([3efae86](3efae86))
* Flatten nested if-else statements with equivalent conditions
(noir-lang/noir#6875)
([84a4005](84a4005))
* **p2p:** Timeout peers, disconnect from badly scored peers
([#10907](#10907))
([76a23eb](76a23eb))
* Replace `eval_global_as_array_length` with type/interpreter evaluation
(noir-lang/noir#6469)
([84a4005](84a4005))
* Revamped sequencer timetable and tx processing timeout
([#10870](#10870))
([145122b](145122b))
* Sync from aztec-packages (noir-lang/noir#6824)
([84a4005](84a4005))
* Warn on unnecessary unsafe blocks
(noir-lang/noir#6867)
([84a4005](84a4005))


### Bug Fixes

* Add devcoin to faucet after deployment
([#10903](#10903))
([6aa5369](6aa5369))
* CI kind test fix
([#10932](#10932))
([bda1ac7](bda1ac7))
* **ci:** Tester/builder start race conditions
([#10893](#10893))
([4250782](4250782))
* Conditionally deploy deterministic deployment proxy
([#10936](#10936))
([48624b7](48624b7))
* Degrade libp2p crypto package
([#10876](#10876))
([9293f38](9293f38))
* Detect cycles in globals (noir-lang/noir#6859)
([84a4005](84a4005))
* Don't deduplicate binary math of unsigned types
(noir-lang/noir#6848)
([84a4005](84a4005))
* Double alias in path (noir-lang/noir#6855)
([84a4005](84a4005))
* Implement `as_field` and `from_field` in the interpreter
(noir-lang/noir#6829)
([84a4005](84a4005))
* Install Yarn 4.5.2 to build WASM
([#10940](#10940))
([2a76380](2a76380))
* Removed Sepolia stuff from devnet deploy action
([#10916](#10916))
([fbf120b](fbf120b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](#10879))
([ab3f318](ab3f318)),
closes
[#7385](#7385)
* Avoid duplicate Not instructions during flattening
(noir-lang/noir#6886)
([84a4005](84a4005))
* **ci:** Add non determinism check and fixes
(noir-lang/noir#6847)
([84a4005](84a4005))
* **ci:** Display times in compilation and execution reports only with
seconds (noir-lang/noir#6880)
([84a4005](84a4005))
* **ci:** Execution time report
(noir-lang/noir#6827)
([84a4005](84a4005))
* **ci:** Take averages for compilation and execution report of small
programs (noir-lang/noir#6874)
([84a4005](84a4005))
* Clean up gates reports script
(noir-lang/noir#6896)
([84a4005](84a4005))
* Configurable parallelism in bootstrap
([#10909](#10909))
([5260f1e](5260f1e))
* **docs:** Updating noirjs tutorial for 1.0.0
(noir-lang/noir#6792)
([84a4005](84a4005))
* **docs:** Updating the solidity contract how-to guide
(noir-lang/noir#6804)
([84a4005](84a4005))
* Fix warnings (noir-lang/noir#6863)
([84a4005](84a4005))
* Have rust-analyzer use the stable toolchain
(noir-lang/noir#6825)
([84a4005](84a4005))
* Move constant creation out of loop
(noir-lang/noir#6836)
([84a4005](84a4005))
* Move empty programs to `compile_success_empty`
(noir-lang/noir#6891)
([84a4005](84a4005))
* New default resource values for GKE
([#10928](#10928))
([18e38d3](18e38d3))
* Quick docs fix for
[#6839](#6839)
(noir-lang/noir#6840)
([84a4005](84a4005))
* Refactor `DataFlowGraph.insert_instruction_and_results`
(noir-lang/noir#6823)
([84a4005](84a4005))
* Remove get registered account from pxe
([#10479](#10479))
([ee568ff](ee568ff))
* Remove malformed functions from brillig reports
(noir-lang/noir#6898)
([84a4005](84a4005))
* Remove the `as_field` and `from_field` built-ins
(noir-lang/noir#6845)
([84a4005](84a4005))
* Reorganise translator proving key construction
([#10853](#10853))
([5da4d1b](5da4d1b))
* Replace relative paths to noir-protocol-circuits
([b9f9875](b9f9875))
* Update gates diff action
([#10917](#10917))
([57439a7](57439a7))
* Use smallvec for instruction results
(noir-lang/noir#6877)
([84a4005](84a4005))
* Use Vec for callstacks (noir-lang/noir#6821)
([84a4005](84a4005))
</details>

<details><summary>barretenberg: 0.68.1</summary>

##
[0.68.1](barretenberg-v0.68.0...barretenberg-v0.68.1)
(2024-12-23)


### Features

* Add limit to unique contract call
([#10640](#10640))
([d340f0b](d340f0b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](#10879))
([ab3f318](ab3f318)),
closes
[#7385](#7385)
* Reorganise translator proving key construction
([#10853](#10853))
([5da4d1b](5da4d1b))
</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 24, 2024
🤖 I have created a release *beep* *boop*
---


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

##
[0.68.1](AztecProtocol/aztec-packages@aztec-package-v0.68.0...aztec-package-v0.68.1)
(2024-12-23)


### Miscellaneous

* Configurable parallelism in bootstrap
([#10909](AztecProtocol/aztec-packages#10909))
([5260f1e](AztecProtocol/aztec-packages@5260f1e))
</details>

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

##
[0.68.1](AztecProtocol/aztec-packages@barretenberg.js-v0.68.0...barretenberg.js-v0.68.1)
(2024-12-23)


### Miscellaneous

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

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

##
[0.68.1](AztecProtocol/aztec-packages@aztec-packages-v0.68.0...aztec-packages-v0.68.1)
(2024-12-23)


### Features

* Add a warning when using unsafe blocks without safety comments
(noir-lang/noir#6860)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Add limit to unique contract call
([#10640](AztecProtocol/aztec-packages#10640))
([d340f0b](AztecProtocol/aztec-packages@d340f0b))
* Configurable external check failures
(noir-lang/noir#6810)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **docs:** Add aztec-wallet proving
([#10847](AztecProtocol/aztec-packages#10847))
([3efae86](AztecProtocol/aztec-packages@3efae86))
* Flatten nested if-else statements with equivalent conditions
(noir-lang/noir#6875)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **p2p:** Timeout peers, disconnect from badly scored peers
([#10907](AztecProtocol/aztec-packages#10907))
([76a23eb](AztecProtocol/aztec-packages@76a23eb))
* Replace `eval_global_as_array_length` with type/interpreter evaluation
(noir-lang/noir#6469)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Revamped sequencer timetable and tx processing timeout
([#10870](AztecProtocol/aztec-packages#10870))
([145122b](AztecProtocol/aztec-packages@145122b))
* Sync from aztec-packages (noir-lang/noir#6824)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Warn on unnecessary unsafe blocks
(noir-lang/noir#6867)
([84a4005](AztecProtocol/aztec-packages@84a4005))


### Bug Fixes

* Add devcoin to faucet after deployment
([#10903](AztecProtocol/aztec-packages#10903))
([6aa5369](AztecProtocol/aztec-packages@6aa5369))
* CI kind test fix
([#10932](AztecProtocol/aztec-packages#10932))
([bda1ac7](AztecProtocol/aztec-packages@bda1ac7))
* **ci:** Tester/builder start race conditions
([#10893](AztecProtocol/aztec-packages#10893))
([4250782](AztecProtocol/aztec-packages@4250782))
* Conditionally deploy deterministic deployment proxy
([#10936](AztecProtocol/aztec-packages#10936))
([48624b7](AztecProtocol/aztec-packages@48624b7))
* Degrade libp2p crypto package
([#10876](AztecProtocol/aztec-packages#10876))
([9293f38](AztecProtocol/aztec-packages@9293f38))
* Detect cycles in globals (noir-lang/noir#6859)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Don't deduplicate binary math of unsigned types
(noir-lang/noir#6848)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Double alias in path (noir-lang/noir#6855)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Implement `as_field` and `from_field` in the interpreter
(noir-lang/noir#6829)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Install Yarn 4.5.2 to build WASM
([#10940](AztecProtocol/aztec-packages#10940))
([2a76380](AztecProtocol/aztec-packages@2a76380))
* Removed Sepolia stuff from devnet deploy action
([#10916](AztecProtocol/aztec-packages#10916))
([fbf120b](AztecProtocol/aztec-packages@fbf120b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](AztecProtocol/aztec-packages#10879))
([ab3f318](AztecProtocol/aztec-packages@ab3f318)),
closes
[#7385](AztecProtocol/aztec-packages#7385)
* Avoid duplicate Not instructions during flattening
(noir-lang/noir#6886)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Add non determinism check and fixes
(noir-lang/noir#6847)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Display times in compilation and execution reports only with
seconds (noir-lang/noir#6880)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Execution time report
(noir-lang/noir#6827)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Take averages for compilation and execution report of small
programs (noir-lang/noir#6874)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Clean up gates reports script
(noir-lang/noir#6896)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Configurable parallelism in bootstrap
([#10909](AztecProtocol/aztec-packages#10909))
([5260f1e](AztecProtocol/aztec-packages@5260f1e))
* **docs:** Updating noirjs tutorial for 1.0.0
(noir-lang/noir#6792)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **docs:** Updating the solidity contract how-to guide
(noir-lang/noir#6804)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Fix warnings (noir-lang/noir#6863)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Have rust-analyzer use the stable toolchain
(noir-lang/noir#6825)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Move constant creation out of loop
(noir-lang/noir#6836)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Move empty programs to `compile_success_empty`
(noir-lang/noir#6891)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* New default resource values for GKE
([#10928](AztecProtocol/aztec-packages#10928))
([18e38d3](AztecProtocol/aztec-packages@18e38d3))
* Quick docs fix for
[#6839](AztecProtocol/aztec-packages#6839)
(noir-lang/noir#6840)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Refactor `DataFlowGraph.insert_instruction_and_results`
(noir-lang/noir#6823)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Remove get registered account from pxe
([#10479](AztecProtocol/aztec-packages#10479))
([ee568ff](AztecProtocol/aztec-packages@ee568ff))
* Remove malformed functions from brillig reports
(noir-lang/noir#6898)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Remove the `as_field` and `from_field` built-ins
(noir-lang/noir#6845)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Reorganise translator proving key construction
([#10853](AztecProtocol/aztec-packages#10853))
([5da4d1b](AztecProtocol/aztec-packages@5da4d1b))
* Replace relative paths to noir-protocol-circuits
([b9f9875](AztecProtocol/aztec-packages@b9f9875))
* Update gates diff action
([#10917](AztecProtocol/aztec-packages#10917))
([57439a7](AztecProtocol/aztec-packages@57439a7))
* Use smallvec for instruction results
(noir-lang/noir#6877)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Use Vec for callstacks (noir-lang/noir#6821)
([84a4005](AztecProtocol/aztec-packages@84a4005))
</details>

<details><summary>barretenberg: 0.68.1</summary>

##
[0.68.1](AztecProtocol/aztec-packages@barretenberg-v0.68.0...barretenberg-v0.68.1)
(2024-12-23)


### Features

* Add limit to unique contract call
([#10640](AztecProtocol/aztec-packages#10640))
([d340f0b](AztecProtocol/aztec-packages@d340f0b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](AztecProtocol/aztec-packages#10879))
([ab3f318](AztecProtocol/aztec-packages@ab3f318)),
closes
[#7385](AztecProtocol/aztec-packages#7385)
* Reorganise translator proving key construction
([#10853](AztecProtocol/aztec-packages#10853))
([5da4d1b](AztecProtocol/aztec-packages@5da4d1b))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
TomAFrench added a commit to winderica/noir that referenced this pull request Jan 3, 2025
* master:
  chore: add if/loop tip (separate from no-predicate noir-lang#5657) (noir-lang#6806)
  chore: move implementation of print foreign call into `nargo` (noir-lang#6865)
  chore: document format strings (noir-lang#6920)
  chore: add `rollup_root` and `rollup_block_merge` to tracked protocol circuits (noir-lang#6903)
  fix: consistent file_id across installation paths (noir-lang#6912)
  fix: bigint builtins are foreigns (noir-lang#6892)
  fix: remove unnecessary cast in bit-shift (noir-lang#6890)
  chore: Release Noir(1.0.0-beta.1) (noir-lang#6622)
  chore: Add `Instruction::Noop` (noir-lang#6899)
  chore: remove malformed functions from brillig reports (noir-lang#6898)
  chore: clean up gates reports script (noir-lang#6896)
  chore: move empty programs to `compile_success_empty` (noir-lang#6891)
  feat: add a warning when using unsafe blocks without safety comments (noir-lang#6860)
  chore: quick docs fix for noir-lang#6839 (noir-lang#6840)
  chore: Avoid duplicate Not instructions during flattening (noir-lang#6886)
  chore: Use smallvec for instruction results (noir-lang#6877)
  chore(ci): Display times in compilation and execution reports only with seconds (noir-lang#6880)
  feat: flatten nested if-else statements with equivalent conditions (noir-lang#6875)
  chore(ci): Take averages for compilation and execution report of small programs (noir-lang#6874)
  fix: don't deduplicate binary math of unsigned types (noir-lang#6848)
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.

Constraints mistakenly failing until a pointless print or assert statement is added
2 participants