How to execute more than one symbolic transaction
- 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