Skip to content

How to execute more than one symbolic transaction #957

@gustavo-grieco

Description

@gustavo-grieco

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, 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions