argotorg / argotorg/solidity

High-Level Language Support for Transient Storage

Open
#15,007 8 comments 10 reactions 0 assignees View on GitHub
epic effort high impact selected for development
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.