chore: Accumulated backports to v4-next#23080
Merged
Merged
Conversation
…source Adds a generation script that parses the AztecNode and AztecNodeAdmin interfaces to produce the API reference doc, ensuring it stays in sync with the actual RPC surface. Fixes missing endpoints (getCheckpointedBlockNumber, getCheckpointsDataForEpoch, etc.) and removes stale methods.
…s on PATH (#22902) Resolves [F-613](https://linear.app/aztec-labs/issue/F-613/aztec-installer-shadows-user-forge-nargo-on-path). The installer used to drop `forge`, `nargo`, `anvil`, `bb`, `pxe`, `txe`, etc. directly into `~/.aztec/current/bin` under bare names, silently shadowing user-installed tools in unrelated projects. Native binaries now live in `~/.aztec/current/internal-bin` (off `PATH`) and are exposed only via `aztec-<tool>` symlinks in `~/.aztec/current/bin`. The `aztec` entrypoint is a small wrapper that prepends `internal-bin` to its subprocess `PATH`, so `aztec test` and `aztec start --local-network` continue to resolve bundled `nargo` / `anvil` by basename without leaking them to the user's shell. `aztec-up/test/no_shadow_user_bins.sh` is a new regression test that plants user shims for every bare name, asserts the shims win on `PATH`, and asserts every entry in `current/bin` is `aztec` or `aztec-*`. Migration notes and the affected tutorials are updated to the new `aztec-*` names. The issue mentions appropriately handling binaries calling other binaries by name. I felt that was overly defensive and we should rely on tools cross-calling bins with an absolute path. Rather than defending against this with extra scaffolding in our wrappers, the correct fix is for the tools to use an absolute bundled path for internal tool calls. (cherry picked from commit 0aaf27c)
aave_bridge.md was deleted on backport-to-v4-next-staging but modified by the cherry-pick. Drop the file to match the target branch state.
We correctly .gitignore prebuilt sqlite artifacts since we fetch and verify them on build, however, this is inconvenient for users of our packages, since it leaves the burden of re-vendoring up to them. This PR introduces an .npmignore file to the sqlite npm package, which by convention overshadows the .gitignore file when npm produces the package tarball. It also includes a verification script to make sure there's no loose ends in the process
Records the raw cherry-pick state (including conflict markers) so reviewers can see exactly what conflicted before resolution. Original PR: #22985
Resolve conflicts in #22985 cherry-pick onto v4-next-staging: - migration_notes.md: keep only the new DeployMethod note. Drop unrelated entries (getBlock/getCheckpoint, feeAssetPriceModifier, Domain separators, aztec-up table, slasher renames, Unreleased v5 returnReceipt removal) from PRs not yet backported. - txe_oracles.nr / constants*.nr: drop bleed-through constants (NULL_MSG_SENDER_CONTRACT_ADDRESS, DOM_SEP__HANDSHAKE_SECRET_HASH, DOM_SEP__MERKLE_HASH, DOM_SEP__NON_INTERACTIVE_HANDSHAKE_LOG_TAG, DOM_SEP__NULLIFIER_MERKLE, DOM_SEP__PARTIAL_NOTE_COMMITMENT, DOM_SEP__PUBLIC_DATA_MERKLE) introduced by other PRs. - bot/factory.ts: adopt new DeployInstantiationOptions API; drop setupTokenWithOptionalEarlyRefuel / setupTokenContractWithOptionalEarlyRefuel / getTokenInstance helpers from an unbackported refuel PR; hoist instance variable so the post-if address read works on v4-next. - e2e tests + cli-wallet/deploy.ts: adopt new DeployInstantiationOptions API (salt/deployer/universalDeploy/publicKeys move to construction); keep v4-next-only 'wait: { returnReceipt: true }' callers compatible. - aztec.js/api/contract.ts: keep DeployTxReceipt / DeployWaitOptions / DeployInteractionWaitOptions exports (v4-next-only). - e2e_ha_full.test.ts: drop the keystore-reload test (introduced by an unbackported keystore-reload PR). - token_bridge/index.ts: keep node.getProvenBlockNumber() (the new getBlockNumber('proven') ships with the unbackported getBlock RPC PR).
v4-next-staging keeps DeployTxReceipt / DeployWaitOptions and the
'wait: { returnReceipt: true }' API. The upstream PR removed
DeployInteractionWaitOptions and tightened the generic constraint to
extends InteractionWaitOptions. Switch DeployOptions, DeployReturn,
convertDeployOptionsToSendOptions, send overloads, and the deployAccounts
parameter type back to DeployInteractionWaitOptions so the v4-next-only
returnReceipt callers keep type-checking.
…v4-next (#23081) Backport of #23041 to `backport-to-v4-next-staging`. ## Context The automatic backport ([run 25543923430](https://github.com/AztecProtocol/aztec-packages/actions/runs/25543923430)) reported a cherry-pick failure, but a fresh cherry-pick of `719960de7d` onto `backport-to-v4-next-staging` (HEAD `03f867bb5d`) applied cleanly with **no conflicts**. The auto-backport likely raced against an intermediate state. The resulting commit is byte-identical to the original. ## Changes Single commit cherry-picked from #23041: - `yarn-project/aztec.js/src/aztec.js/src/wallet/wallet.ts` — adds `sendMessagesAs: optional(schemas.AztecAddress)` to `SendOptionsSchema` and `SimulateOptionsSchema` (the latter inherited by `ProfileOptionsSchema`). - `yarn-project/aztec.js/src/wallet/wallet.test.ts` — extends `MockWallet` to capture last opts and adds assertions that `sendMessagesAs` round-trips through the schema for `simulateTx`, `profileTx`, and `sendTx`. The underlying TS types (`SimulateInteractionOptions`, `ProfileInteractionOptions`, `SendInteractionOptions`) already have `sendMessagesAs?: AztecAddress` in `interaction_options.ts:121` on this branch, so no extra changes were needed — only the schemas needed to learn the field. ## Test plan - Schema round-trip is exercised by `wallet.test.ts` (`WalletSchema` describe block). ClaudeBox log: https://claudebox.work/s/65355673e2d1830e?run=1
## Summary Backport of [#22985](#22985) (`fix: better DeployMethod`) to `backport-to-v4-next-staging`. The original PR refactors `DeployMethod` so that all address-affecting parameters (`salt`, `deployer`, `universalDeploy`, `publicKeys`) are locked in at construction time via a new `DeployInstantiationOptions` argument, and removes the silent salt-cache poisoning bug where the address could change between calls. See the migration notes added under `## TBD` for the full API change. ## Commits This backport preserves the standard 3-commit history so reviewers can see exactly what conflicted and how it was resolved: 1. **`chore: cherry-pick #22985 ... with conflicts`** — raw `git cherry-pick` result with conflict markers in place. Does not compile. 2. **`fix: resolve cherry-pick conflicts`** — resolution. Notable choices: - `migration_notes.md`: only the new DeployMethod note was added. Other entries that came in via the cherry-pick (`getBlock` / `getCheckpoint`, `feeAssetPriceModifier`, Domain separators, aztec-up table reformatting) belong to PRs that have not been backported, so they were dropped to avoid bringing in unrelated changes. - `txe_oracles.nr`, `constants.nr`, `constants_tests.nr`: dropped formatting-only diffs that depended on constants/types not present on v4-next (`MAX_PRIVATE_LOGS_PER_TX`, `PRIVATE_LOG_SIZE_IN_FIELDS`, `DOM_SEP__HANDSHAKE_SECRET_HASH`, `DOM_SEP__MERKLE_HASH`, etc.). - `bot/src/factory.ts`: dropped the new `setupTokenWithOptionalEarlyRefuel` / `setupTokenContractWithOptionalEarlyRefuel` / `getTokenInstance` helpers (introduced by an unrelated PR) and applied the new `DeployInstantiationOptions` API to the existing `setupToken` flow. - `e2e/composed/ha/e2e_ha_full.test.ts`: dropped the `should reload keystore via admin API and keep building blocks after swapping attesters` test that does not exist on v4-next. - `docs/examples/ts/aave_bridge`, `docs/examples/ts/example_swap`: kept deleted (modify/delete conflict — these examples don't exist on v4-next). - `docs/examples/ts/token_bridge/index.ts`: kept `node.getProvenBlockNumber()` — the new `getBlockNumber('proven')` is from a different PR. - End-to-end tests, `aztec.js/src/api/contract.ts`, `bot`, etc.: adopted the new `DeployInstantiationOptions` API; kept v4-next-only `DeployTxReceipt` / `DeployWaitOptions` exports. 3. **`fix: restore DeployInteractionWaitOptions for v4-next returnReceipt API`** — v4-next still supports `wait: { returnReceipt: true }` (a feature added on v4-next that does not exist upstream). The upstream PR removed `DeployInteractionWaitOptions` and tightened `DeployOptions<W extends InteractionWaitOptions>`, which broke type-checking for the existing `returnReceipt` callers. This commit restores `DeployInteractionWaitOptions = NoWait | DeployWaitOptions | undefined` and rewires `DeployOptions` / `DeployReturn` / `send` to use it, so the v4-next-only `returnReceipt: true` callers keep type-checking. ## Test plan - [ ] CI green on this branch - [ ] e2e_deploy_contract tests pass ClaudeBox log: https://claudebox.work/s/2e03d384f1f73fd0?run=1
…902-aztec-up-shadow-fix
Drop incoming entries that don't exist on v4-next (DOM_SEP__MERKLE_HASH, DOM_SEP__NULLIFIER_MERKLE, DOM_SEP__PARTIAL_NOTE_COMMITMENT, DOM_SEP__PUBLIC_DATA_MERKLE) while keeping the two new ones added by #22854 (DOM_SEP__HANDSHAKE_SECRET_HASH, DOM_SEP__NON_INTERACTIVE_HANDSHAKE_LOG_TAG). HashedValueTester sized <58, 51> = v4-next baseline <56, 49> + 2 new dom seps.
) ## Summary CI3 on PR #23080 failed because the backported tests in `log_service.test.ts` (from #23088) call `Tag.random()`, but the `Tag` class on `v4-next` does not yet have that static factory — it was added on `next` by #22516, which has not been backported. This adds `Tag.random()` (and switches `Fr` from a type-only import) on the v4-next branch. Mirrors the upstream definition exactly. ## Test plan - CI on PR #23080 should now pass `pxe` unit tests once this lands on `backport-to-v4-next-staging`. ClaudeBox log: https://claudebox.work/s/3be07c7bc11fd1d8?run=1
…902-aztec-up-shadow-fix
…es on PATH (#22902) (#23060) Backport of #22902 to `backport-to-v4-next-staging`. ## Original change Native binaries (`forge`, `nargo`, `anvil`, `bb`, …) now live in `~/.aztec/current/internal-bin` (off `PATH`) and are exposed only via `aztec-<tool>` symlinks in `~/.aztec/current/bin`. The `aztec` entrypoint prepends `internal-bin` to its child `PATH` so workflows that cross-call by basename keep working without leaking those names to the user's shell. ## Cherry-pick conflict One conflict during cherry-pick: - `docs/docs-developers/docs/tutorials/js_tutorials/aave_bridge.md` — *deleted by us, modified by them.* The file no longer exists on `backport-to-v4-next-staging`, so the upstream modification has nothing to apply against. **Resolution:** dropped the file (matches v4-next state). The first commit preserves the original cherry-pick result (file restored as upstream had it) so reviewers can see what would have landed; the second commit removes it. No build fixes were needed — the change touches only shell installer scripts, a standalone TS acceptance test, and docs. Shell syntax checked with `bash -n` for all modified scripts. ## Commits 1. `fix(aztec-up): ...` — original cherry-pick result, including the unresolvable file. 2. `fix: resolve cherry-pick conflicts` — drop `aave_bridge.md` to match the target branch. ClaudeBox log: https://claudebox.work/s/a57acc5286aef8a6?run=1
…updates The original cherry-pick of 6fd76de carried only the first commit of PR #22543's five-commit feature branch, leaving the script using the pre-22543 build-required check and missing the SKILL.md/CLAUDE.md/README.md documentation that landed alongside. Bring this backport in line with PR #22543's final merged state: - Replace the .sh `stdlib/dest/` build check with source-file + node_modules checks (no yarn-project build needed). - Apply the .ts generator improvements: optional handling order, array parenthesization, BlockHash in BlockParameterSchema, JSDoc index fix, name-aware example params, remarks rendering, fallback warnings. - Add Step 5a (Regenerate Node API Reference) to release-network-docs SKILL.md plus the matching Key Points entry. - Document `yarn generate:node-api-reference` in docs/CLAUDE.md and add the Node JSON-RPC API Reference section to docs/README.md. - Regenerate docs-operate/.../node-api-reference.md against this branch's yarn-project interfaces (64 methods, 55 node + 9 admin). METHOD_GROUPS adjustments for this branch's API surface: re-add getSlashPayloads to the admin group (still present in aztec-node-admin.ts here) and drop getPredictedMinFees from the fees group (not yet present here). The version-v2.1.11-ignition snapshot is left untouched — its content reflects that release's API and would be corrupted by regenerating against HEAD.
Splits `DeployMethod` into an abstract umbrella type plus three concrete
flavors that encode the deployer-lock state at the type level instead of
branching on a nullable field.
- `DeployMethod<T>` — abstract base, the type consumers use generically
(`let d: DeployMethod<MyContract> = ...`).
- `BoundDeployMethod` — locked to a concrete `deployer`.
- `UniversalDeployMethod` — locked to `AztecAddress.ZERO` (any sender).
- `PendingDeployMethod` — promotes into a `Bound`/`Universal` sibling on
the first `send` / `simulate` / `profile` call.
The three flavor-specific decisions (`getDeployerAddress`,
`lockOrAssertDeployer`, `cloneInstantiation`) are now abstract methods
rather than `if (this.deployer === undefined / equals(ZERO) / else)`
branches in the base.
Each subclass takes a narrowed instantiation type:
- `BoundInstantiationOptions` — `deployer` required, `universalDeploy:
never`.
- `UniversalInstantiationOptions` — `universalDeploy: true` required,
`deployer: never`.
- `PendingInstantiationOptions` — both `never`.
`new BoundDeployMethod(..., { universalDeploy: true })` is now a
TypeScript error. The runtime mutual-exclusion checks in subclass
constructors are gone; the only runtime guard left is
`BoundDeployMethod` rejecting `AztecAddress.ZERO` (a value-level
invariant the type system can't model).
Subclass constructors take named bundles instead of 9 positionals:
```ts
new BoundDeployMethod(wallet, contract, instantiation, payload?)
// ^ ^ ^
// { artifact, postDeployCtor, args, constructorNameOrArtifact }
// { salt, publicKeys, deployer }
// { authWitnesses, capsules, extraHashedArgs }
```
`DeployMethod.create` follows the same shape. `Contract.deploy(wallet,
artifact, args, constructorName, instantiation)` and
`MyContract.deploy(wallet, ...args, instantiation?)` (codegen) are
**unchanged** — the bundle reshape stops at the `create` boundary.
- `DeployAccountMethod` now extends `UniversalDeployMethod` (account
contracts are always universal).
The conflict resolution in the previous commit accidentally dropped the `extraHashedArgs = []` default in the destructuring of `with()`'s options argument, which would otherwise cause `concat(undefined)` to push an undefined entry.
…22543) (#23046) Backport of #22543 to `backport-to-v4-next-staging`. Cherry-pick of the squash-merge commit (`6fd76de513`) applied cleanly via `git cherry-pick` (the automatic backport workflow's `gh pr diff | git apply --reject` had failed; switching to a real cherry-pick resolved it without manual conflict edits). ## Files - `docs/docs-operate/operators/reference/node-api-reference.md` — regenerated reference - `docs/network_versioned_docs/version-v2.1.11-ignition/operators/reference/node-api-reference.md` — regenerated versioned snapshot - `docs/scripts/node_api_reference_generation/generate_node_api_reference.{sh,ts}` — new generation script - `docs/package.json` — wires up the generator ## Verification - `git cherry-pick 6fd76de` succeeded with auto-merge; working tree clean afterwards. - Reference paths (`docs/docs-operate/...`, `docs/network_versioned_docs/version-v2.1.11-ignition/...`) exist on the staging branch, so the generated files land in valid locations. Original PR description: see #22543. ClaudeBox log: https://claudebox.work/s/6b4f81c28ae8a770?run=1
Cherry-picks f3911a8 feat(ci): Snapshots for aztec-nr contract compilation failures and nargo expand (#23061). Conflicts (rename/delete style — no text markers): - noir-projects/contract-snapshots/test_programs/compile_failure/invalid_event/src/invalid_event.nr (renamed by #23061, deleted in v4-next-staging) — kept the renamed copy. - noir-projects/noir-contracts-comp-failures/bootstrap.sh and noir-projects/noir-contracts-comp-failures/contracts/authorization_selector_collision/expected_error (deleted by #23061, modified in v4-next-staging) — left as-is in this commit (HEAD content), removed in the follow-up resolution commit so reviewers can see what conflicted.
Removes the two stray files (bootstrap.sh and authorization_selector_collision/expected_error) that #23061 deleted as part of dropping the noir-contracts-comp-failures crate. Both had been modified on v4-next-staging, which created the rename/delete conflicts; the entire old crate is gone in #23061's direction.
Re-runs the cargo-insta snapshot tests against the v4-next compiler and the v4-next aztec-nr / contract code, accepting the diffs: - compile_failure/authorization_selector_collision: one extra 'check_parent_traits_are_implemented: missing trait ID' diagnostic on v4-next's authorization.nr. - expand/avm_gadgets_test_contract: keccak_hash_300 doesn't exist on v4-next's avm_gadgets_test_contract. - expand/avm_test_contract: ordering / minor signature differences on v4-next's avm_test_contract.
…23103) Backport of #23033 (`feat: deploy method refactor 2`) onto `backport-to-v4-next-staging`. The automatic cherry-pick conflicted on `yarn-project/aztec.js/src/contract/deploy_method.ts` (3 hunks) and `yarn-project/aztec.js/src/wallet/deploy_account_method.ts` (1 hunk). ## Conflicts A prior backport had introduced `DeployInteractionWaitOptions` and renamed the runtime helper to `lockDeployerFromSendOptions` on this branch — but #23033 was authored against `next` (which still used `InteractionWaitOptions` and the old `lockDeployer`), so every line mentioning either name conflicted. The new bundled-options shape of `DeployMethod.with()` also conflicted with the old `new DeployMethod(...)` call. ## Resolution - Kept `DeployInteractionWaitOptions` (already in use everywhere on this branch). - Accepted #23033's `lockDeployer` — it's now the abstract method on `DeployMethod` with per-subclass implementations, replacing the old `lockDeployerFromSendOptions` helper. - Accepted #23033's new `with()` signature and body verbatim (returns `DeployMethod<TContract>`, routes through `DeployMethod.create(...)` with bundled options). - Dropped the `DeployMethod` import in `deploy_account_method.ts` — it now extends `UniversalDeployMethod`. Kept `DeployInteractionWaitOptions` (still used by `DeployAccountOptions` and the `convertDeployOptionsToSendOptions` override). - Restored the `extraHashedArgs = []` default in the `with()` destructuring (lost during the merge — would have caused `concat(undefined)` to push an undefined entry). ## Commits (per repo backport convention) 1. `feat: deploy method refactor 2 (#23033)` — original cherry-pick recorded with conflict markers. 2. `fix: resolve cherry-pick conflicts` — only the conflict-marker hunks edited. 3. `fix: restore extraHashedArgs default in DeployMethod.with()` — behavior-parity fix. ## Build verification Local `yarn build` was blocked by container-permission issues (cargo-binstall / corepack both need writable home directories not available here, and the noir submodule's JS packages couldn't be built locally). Relying on CI to verify the build. Detailed analysis: https://gist.github.com/AztecBot/90777c90cf1d6d75c9755f9aeabf514d ClaudeBox log: https://claudebox.work/s/115d4037a28ea1ad?run=2
…failures and nargo expand (#23061) (#23104) Backport of #23061 to v4-next. ## Conflicts The automatic cherry-pick failed with 3 rename/delete conflicts (no text markers): - `noir-projects/contract-snapshots/test_programs/compile_failure/invalid_event/src/invalid_event.nr` — renamed by #23061, deleted on v4-next-staging. Kept the renamed copy. - `noir-projects/noir-contracts-comp-failures/bootstrap.sh` — deleted by #23061, modified on v4-next-staging. Took #23061's deletion (the entire `noir-contracts-comp-failures/` crate is gone). - `noir-projects/noir-contracts-comp-failures/contracts/authorization_selector_collision/expected_error` — same as above. ## Commits 1. `feat(ci): cherry-pick #23061 (with conflicts)` — raw cherry-pick result with the two stray files (`bootstrap.sh`, `expected_error`) preserved as-is so reviewers can see what conflicted. 2. `fix: resolve cherry-pick conflicts` — removes those two stray files in line with #23061's intent (the whole old crate is dropped). ## Verification `cargo build --tests`, `cargo fmt --check`, and `cargo clippy --all-targets` all pass for the new `noir-projects/contract-snapshots/` crate. The compile_failure snapshots and `nargo expand` outputs are exercised against the live Noir compiler in CI; any drift will surface there. ClaudeBox log: https://claudebox.work/s/9ae41fb6fbae7191?run=2
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Adds a bench for the contract shape from AztecProtocol/aztec-nr#35 (15 public fns each emitting an event). No existing bench target covers this flow. I want to see the benefits from follow-up improvements.
Collaborator
Author
|
🤖 Auto-merge enabled after 8 hours of inactivity. This PR will be merged automatically once all checks pass. |
## Summary CI3 on PR #23080 failed in the `noir-projects build` `prep` step because the new `nested_utility_contract/src/test.nr` (added by the backport of #23064 — feat(txe) authorize cross-contract utility calls) wasn't formatted by v4-next's pinned nargo. Three statements were committed multi-line that v4-next's `nargo fmt --check` wants on a single line. CI log: http://ci.aztec-labs.com/0ef270f34a64bc9b ## Fix Apply `nargo fmt` exactly per the CI diff: - `same_contract_utility_call_from_private_succeeds`: collapse the `let result: Field = env.call_private(...)` to one line. - `cross_contract_utility_call_from_utility_denied_by_default`: collapse the `env.execute_utility( ..., )` to one line. - `cross_contract_utility_call_from_private_denied_by_default`: collapse the `env.call_private( account, ..., )` to one line. The two `*_with_authorization` tests already use multi-line because their bodies are too wide for one line — left unchanged. ## Test plan - CI3 on PR #23080 should clear the `prep` step (`noir-projects build`) once this lands on `backport-to-v4-next-staging`. ClaudeBox log: https://claudebox.work/s/ea70ef48e7a85dfe?run=3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
BEGIN_COMMIT_OVERRIDE
fix(aztec-up): Aztec installer does not shadow user installed binaries on PATH (#22902)
fix: include sqlite binary in its npm package (#23039)
chore: backport #23041 (add sendMessagesAs to wallet api schemas) to v4-next (#23081)
chore: backport DeployMethod refactor (#22985) to v4-next (#23029)
refactor(pxe): deduplicate tx hash lookups in MessageContextService (#23075)
refactor(pxe): batch tagged private log queries across all secrets (#23048)
refactor(pxe): batch log RPC calls in LogService.fetchLogsByTag (#23088)
feat(aztec-nr): Initial handshake registry contract with non interactive handshake function (#22854)
fix: add Tag.random() helper required by backported #23088 tests (#23094)
chore: backport: fix(aztec-up): installer does not shadow user binaries on PATH (#22902) (#23060)
chore: backport handshake registry contract (#22854) to v4-next (#23063)
feat: deploy method refactor 2 (#23033)
refactor(pxe): skip redundant getBlock RPC when querying at anchor block (#23100)
port(v4-next): feat(docs): autogenerate node JSON-RPC API reference (#22543) (#23046)
chore: backport feat: deploy method refactor 2 (#23033) to v4-next (#23103)
port(v4-next): feat(ci): Snapshots for aztec-nr contract compilation failures and nargo expand (#23061) (#23104)
feat(txe): allow authorizing cross-contract utility calls in nr tests (#23064)
END_COMMIT_OVERRIDE