High-Level Language Support for Transient Storage
- Dominant language
- C++
- Stars
- 25.7k
- Forks
- 6.2k
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 29
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.
Contributor guide
Research direction
No files, tests, or entry points are named. Start by reviewing the remaining tasks and the completed issue links, then identify the existing Yul implementation and any legacy backport scope. Done means reference types, copying, and mappings are supported in transient storage, with the layout and autoclearing decisions resolved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, solidity
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100