feat: TransientArray#23576
Merged
Merged
Conversation
nchamo
reviewed
May 27, 2026
nchamo
left a comment
Contributor
There was a problem hiding this comment.
I haven't finished yet, but I wanted to leave some initial comments
mverzilli
added a commit
that referenced
this pull request
May 29, 2026
Squashed work for PR #23576 (Linear F-677). Introduces TransientArray<T>: an in-memory array that lives for one top-level PXE call (private tx simulation or utility call), shared across all frames of the same contract (private and utility alike), and isolated per contract. aztec-nr: - TransientArray<T> with push/pop/get/set/len/remove/clear/for_each plus Serialize/Deserialize as slot identifier. - Single-value store/load/delete helpers in the transient module. - Companion oracle bindings (aztec_utl_*Transient). - Cross-references between EphemeralArray and TransientArray docs. PXE: - TransientArrayService keyed by (contract address, slot). - Threaded through PrivateExecutionOracle and inherited by nested utility frames via UtilityExecutionOracle.callUtilityFunction, so private->utility same-contract calls share the store; contract-sync utility runs get their own fresh store. - Bumped ORACLE_INTERFACE_HASH / oracle minor version for the new oracles. TXE: - Handles TransientArray oracles; top-level utility entrypoints get a fresh store, nested frames inherit it. Tests: - Unit tests for TransientArrayService (push/pop/get/set/len/remove/clear). - transient_parent_contract + transient_child_contract noir tests covering same-contract sharing across private frames (test_sharing via self.call_self.appender) and cross-contract isolation (test_isolation). - utility_execution.test.ts covers nested utility sharing and a private-> utility .run()-based test (test_sharing_with_utility) proving the transient store is shared across the private/utility boundary. Review feedback applied (nchamo): doc wording "execution" -> "top-level PXE call", test_sharing uses macro-generated self.call_self, txe_session top-level-utility comment clarified.
ad6c013 to
f4b9386
Compare
nchamo
reviewed
May 29, 2026
nchamo
left a comment
Contributor
There was a problem hiding this comment.
Small question on the tests: ts vs Noir
Adds an execution-scoped, contract-isolated in-memory array (`TransientArray`) shared across all frames of one top-level PXE call (private + utility), sitting between `EphemeralArray` (one call frame) and `CapsuleArray` (persistent). - aztec-nr: `TransientArray` type, transient oracle suite, oracle version bump. - PXE: `TransientArrayService` threaded through the private/utility execution oracles; 7 `aztec_utl_*Transient` handlers registered in the typed oracle registry; oracle version 29.1 + interface hash. - TXE: transient handlers in the rpc translator; store threaded through the session. - Tests: Noir TXE tests for private→private, private→utility, utility→utility sharing and cross-contract isolation; PXE service unit tests.
d2d4dd1 to
8019d11
Compare
…tin/tx-local-storage # Conflicts: # yarn-project/pxe/src/oracle_version.ts
mverzilli
added a commit
that referenced
this pull request
Jun 8, 2026
Brings in TransientArray (#23576) and the Proxy-based buildACIRCallback oracle dispatch (#23915). Conflict resolutions: - oracle.ts: accepted upstream's deletion of the hand-written 711-line dispatch. FactStore oracles now dispatch through the registry-driven buildACIRCallback; their entries auto-merged into oracle_registry.ts. - utility_execution_oracle.ts: dropped the obsolete `Oracle` import, kept `FactOutput`. FactStore and transient handler methods auto-merged. - oracle_version.ts: recomputed ORACLE_INTERFACE_HASH for the merged 65-oracle registry (ae63cb…) and bumped minor 29.1 -> 29.2 (the merged interface is a strict superset of both branches' independent 29.1 additions). Mirrored the minor bump into the two Noir version files. Verified: TS build green, oracle hash confirmed by check_oracle_version, offchain + FactStore Noir suite 13/13 and oracle_version_is_checked 9/9.
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.
Implements a new storage mechanism,
TransientArray. It is similar toEphemeralArray, but its lifetime is a top level execution instead of a call frame.It also adds store/load/delete convenience functions providing similar single KV store semantics as their equally named capsule counterparts
Closes F-677