argotorg / argotorg/solidity

[SMTChecker]: document currently unsupported features

Open
#13,944 4 comments 0 reactions 0 assignees View on GitHub
documentation :book: low effort medium impact smt
Dominant language
C++
Stars
25.7k
Forks
6.2k
Avg merge
2d 19h
Merged PRs (30d)
29

Description

## Page

[SMTChecker](https://docs.soliditylang.org/en/v0.8.18/smtchecker.html).

## Issue Description

I've recently started using the SMTChecker on a code base that uses many of the modern Solidity features, and I was disappointed to see that many features are not yet supported. To share just a few examples:

```text
warning[7650]: Warning: Assertion checker does not yet support this expression.
--> src/SablierV2LockupLinear.sol:370:17:
|
370 | if (recipient.code.length > 0) {
| ^^^^^^^^^^^^^^
```

The above is the [`.code` member of the `address` type](https://docs.soliditylang.org/en/v0.8.18/units-and-global-variables.html#members-of-address-types).

Then:

```text
warning[8364]: Warning: Assertion checker does not yet implement type type(struct LockupLinear.Stream storage pointer)
--> src/SablierV2LockupLinear.sol:419:30:
|
419 | _streams[streamId] = LockupLinear.Stream({
| ^^^^^^^^^^^^^^^^^^^
```

Here, I am not sure what is not supported: structs defined in libraries, assignments to mappings, or the `Struct({ key: val })` style of initialing structs?

```text
warning[7650]: Warning: Assertion checker does not yet support this expression.
--> src/SablierV2LockupLinear.sol:419:30:
|
419 | _streams[streamId] = LockupLinear.Stream({
|
```

Ditto.

## Documentation Request

Given the above, it would be helpful to add a new section in the SMTChecker documentation page that would outline the list of currently unsupported features of the compiler.

Contributor guide

Open the contributing guide

Research direction

Start with the linked SMTChecker documentation page and the unsupported-feature warnings shown in the issue. Identify which Solidity features the SMTChecker currently does not support, resolve the uncertainty around structs, mappings, and struct initialization, and add a clear list or section to the documentation page.

Written by the indexing model from the issue text.

Assessment

Tech stack
solidity
Domain
compilers, documentation
Issue type
Documentation
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.