Skip to main content

PreDi: Semantic Solidity Predicate Difference Tool

Project description

SPi: Solidity Semantic Predicate Comparison Tool

SPi [spaɪ], the Solidity Predicate Inspector, is a tool for comparing two boolean predicates written in Solidity, a smart contract programming language. SPi determines if two predicates are equivalent or if one is stronger than the other.

Features

  • Tokenizes and parses Solidity predicates into an Abstract Syntax Tree (AST)
  • Simplify AST using symbolic mathematics
  • Compare predicates for equivalence and logical strength

Getting Started

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

Usage

You can compare two predicates using the main.py script. Here's an example:

python main.py "msg.sender == msg.origin" "a < b"

This will output whether the predicates are equivalent, or which one is stronger.

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


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.2.tar.gz (2.7 kB view hashes)

Uploaded Source

Built Distributions

predi-0.1.2-py3-none-any.whl (2.6 kB view hashes)

Uploaded Python 3

PreDi-0.1.2-py3-none-any.whl (2.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page