@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();