@0xproject/metacoin

This is an example project that demonstrates how the many Ethereum dev tools developed by 0x can be used in any Solidity/TS project. It supports:

  • Compiling & testing smart contracts
  • Generating typed contract wrappers
  • Solidity coverage
  • Solidity gas profiling
  • Running tests against Ganache
  • Running tests against our fork of Geth (it supports snapshotting & time travel)

Contributing

We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository.

Please read our contribution guidelines before getting started.

Install dependencies

If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:

yarn config set workspaces-experimental true

Then install dependencies

yarn install

Build

To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:

PKG=@0xproject/metacoin yarn build

Or continuously rebuild on change:

PKG=@0xproject/metacoin yarn watch

Clean

yarn clean

Lint

yarn lint

Test providers

By default tests run against an in-process Ganache instance. If you want to use Geth you'll need to start a Geth dev node first.

cd ../devnet
docker build -t 0x-devnet .
docker run -it --rm -p 8501:8501 0x-devnet

This Geth version supports snapshots and time travel. Then - run your tests against it.

TEST_PROVIDER=geth yarn test

Coverage

yarn test:coverage
yarn coverage:report:html

Profiling

Please note that traces emitted by ganache have incorrect gas costs so we recommend using Geth for profiling.

TEST_PROVIDER=geth yarn test:profile

You'll see a warning that you need to explicitly enable and disable the profiler before and after the block of code you want to profile.

import { profiler } from './utils/profiler';
profiler.start();
// Some solidity stuff
profiler.stop();