-
Notifications
You must be signed in to change notification settings - Fork 152
Introduce RPC based prover to kevm #1538
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
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…emental exploration
…check for foundry
…as for simplifying infinite gas query
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Blocked on: #1527Blocked on: runtimeverification/pyk#173Blocked on: #1544Blocked on: #1560This PR makes several steps to making RPC based proving possible with KEVM:
CALL*
rules so that they can be broken on.kevm prove ... --pyk
andkevm foundry-prove ...
). These come with several options for controlling execution/KCFG construction:--max-iterations
: maximum number of times to expand the KCFG created between initial and target states in an attempt to show all-path reachability.--max-depth
: maximum K steps to take for each leg of symbolic execution when expanding the KCFG from the initial state to the target state.--[no-]implication-every-block
: check implication every time that a state is returned from symbolic execution (or not).--break-on-calls
: save the pre-state every time there is a contract call, from right before the call.--break-every-step
: save a state every opcode that is executed.kevm foundry-remove-node ...
which allows remove nodes (and successors) from a KCFG so you can restart from a prior state with lemmas added, for example.kevm foundry-simplify-node ... [--replace]
which allows calling the simplification routine on a given node and printing the results, and optionally also replacing the given node in eth KCFG.kevm view-kcfg --definition path/to/kompiled path/to/kcfg-file.json
, for viewing KCFGS produced withkevm prove .... --pyk --save-directory path/to
.--pyk
option for as many haskell proofs as possible on CI, lists the ones failing with pyk intests/failing-symbolic.pyk
.#Bottom
.KEVM.short_info
as a pretty-printer for the KCFG behavior view, and for viewing KCFGs infoundry-kcfg-show
.Note that CI time is reduced to ~35 minutes for Haskell backend proofs, and just over an hour for Foundry proofs (down from 3.5-4 hours!).