Skip to content
This repository has been archived by the owner on Aug 12, 2021. It is now read-only.

Latest commit

 

History

History
47 lines (40 loc) · 1.8 KB

README.md

File metadata and controls

47 lines (40 loc) · 1.8 KB

PASS 2021 Course Project

Repository Structure

  • The peck directory contains a parser that transforms a Solidity contract into an intermediate representation (IR), and derives Datalog facts that encode the contract’s IR. You must not edit any files in this folder..
  • The project directory contains the code template for your project. Technical details on the IR and its representation in Datalog can be found in project/README-IR.md. The project/test_contracts directory contains example test contracts with annotated ground truth in comments. The project/analyze.dl and project/analyze.py are the main source files for the analysis.

Setup Instructions

The project requires python 3.7, solc 0.5.7 and souffle 1.5.1. On the evaluation machine, we will use python 3.7.9. You will need the following software and library:

Make sure you have the required executables and versions in your system’s PATH. For Solidity and Souffle, you can find specific versions under the Github release page.

$ python --version
Python 3.7.9
$ solc --version
solc, the solidity compiler commandline interface
Version: 0.5.7
$ souffle --version
Souffle: 1.5.1

Then create a python virtual environment and install python dependencies.

$ python -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip
$ pip install -e .

Example Usage

Try it out:

$ cd project
$ python analyze.py test_contracts/0.sol
Tainted

You can also inspect the contract’s control flow graph / Datalog representation:

$ python analyze.py --visualize test_contracts/0.sol
$ ls test_contract_out 
facts.pdf  graph.pdf