Awesome Open Source
Awesome Open Source

Dapp tools by DappHub Chat


dapptools is a suite of Ethereum focused CLI tools following the unix design philosophy, favoring composability, configurability and extensibility.

This repository contains the source code for several programs hand-crafted and maintained by DappHub, along with dependency management, courtesy of Nix.

  • dapp - all you need Ethereum development tool. Build, test, fuzz, formally verify, debug & deploy solidity contracts.
  • seth - Ethereum CLI. Query contracts, send transactions, follow logs, slice & dice data.
  • hevm - Testing oriented EVM implementation. Debug, fuzz, or symbolically execute code against local or mainnet state.
  • ethsign - sign Ethereum transactions from a local keystore or hardware wallet.


Install Nix if you haven't already:

# user must be in sudoers
curl -L | sh

# Run this or login again to use Nix
. "$HOME/.nix-profile/etc/profile.d/"

Then install dapptools:

curl | sh

This configures the dapphub binary cache and installs the dapp, solc, seth and hevm executables.

You can also install an individual tool with

nix-env -iA <tool> -f $(curl -sS | jq -r .tarball_url)

If you instead want to build from master, change the url to

Prebuilt hevm binary

Static binaries for linux and macos of hevm are available for each release at

Most functionality is available out of the box, but for symbolic execution you will need solc and (z3 or cvc4 (or both)).

Getting started

For more information about the tools, consult the individual README pages:

seth dapp hevm ethsign

or use the --help flag for any tool.

We're also happy to answer any questions at


Deploy a Hello world contract and call it:

echo 'contract Hello { function hi() public pure returns(string memory) {return "Hello, World!";}}' | solc --bin -o . --overwrite -
HELLO=$(seth send --create $(<Hello.bin))
seth call $HELLO "hi()(string)"

Debug the first transaction of the latest block in the interactive debugger:

seth run-tx $(seth block latest transactions | jq .'[0]' -r) --debug

If Vitaliks next transaction were a contract deployment, calculate the address it would be deployed at:

dapp address 0xab5801a7d398351b8be11c439e05c5b3259aec9b $(seth nonce 0xab5801a7d398351b8be11c439e05c5b3259aec9b)

Symbolically explore the possible execution paths of a call to dai.transfer(address,uint):

seth bundle-source 0x6b175474e89094c44da98b954eedeac495271d0f > daisrc.json && \
hevm symbolic --address 0x6b175474e89094c44da98b954eedeac495271d0f --rpc $ETH_RPC_URL  --debug --sig "transfer(address,uint256)" --json-file daisrc.json


Contributions are always welcome! You may be interested in the architecture of this repository.

built with nix

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
haskell (1,647
ethereum (747
tools (355
nix (188
dapp (111
evm (43