PreDi: Symbolic Solidity Predicate Difference Tool
Project description
PreDi: Symbolic Solidity Predicate Difference Tool
PreDi is a tool to compare two predicates written in Solidity, the smart contract programming language. PreDi determines if two predicates are equivalent or if one is stronger than the other.
Features
- Tokenizes and parses each Solidity predicate into an Abstract Syntax Tree (AST)
- Simplifies AST using symbolic mathematics
- Compare predicates for equivalence and logical strength either using predefined rules (when applicable) or checking for satisfiability when pre-defined rules are not applicable.
Install Using pip and Use as a Python Library
Running the following command should suffice:
pip install predi
Library Usage
Simple Predicate Comparison
>>> from predi.comparator import Comparator
>>> comparator = Comparator()
>>> comparator.compare("a < b", "a <= b")
'The first predicate is stronger.'
>>> comparator.compare("a > b", "a <= b")
'The predicates are not equivalent and neither is stronger.'
Installing and Using as a CLI Tool
Prerequisites
- Python 3.8 or higher
- Install required packages using pip
pip install -r requirements.txt
Running the Tests
To ensure everything is set up correctly, run the unit tests:
python -m unittest discover -s tests
CLI Usage
You can compare two predicates using the main.py
script. Here's an example:
$ python main.py "msg.sender == msg.origin" "msg.origin == msg.sender"
The predicates are equivalent.
$ python main.py "msg.sender == msg.origin && a >= b" "msg.sender == msg.origin"
The first predicate is stronger.
$ python main.py "msg.sender == msg.origin || a < b" "a < b"
The second predicate is stronger.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
predi-0.1.14.tar.gz
(10.6 kB
view hashes)
Built Distribution
predi-0.1.14-py3-none-any.whl
(11.0 kB
view hashes)