* Update all package.json and tsconfig.json * fix(contracts): Make test/utils/web3_wrapper.ts compatible with project refs * Fix webpack config for 0x.js * Fix linter errors by adding rootDir to tsconfig.json as needed * Add build:ts and watch:ts commands to package.json * Update sra-spec to work with project references * Update tsconfig.json with latest new/removed packages * Add TypeScript as devDependency at root * Add missing rootDir to forwarder-helper package * Use a separate tsconfig file for typedoc * Fix linter errors * Apply PR feedback (add comments) * Fix 0x.js tsconfig
@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();