115 lines
3.0 KiB
Markdown
115 lines
3.0 KiB
Markdown
## Contracts
|
|
|
|
Smart contracts that implement the 0x protocol.
|
|
|
|
## Usage
|
|
|
|
* [Docs](https://0xproject.com/docs/contracts)
|
|
* [Overview of 0x protocol architecture](https://0xproject.com/wiki#Architecture)
|
|
* [0x smart contract interactions](https://0xproject.com/wiki#Contract-Interactions)
|
|
* [Deployed smart contract addresses](https://0xproject.com/wiki#Deployed-Addresses)
|
|
* [0x protocol message format](https://0xproject.com/wiki#Message-Format)
|
|
|
|
## Contributing
|
|
|
|
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
|
|
|
|
For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein.
|
|
|
|
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
|
|
|
### Install Dependencies
|
|
|
|
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
|
|
|
```bash
|
|
yarn config set workspaces-experimental true
|
|
```
|
|
|
|
Then install dependencies
|
|
|
|
```bash
|
|
yarn install
|
|
```
|
|
|
|
### Build
|
|
|
|
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
|
|
|
|
```bash
|
|
PKG=contracts yarn build
|
|
```
|
|
|
|
Or continuously rebuild on change:
|
|
|
|
```bash
|
|
PKG=contracts yarn watch
|
|
```
|
|
|
|
### Clean
|
|
|
|
```bash
|
|
yarn clean
|
|
```
|
|
|
|
### Lint
|
|
|
|
```bash
|
|
yarn lint
|
|
```
|
|
|
|
### Run Tests
|
|
|
|
```bash
|
|
yarn test
|
|
```
|
|
|
|
#### Testing options
|
|
|
|
###### Revert stack traces
|
|
|
|
If you want to see helpful stack traces (incl. line number, code snippet) for smart contract reverts, run the tests with:
|
|
|
|
```
|
|
yarn test:trace
|
|
```
|
|
|
|
**Note:** This currently slows down the test runs and is therefore not enabled by default.
|
|
|
|
###### Backing Ethereum node
|
|
|
|
By default, our tests run against an in-process [Ganache](https://github.com/trufflesuite/ganache-core) instance. In order to run the tests against [Geth](https://github.com/ethereum/go-ethereum), first follow the instructions in the README for the devnet package to start the devnet Geth node. Then run:
|
|
|
|
```bash
|
|
TEST_PROVIDER=geth yarn test
|
|
```
|
|
|
|
###### Code coverage
|
|
|
|
In order to see the Solidity code coverage output generated by `@0xproject/sol-cov`, run:
|
|
|
|
```
|
|
yarn test:coverage
|
|
```
|
|
|
|
###### Gas profiler
|
|
|
|
In order to profile the gas costs for a specific smart contract call/transaction, you can run the tests in `profiler` mode.
|
|
|
|
**Note:** Traces emitted by ganache have incorrect gas costs so we recommend using Geth for profiling.
|
|
|
|
```
|
|
TEST_PROVIDER=geth yarn test:profiler
|
|
```
|
|
|
|
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.
|
|
|
|
```typescript
|
|
import { profiler } from './utils/profiler';
|
|
profiler.start();
|
|
// Some call to a smart contract
|
|
profiler.stop();
|
|
```
|
|
|
|
Without explicitly starting and stopping the profiler, the profiler output will be too busy, and therefore unusable.
|