Removes the special introduction and removal of bus variables because the solver can now handle this on its own through the `LinearizedSolver` component. It also has the benefit that we do not need to run the optimizer twice any more (once with bus interaction variables and once without). Previously we would introduce a new variable type outside of the solver and replace all bus interactions `bus_interaction(1, x + y * z)` by `bus_interaction(1, bus_var_1)` and the algebraic constraint `bus_var_1 = x + y * z`. Now the `LinearizedSolver` is a component inside the solver that replaces all bus interaction fields (that are not already constants or simple variables) and also replaces all non-linear components: `bus_interaction(1, x + y * z)` becomes ``` bus_interaction(1, v1) v1 = x + v2 v2 = y * z ``` The reason behind also replacing non-linear parts is because range constraints are only stored for variables, not for all sub-expressions. Also if we find the same non-linear sub-expression multiple times, we can now replace it directly by the same variable. --------- Co-authored-by: Georg Wiese <georgwiese@gmail.com>
powdr
WARNING: This codebase is experimental and has not been audited. DO NOT USE FOR PRODUCTION!
If you have any questions or want to contribute, feel free to write us in our Matrix Chat.
powdr provides state-of-the-art performance and security to zkVMs, enhancing them with compiler-based techniques including static analysis and formal verification.
The main components are:
- Autoprecompiles: automated synthesis of guest-specific precompiles.
- Constraint Solver: compile-time solver used to detect potential optimizations and security issues.
- powdr-OpenVM: powdr extensions for OpenVM.
For detailed documentation on powdr-asm, powdr-pil and podwrVM please visit the powdr book.
Project structure
For an overview of the project structure, run:
cargo doc --workspace --no-deps --open
Contributing
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as below, without any additional terms or conditions.
License
This project is licensed under either of
at your option.
