Skip to content

Commit fdf54f6

Browse files
authored
Merge pull request #2407 from crytic/dev
sync master<> dev
2 parents 13d7d9f + 118c916 commit fdf54f6

File tree

710 files changed

+6076
-1218
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

710 files changed

+6076
-1218
lines changed

.github/scripts/integration_test_runner.sh

100644100755
File mode changed.

.github/scripts/tool_test_runner.sh

100644100755
File mode changed.

.github/scripts/unit_test_runner.sh

100644100755
File mode changed.

.github/workflows/ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
fail-fast: false
2727
matrix:
2828
os: ["ubuntu-latest", "windows-2022"]
29-
python: ${{ (github.event_name == 'pull_request' && fromJSON('["3.8", "3.11"]')) || fromJSON('["3.8", "3.9", "3.10", "3.11"]') }}
29+
python: ${{ (github.event_name == 'pull_request' && fromJSON('["3.8", "3.12"]')) || fromJSON('["3.8", "3.9", "3.10", "3.11", "3.12"]') }}
3030
type: ["cli",
3131
"dapp",
3232
"data_dependency",
@@ -67,7 +67,7 @@ jobs:
6767
6868
- name: Set up nix
6969
if: matrix.type == 'dapp'
70-
uses: cachix/install-nix-action@v25
70+
uses: cachix/install-nix-action@v26
7171

7272
- name: Set up cachix
7373
if: matrix.type == 'dapp'

.github/workflows/docs.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
- name: Checkout
3131
uses: actions/checkout@v4
3232
- name: Setup Pages
33-
uses: actions/configure-pages@v4
33+
uses: actions/configure-pages@v5
3434
- uses: actions/setup-python@v5
3535
with:
3636
python-version: '3.8'

.github/workflows/doctor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
fail-fast: false
2424
matrix:
2525
os: ["ubuntu-latest", "windows-2022"]
26-
python: ["3.8", "3.9", "3.10", "3.11"]
26+
python: ["3.8", "3.9", "3.10", "3.11", "3.12"]
2727
exclude:
2828
# strange failure
2929
- os: windows-2022

.github/workflows/issue-metrics.yml

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Monthly issue metrics
2+
on:
3+
workflow_dispatch:
4+
schedule:
5+
- cron: '3 2 1 * *'
6+
7+
permissions:
8+
issues: write
9+
pull-requests: read
10+
11+
jobs:
12+
build:
13+
name: issue metrics
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Get dates for last month
17+
shell: bash
18+
run: |
19+
# Calculate the first day of the previous month
20+
first_day=$(date -d "last month" +%Y-%m-01)
21+
22+
# Calculate the last day of the previous month
23+
last_day=$(date -d "$first_day +1 month -1 day" +%Y-%m-%d)
24+
25+
#Set an environment variable with the date range
26+
echo "$first_day..$last_day"
27+
echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV"
28+
29+
- name: Run issue-metrics tool
30+
uses: github/issue-metrics@v3
31+
env:
32+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33+
SEARCH_QUERY: 'repo:crytic/slither is:issue created:${{ env.last_month }} -reason:"not planned" -reason:"duplicate"'
34+
35+
- name: Create issue
36+
uses: peter-evans/create-issue-from-file@v5
37+
with:
38+
title: Monthly issue metrics report
39+
token: ${{ secrets.GITHUB_TOKEN }}
40+
content-filepath: ./issue_metrics.md

.github/workflows/linter.yml

+5-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
echo "::add-matcher::.github/workflows/matchers/yamllint.json"
4646
4747
- name: Lint everything else
48-
uses: super-linter/super-linter/slim@v4.9.2
48+
uses: super-linter/super-linter/slim@v6.1.1
4949
if: always()
5050
env:
5151
# run linter on everything to catch preexisting problems
@@ -58,14 +58,16 @@ jobs:
5858
VALIDATE_PYTHON_BLACK: false
5959
VALIDATE_PYTHON_ISORT: false
6060
VALIDATE_JSON: false
61+
VALIDATE_JAVASCRIPT_ES: false
6162
VALIDATE_JAVASCRIPT_STANDARD: false
6263
VALIDATE_PYTHON_FLAKE8: false
6364
VALIDATE_DOCKERFILE: false
6465
VALIDATE_DOCKERFILE_HADOLINT: false
6566
VALIDATE_EDITORCONFIG: false
6667
VALIDATE_JSCPD: false
6768
VALIDATE_PYTHON_MYPY: false
68-
# Until we upgrade the super linter for actionlintÒ
69-
VALIDATE_GITHUB_ACTIONS: false
69+
VALIDATE_CHECKOV: false
70+
# TODO: consider enabling
71+
VALIDATE_SHELL_SHFMT: false
7072
SHELLCHECK_OPTS: "-e SC1090"
7173
FILTER_REGEX_EXCLUDE: .*tests/.*.(json|zip|sol)

.github/workflows/publish.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
path: dist/
4545

4646
- name: publish
47-
uses: pypa/[email protected].11
47+
uses: pypa/[email protected].14
4848

4949
- name: sign
5050
uses: sigstore/[email protected]

.github/workflows/pylint.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
echo "::add-matcher::.github/workflows/matchers/pylint.json"
4444
4545
- name: Pylint
46-
uses: super-linter/super-linter/slim@v4.9.2
46+
uses: super-linter/super-linter/slim@v6.1.1
4747
if: always()
4848
env:
4949
# Run linters only on new files for pylint to speed up the CI

.github/workflows/test.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
matrix:
2626
os: ["ubuntu-latest", "windows-2022"]
2727
type: ["unit", "integration", "tool"]
28-
python: ${{ (github.event_name == 'pull_request' && fromJSON('["3.8", "3.11"]')) || fromJSON('["3.8", "3.9", "3.10", "3.11"]') }}
28+
python: ${{ (github.event_name == 'pull_request' && fromJSON('["3.8", "3.12"]')) || fromJSON('["3.8", "3.9", "3.10", "3.11", "3.12"]') }}
2929
steps:
3030
- uses: actions/checkout@v4
3131
- name: Set up Python ${{ matrix.python }}
@@ -80,11 +80,11 @@ jobs:
8080
# Only run coverage on ubuntu-latest.
8181
run: |
8282
if [ ${{ matrix.os }} = "ubuntu-latest" ]; then
83-
TEST_ARGS="--cov=slither --cov-append"
83+
TEST_ARGS=(--cov=slither --cov-append)
8484
elif [ ${{ matrix.os }} = "windows-2022" ]; then
85-
TEST_ARGS=""
85+
TEST_ARGS=()
8686
fi
87-
bash "./.github/scripts/${TEST_TYPE}_test_runner.sh" $TEST_ARGS
87+
bash "./.github/scripts/${TEST_TYPE}_test_runner.sh" "${TEST_ARGS[@]}"
8888
8989
9090
- name: Upload coverage
@@ -119,5 +119,5 @@ jobs:
119119
run: |
120120
set +e
121121
python -m coverage combine
122-
echo "## python coverage" >> $GITHUB_STEP_SUMMARY
123-
python -m coverage report -m --format=markdown >> $GITHUB_STEP_SUMMARY
122+
echo "## python coverage" >> "$GITHUB_STEP_SUMMARY"
123+
python -m coverage report -m --format=markdown >> "$GITHUB_STEP_SUMMARY"

CONTRIBUTING.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ If you're unsure where to start, we recommend our [`good first issue`](https://g
66

77
## Bug reports and feature suggestions
88

9-
Bug reports and feature suggestions can be submitted to our issue tracker. For bug reports, attaching the contract that caused the bug will help us in debugging and resolving the issue quickly. If you find a security vulnerability, do not open an issue; email [email protected] instead.
9+
Bug reports and feature suggestions can be submitted to our issue tracker. For bug reports, attaching the contract that caused the bug will help us in debugging and resolving the issue quickly. If you find a security vulnerability, do not open an issue; email <[email protected]> instead.
1010

1111
## Questions
1212

1313
Questions can be submitted to the "Discussions" page, and you may also join our [chat room](https://empireslacking.herokuapp.com/) (in the #ethereum channel).
1414

1515
## Code
1616

17-
Slither uses the pull request contribution model. Please make an account on Github, fork this repo, and submit code contributions via pull request. For more documentation, look [here](https://guides.github.com/activities/forking/).
17+
Slither uses the pull request contribution model. Please make an account on GitHub, fork this repository, and submit code contributions via pull request. For more documentation, look [here](https://guides.github.com/activities/forking/).
1818

1919
Some pull request guidelines:
2020

@@ -63,7 +63,7 @@ To automatically reformat the code:
6363

6464
- `make reformat`
6565

66-
We use pylint `2.13.4`, black `22.3.0`.
66+
We use pylint `3.0.3`, black `22.3.0`.
6767

6868
### Testing
6969

@@ -82,7 +82,7 @@ For each new detector, at least one regression tests must be present.
8282
1. Create a folder in `tests/e2e/detectors/test_data` with the detector's argument name.
8383
2. Create a test contract in `tests/e2e/detectors/test_data/<detector_name>/`.
8484
3. Update `ALL_TESTS` in `tests/e2e/detectors/test_detectors.py`.
85-
4. Run `python tests/e2e/detectors/test_detectors.py --compile` to create a zip file of the compilation artifacts.
85+
4. Run `python tests/e2e/detectors/test_detectors.py --compile` to create a ZIP file of the compilation artifacts.
8686
5. `pytest tests/e2e/detectors/test_detectors.py --insta update-new`. This will generate a snapshot of the detector output in `tests/e2e/detectors/snapshots/`. If updating an existing detector, run `pytest tests/e2e/detectors/test_detectors.py --insta review` and accept or reject the updates.
8787
6. Run `pytest tests/e2e/detectors/test_detectors.py` to ensure everything worked. Then, add and commit the files to git.
8888

README.md

+19-18
Original file line numberDiff line numberDiff line change
@@ -191,17 +191,18 @@ Num | Detector | What it Detects | Impact | Confidence
191191
80 | `redundant-statements` | [Redundant statements](https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements) | Informational | High
192192
81 | `solc-version` | [Incorrect Solidity version](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity) | Informational | High
193193
82 | `unimplemented-functions` | [Unimplemented functions](https://github.com/crytic/slither/wiki/Detector-Documentation#unimplemented-functions) | Informational | High
194-
83 | `unused-state` | [Unused state variables](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable) | Informational | High
195-
84 | `costly-loop` | [Costly operations in a loop](https://github.com/crytic/slither/wiki/Detector-Documentation#costly-operations-inside-a-loop) | Informational | Medium
196-
85 | `dead-code` | [Functions that are not used](https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code) | Informational | Medium
197-
86 | `reentrancy-unlimited-gas` | [Reentrancy vulnerabilities through send and transfer](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Informational | Medium
198-
87 | `similar-names` | [Variable names are too similar](https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-too-similar) | Informational | Medium
199-
88 | `too-many-digits` | [Conformance to numeric notation best practices](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | Informational | Medium
200-
89 | `cache-array-length` | [Detects `for` loops that use `length` member of some storage array in their loop condition and don't modify it.](https://github.com/crytic/slither/wiki/Detector-Documentation#cache-array-length) | Optimization | High
201-
90 | `constable-states` | [State variables that could be declared constant](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | Optimization | High
202-
91 | `external-function` | [Public function that could be declared external](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | Optimization | High
203-
92 | `immutable-states` | [State variables that could be declared immutable](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable) | Optimization | High
204-
93 | `var-read-using-this` | [Contract reads its own variable using `this`](https://github.com/crytic/slither/wiki/Detector-Documentation#public-variable-read-in-external-context) | Optimization | High
194+
83 | `unused-import` | [Detects unused imports](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-imports) | Informational | High
195+
84 | `unused-state` | [Unused state variables](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable) | Informational | High
196+
85 | `costly-loop` | [Costly operations in a loop](https://github.com/crytic/slither/wiki/Detector-Documentation#costly-operations-inside-a-loop) | Informational | Medium
197+
86 | `dead-code` | [Functions that are not used](https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code) | Informational | Medium
198+
87 | `reentrancy-unlimited-gas` | [Reentrancy vulnerabilities through send and transfer](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Informational | Medium
199+
88 | `similar-names` | [Variable names are too similar](https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-too-similar) | Informational | Medium
200+
89 | `too-many-digits` | [Conformance to numeric notation best practices](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | Informational | Medium
201+
90 | `cache-array-length` | [Detects `for` loops that use `length` member of some storage array in their loop condition and don't modify it.](https://github.com/crytic/slither/wiki/Detector-Documentation#cache-array-length) | Optimization | High
202+
91 | `constable-states` | [State variables that could be declared constant](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | Optimization | High
203+
92 | `external-function` | [Public function that could be declared external](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | Optimization | High
204+
93 | `immutable-states` | [State variables that could be declared immutable](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable) | Optimization | High
205+
94 | `var-read-using-this` | [Contract reads its own variable using `this`](https://github.com/crytic/slither/wiki/Detector-Documentation#public-variable-read-in-external-context) | Optimization | High
205206

206207
For more information, see
207208

@@ -289,16 +290,16 @@ Slither is licensed and distributed under the AGPLv3 license. [Contact us](mailt
289290

290291
Title | Usage | Authors | Venue | Code
291292
--- | --- | --- | --- | ---
292-
[ReJection: A AST-Based Reentrancy Vulnerability Detection Method](https://www.researchgate.net/publication/339354823_ReJection_A_AST-Based_Reentrancy_Vulnerability_Detection_Method) | AST-based analysis built on top of Slither | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19
293+
[ReJection: A AST-Based Reentrancy Vulnerability Detection Method](https://www.researchgate.net/publication/339354823_ReJection_A_AST-Based_Reentrancy_Vulnerability_Detection_Method) | AST-based analysis built on top of Slither | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19 | -
293294
[MPro: Combining Static and Symbolic Analysis forScalable Testing of Smart Contract](https://arxiv.org/pdf/1911.00570.pdf) | Leverage data dependency through Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | [MPro](https://github.com/QuanZhang-William/M-Pro)
294-
[ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts](https://wcventure.github.io/FuzzingPaper/Paper/SANER20_ETHPLOIT.pdf) | Leverage data dependency through Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20
295-
[Verification of Ethereum Smart Contracts: A Model Checking Approach](http://www.ijmlc.org/vol10/977-AM0059.pdf) | Symbolic execution built on top of Slither’s CFG | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20
295+
[ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts](https://wcventure.github.io/FuzzingPaper/Paper/SANER20_ETHPLOIT.pdf) | Leverage data dependency through Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | -
296+
[Verification of Ethereum Smart Contracts: A Model Checking Approach](http://www.ijmlc.org/vol10/977-AM0059.pdf) | Symbolic execution built on top of Slither’s CFG | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | -
296297
[Smart Contract Repair](https://arxiv.org/pdf/1912.05823.pdf) | Rely on Slither’s vulnerabilities detectors | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | [SCRepair](https://github.com/xiaoly8/SCRepair/)
297-
[Demystifying Loops in Smart Contracts](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Leverage data dependency through Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20
298-
[Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither’s CFG to detect loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020)
298+
[Demystifying Loops in Smart Contracts](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Leverage data dependency through Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | -
299+
[Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither’s CFG to detect loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | -
299300
[SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds](https://arxiv.org/pdf/2104.08638.pdf) | Rely on SlithIR to build a *storage dependency graph* | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 | [Sailfish](https://github.com/ucsb-seclab/sailfish)
300-
[SolType: Refinement Types for Arithmetic Overflow in Solidity](https://arxiv.org/abs/2110.00677) | Use Slither as frontend to build refinement type system | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22
301-
[Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection](https://www.mdpi.com/2227-7390/10/6/949) | Use Slither to extract tokens' features (mintable, pausable, ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022)
301+
[SolType: Refinement Types for Arithmetic Overflow in Solidity](https://arxiv.org/abs/2110.00677) | Use Slither as frontend to build refinement type system | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 | -
302+
[Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection](https://www.mdpi.com/2227-7390/10/6/949) | Use Slither to extract tokens' features (mintable, pausable, ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022) | -
302303
[MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract Vulnerabilities](https://arxiv.org/abs/2208.13252) | Use Slither to extract the CFG and call graph | Hoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao Jiang| IEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022) | [ge-sc](https://github.com/MANDO-Project/ge-sc)
303304
[Automated Auditing of Price Gouging TOD Vulnerabilities in Smart Contracts](https://www.cs.toronto.edu/~fanl/papers/price-icbc22.pdf) | Use Slither to extract the CFG and data dependencies| Sidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long | 2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC) | [Smart-Contract-Repair](https://github.com/Veneris-Group/TOD-Location-Rectification)
304305

pyproject.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ missing-module-docstring,
77
missing-class-docstring,
88
missing-function-docstring,
99
unnecessary-lambda,
10-
bad-continuation,
1110
cyclic-import,
1211
line-too-long,
1312
invalid-name,
@@ -18,5 +17,6 @@ logging-fstring-interpolation,
1817
logging-not-lazy,
1918
duplicate-code,
2019
import-error,
21-
unsubscriptable-object
20+
unsubscriptable-object,
21+
unnecessary-lambda-assignment
2222
"""

scripts/ci_test_interface.sh

100644100755
File mode changed.

scripts/update_buggy_versions.py

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import json
2+
from pathlib import Path
3+
import urllib.request
4+
5+
6+
def retrieve_json(url):
7+
with urllib.request.urlopen(url) as response:
8+
data = response.read().decode("utf-8")
9+
return json.loads(data)
10+
11+
12+
def organize_data(json_data):
13+
version_bugs = {}
14+
for version, info in json_data.items():
15+
version_bugs[version] = info["bugs"]
16+
return version_bugs
17+
18+
19+
if __name__ == "__main__":
20+
bug_list_url = (
21+
"https://raw.githubusercontent.com/ethereum/solidity/develop/docs/bugs_by_version.json"
22+
)
23+
bug_data = retrieve_json(bug_list_url)
24+
bugs_by_version = organize_data(bug_data)
25+
26+
with open(Path.cwd() / Path("slither/utils/buggy_versions.py"), "w", encoding="utf-8") as file:
27+
file.write("# pylint: disable=too-many-lines\n")
28+
file.write(f"bugs_by_version = {bugs_by_version}")

0 commit comments

Comments
 (0)