An evolution of the OP Stack's Cannon FPVM, written in pure Rust.
What's a Howitzer? • Overview • Docker • Contributing • Documentation • Credits
Howitzer is a MIPS64 emulator designed to simulate deterministic execution within a single MIPS thread context both
natively and on the EVM. Its primary objective is to execute Fault Proof Programs such as kona
or op-program
for the sake of the OP Stack's interactive dispute protocol.
TL;DR:
- It's Rust code
- ...that was originally Go code
- ...that runs an EVM
- ...emulating a MIPS64 machine
- ...that was originally a MIPS32 machine
- ...running compiled Rust or Go code
- ...that runs an EVM
howitzer
- The binary for executing MIPS64 programs natively on top of Howitzer with a detached preimage server.howitzer-kernel
- High-level library for running the Howitzer FPVM with a detached preimage server.howitzer-fpvm
- Contains the native implementation of the MIPS thread context emulator.howitzer-contracts
- Contains the EVM implementation of the MIPS thread context emulator.
The docker image for howitzer
is located in the docker directory, and can be built using the
script provided.
To get started, a few dependencies are required:
- Rust toolchain
- Recommended:
cargo-nextest
- Recommended:
- Just
- Go toolchain
- binutils
just test
just lint
just bench
Rustdocs are available by running cargo doc --open
after cloning the repo.
The specification for both Cannon and the preimage oracle can be found in the Optimism monorepo.
This repository is heavily inspired by the original Cannon VM, built by George Hotz and members of the OP Labs team. The original implementation is written in Go, and can be found in the Optimism monorepo. All credits for the original idea and reference implementation of this concept go to these folks.