argotorg / argotorg/solcore

Features for early production readiness

Open
#448 0 comments 1 reaction 0 assignees View on GitHub
Dominant language
Haskell
Stars
113
Forks
9
Avg merge
4d 9h
Merged PRs (30d)
1

Description

The items I mentioned being important for "early production readiness":

- [x] ABI encoding/decoding for ADTs
- [x] Storage encoding for ADTs
- [x] ABI encoding for arrays (#526)
- [x] Storage arrays
- [ ] Memory arrays
- [ ] `abi_encode`/`abi_decode` function usable within the language, this is frequently used by building data for signature checking (this likely already exists in some form) (see [EIP-712](https://eips.ethereum.org/EIPS/eip-712), and [Solidity's features](https://docs.soliditylang.org/en/v0.8.35/cheatsheet.html#abi-encoding-and-decoding-functions))
- [ ] support for logs / emit (most of the scaffolding exists, see #447)
- [ ] encoding errors properly (similar work to logs)
- [ ] interaction with other contracts, i.e. an "interface" (trait/etc.) and calls to those functions
- [x] public/private functions in contracts (#434)
- [ ] Signed integer types
- [ ] Checked arithmetic by default (#484)
- [x] `struct` data type in memory/ABI (#568)
- [x] `struct` in storage (#571)

Nice to haves:
- [ ] Proper calldata support (i.e. `calldata(bytes)`)
- [ ] Fixed-size storage arrays
- [ ] Constants
- [x] `break` in for loops (#488)
- [x] `continue` in for loops (#490)
- [ ] Cleaner literal assignments (i.e. no need for `uint256(1234)` everywhere)
- [ ] Easier type conversions
- [x] Automatic deriving of some traits (#505)
- [x] Syntactical sugar for mod, bitwise and/or/xor (#485)
- [x] Syntactical sugar for bitwise not (#536)
- [x] Compound assignments `*=` and `/=` (#537)
- [ ] Syntactic sugar for shifts (`<<`, `>>`) -- consider arithmetic vs logical
- [ ] Syntactical sugar for exp (`n ** y`)
- [ ] Syntactical sugar for `++`/`--` expressions
- [ ] Syntactical sugar for slicing `[n:]`, `[n:m]`, `[:m]`

I think after these it would be possible to accomplish most needs as a user.

Contributor guide

No contributing guide indexed for this repository

Research direction

This is a broad roadmap rather than a single actionable change, and it names no files, tests, or entry points. First split the unchecked items into separate issues and inspect the referenced issues such as #447 before defining one feature's scope and completion criteria.

Written by the indexing model from the issue text.

Assessment

Tech stack
haskell, solidity
Domain
blockchain, compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.