argotorg / argotorg/hevm

How to execute more than one symbolic transaction

Open
#957 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
Haskell
Stars
358
Forks
79
Avg merge
1d 1h
Merged PRs (30d)
6

Description

We need an API or example on how to execute more than transaction with symbolic data. Typically, when you are doing invariant development you define:

* State transaction functions: take parameters and change the state.
* Invariants: (usually) take no parameters and run asserts.

Right now hevm/echidna cannot use symbolic execution directly with these since:

* State transaction functions can be explored, but they have no assertions, so nothing is really solved.
* Invariants can be explored, but they will only execute concretely as they have no symbolic inputs (except block time/number).

We need an example on how to use the current API or define a new one (one example is listed [here](https://github.com/argotorg/hevm/issues/917#issue-3561477979), but it is very hacky). We can look on how halmos/certora is doing it. We don't need to start optimizing it right now (e.g. construct the CFG and discard which functions we could discard), but instead we need way to do it manually first.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the current hevm API and the hacky example in issue #917, then compare how halmos and Certora handle multiple symbolic transactions. Done means documenting a workable current-API example or defining the needed API for exploring state transactions together with invariants; optimization is explicitly out of scope.

Written by the indexing model from the issue text.

Assessment

Tech stack
haskell
Domain
backend-api-design, blockchain
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.