Open
Description
Comprehensive high-level language support for transient storage decomposes into the following tasks:
### Tasks
- [x] `transient` is not a keyword, so we need a parser hack to introduce it non-breakingly as a first step: #15006
- [x] Support for value types in transient storage: #15257, #15292
- [x] Support for auxiliary compiler output artifacts like a transient storage layout, etc: #15247
- [ ] Support for reference types (structs, arrays) in transient storage; no copies between data locations.
- [ ] Iterative support of copying.
- [ ] Independently of reference types: support for mapping in transient storage.
Starting from the second step each step decomposes into a Yul and legacy part. We currently plan to start with Yul implementations and to merely backport functionality to legacy on demand.
Questions to be settled during the process:
- Layout of transient storage variables.
- current proposal: storage and transient storage have independent layouts (both starting at zero and overlapping), otherwise the layout (including packing) is the same between transient storage and storage.
- Autoclearing, no autoclearing, optional autoclearing.
- So far we assume that despite the connected dangers unconditional compiler-generated autoclearing is not expected and also not possible for all types. If we were to decide for opt-in or opt-out autoclearing behaviour, we would need to decide syntax for it. We're open to community input on the question.
- Given the design of transient storage there is unfortunately no optimal choice here; current tendency is to expose the bare EVM functionality directly in the first instance; only consider optional opt-in autoclearing separately.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
In Progress