-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize symbolic execution using depth-based call graphs #130
Comments
CSE - WorkplanGoals: Have Kontrol use compositional symbolic execution of functions by automatically generating function summaries that can be soundly reused at call sites instead of executing the function body. In Kontrol (Semantics-related changes)When executing a function, we expect a final node on all branches.
In pyk (Semantics-agnostic changes)
|
Next steps
|
Description
The idea is to use a depth-based call graph of the Foundry test suite in order to manage how we do symbolic execution. Instead of starting symbolic execution from the top of the test, you would create a dependency list of functions, then execute them starting with the functions at the lowest level/highest depth and generate simplification lemmas for them. Next, you would execute the next functions up the call graph tree, importing the simplification lemmas for the dependent functions.
Example:
Given this Solidity smart contract
And a test contract
With our current symbolic execution, the order of the functions looks like:
And by using the call graph and lemma generation we could have:
Plan:
kevm-pyk
duringkontrol foundry-kompile
, generate the call graph of the test functions in the test suite. The call graph depth should start at0
, representing the level of the test function.foundry-prove --test MyContract.test1 --test MyContract.test2 ...
is called, generate a list of the functions that need to be tested:[MyContract.test1, MyContract.test2]
.MyContract.f
in the list, parse the call graph and append all the functions thatMyContract.f
would call to the list. This list should then be sorted by the depth level such that the functions with the highest depth (or the most low-level functions) are first.This should improve the symbolic execution process considerably, avoiding execution for duplicated calls.
The text was updated successfully, but these errors were encountered: