The hevm
project is an implementation of the Ethereum virtual
machine (EVM) made specifically for unit testing and debugging smart
contracts. It is developed by DappHub
and integrates especially well with the
dapp
tool suite. The hevm
command line program can run unit tests, interactively debug contracts
while showing the Solidity source, or run arbitrary EVM code.
This is not yet a complete EVM. For example, the precompiled
contracts are missing. We do well on Ethereum's VMTests
suite (see
hevm v0.11.1 test report) but we can't guarantee exact
consensus conformance. The precompiled contracts are entirely missing
for now, and we're in the process of implementing the Metropolis EIPs.
Note: the hevm
test runner and debugger currently assumes the use of
the ds-test
framework for Solidity unit tests and the dapp
tool
suite.
After running dapp build
, you can run your unit test suite with
$ hevm dapp-test
or you can enter the interactive debugger using
$ hevm interactive
Esc
: exit debuggern
: step by one instructionp
: step backwards by one instructionN
: step to the next source positionC-n
: step to the next source position and don't enterCALL
orCREATE
DappHub maintains a repository for the Nix package manager, which works on any Linux distribution, OS X, and other Unix-likes.
These commands will install Nix, add the DappHub "channel", and
install hevm
. The channel has cached binaries for Linux and OS X.
$ curl https://nixos.org/nix/install | sh
$ nix-channel --add https://nix.dapphub.com/pkgs/dapphub
$ nix-channel --update
$ nix-env -iA dapphub.hevm
This Nix channel can also be used to install
dapp
, our development tool:
$ nix-env -iA dapphub.dapp
If you don't want to compile anything, and you're on x86-64 Linux, you
can download a static binary from the "Releases" tab on GitHub.
If the static binary complains about a "terminfo" file, you have to
set the TERMINFO
environment variable; on Ubuntu, you should do
$ export TERMINFO=/lib/terminfo
(Put that in your ~/.bashrc
for convenience.)
If you can't or won't use Nix, the easiest way especially if you don't have GHC (the Haskell compiler) installed already, is to use Stack, which can take care of installing GHC for you. These commands should work:
$ curl -sSL https://get.haskellstack.org/ | sh
$ git clone https://github.com/dapphub/hevm
$ cd hevm && stack setup && stack install
If you prefer to use your own installation of GHC and the basic Haskell package manager, Cabal, simply run:
$ git clone https://github.com/dapphub/hevm
$ cd hevm && cabal configure && cabal install
You can find us in the DappHub chat at https://dapphub.chat/,
especially the #dev
channel.