diff options
-rw-r--r-- | CONTRIBUTING.md | 99 | ||||
-rw-r--r-- | README.md | 8 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | packages/contract-addresses/CHANGELOG.json | 8 | ||||
-rw-r--r-- | packages/contract-addresses/src/index.ts | 11 | ||||
-rw-r--r-- | packages/instant/.dogfood.discharge.json | 2 | ||||
-rw-r--r-- | packages/instant/.gitignore | 5 | ||||
-rw-r--r-- | packages/instant/.npmignore | 5 | ||||
-rw-r--r-- | packages/instant/.staging.discharge.json | 2 | ||||
-rw-r--r-- | packages/instant/package.json | 8 | ||||
-rw-r--r-- | packages/instant/public/index.html | 2 | ||||
-rw-r--r-- | packages/instant/webpack.config.js | 10 | ||||
-rw-r--r-- | packages/website/ts/pages/documentation/docs_home.tsx | 9 | ||||
-rw-r--r-- | packages/website/ts/pages/landing/landing.tsx | 4 | ||||
-rw-r--r-- | python-packages/order_utils/.discharge.json | 13 | ||||
-rw-r--r-- | python-packages/order_utils/README.md | 2 | ||||
-rwxr-xr-x | python-packages/order_utils/setup.py | 16 |
17 files changed, 155 insertions, 51 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff55ac4c6..1fea8f501 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,61 +1,92 @@ ## 0x Contribution Guide -Thank you for your interest in contributing to 0x protocol! We welcome contributions from anyone on the internet, and are grateful for even the smallest of fixes! +We welcome contributions from anyone on the internet and are grateful for even the smallest contributions. This document will help get you setup to start contributing back to 0x. -### How to contribute +### Getting started -If you'd like to contribute to 0x protocol, please fork the repo, fix, commit and send a pull request against the `development` branch for the maintainers to review and merge into the main code base. If you wish to submit more complex changes though, please check with a core dev first on [our RocketChat #dev channel](http://chat.0xproject.com) to ensure those changes are in-line with the general philosophy of the project and/or to get some early feedback which can make both your efforts easier as well as our review and merge procedures quick and simple. +1. Fork `0xproject/0x-monorepo` +2. Clone your fork +3. Follow the [installation & build steps](https://github.com/0xProject/0x-monorepo#install-dependencies) in the repo's top-level README. +4. Setup the recommended [Development Tooling](#development-tooling). +5. Open a PR with the `[WIP]` flag against the `development` branch and describe the change you are intending to undertake in the PR description. (see [our branch naming conventions](#branch-structure)) -We encourage a “PR early” approach so create the PR as early as possible even without the fix/feature ready, so that devs and other contributors know you have picked up the issue. These early PRs should indicate an 'in progress' status by adding the '[WIP]' prefix to the PR title. Please make sure your contributions adhere to our coding guidelines: +Before removing the `[WIP]` tag and submitting the PR for review, make sure: -* Pull requests adding features or refactoring should be opened against the `development` branch -* Pull requests fixing bugs in the latest release version should be opened again the `master` branch -* Write [good commit messages](https://chris.beams.io/posts/git-commit/) +* It passes our linter checks (`yarn lint`) +* It is properly formatted with Prettier (`yarn prettier`) +* It passes our continuous integration tests (See: [Enabling code coverage checks on your fork](#enabling-code-coverage-checks-on-your-fork) for instructions on getting the `submit-coverage` test to pass on forks) +* You've created/updated the corresponding [CHANGELOG](#CHANGELOGs) entries. +* Your changes have sufficient test coverage (e.g regression tests have been added for bug fixes) -### Code quality +### Branch structure -Because 0x.js is used by multiple relayers in production and their businesses depend on it, we strive for exceptional code quality. Please follow the existing code standards and conventions. `tslint` and `prettier` (described below) will help you. +We have two main branches: -If you're adding functionality, please also add tests and make sure they pass. We have an automatic coverage reporting tool, so we'll see it if they are missing ;) -If you're adding a new public function/member, make sure you document it with Java doc-style comments. We use typedoc to generate [awesome documentation](https://0xproject.com/docs/0xjs) from the comments within our source code. +* `master` represents the most recently released (published on npm) version of the codebase. +* `development` represents the current development state of the codebase. -If the sub-package you are modifying has a `CHANGELOG.md` file, make sure to add an entry in it for the change made to the package. For published packages, only changes that modify the public interface or behavior of the package need a CHANGELOG entry. +ALL PRs should be opened against `development`. -#### Enabling code coverage checks on your fork +Branch names should be prefixed with `fix`, `feature` or `refactor`. -If you simply fork the repo and then create a PR sourced from it, your PR will fail its test coverage check. This is because the 0x CircleCI configuration sets the `COVERALLS_REPO_TOKEN` environment variable to the token for 0xProject/0x-monorepo, but when running the check against your fork the token needs to match the repo that is your fork, rather than the 0x repo. +* e.g `fix/broken-wiki-link` +* If the PR only edits a single package, add it's name too + * e.g `fix/website/broken-wiki-link` -To facilitate this check, after creating your fork, but before creating the branch for your PR, do the following: +### CHANGELOGs -1. Log in to [coveralls.io](https://coveralls.io/), go to Add Repos, and enable your fork. Then go to the settings for that repo, and copy the Repo Token identifier. -2. Log in to [CircleCI](https://circleci.com/login), go to Add Projects, click the Set Up Project button corresponding to your fork, and then click Start Building. (Aside from step 3 below, no actual set up is needed, since it will use the `.circleci/config.yml` file in 0x-monorepo, so you can ignore all of the instruction/explanation given on the page with the Start Building button.) -3. In CircleCI, configure your project to add an Environment Variable, with name `COVERALLS_REPO_TOKEN`, and for the value paste in the Repo Token you copied in step 1. +At 0x we use [Semantic Versioning](http://semver.org/) for all our published packages. If a change you make corresponds to a semver bump, you must modify the package's `CHANGELOG.json` file accordingly. -Now, when you push to your branch, CircleCI will automatically run all of the checks in your own instance, and the coverage check will work since it has the proper Repo Token, and the PR will magically refer to your own checks rather than running them in the 0x CircleCI instance. +Each CHANGELOG entry that corresponds to a published package will have a `timestamp`. If no entry exists without a `timestamp`, you must first create a new one: -### Styleguide +``` +{ + "version": "1.0.1", <- The updated package version + "changes": [ + { + "note": "", <- Describe your change + "PR": 100 <- Your PR number + } + ] + }, +``` -We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) to keep our code style consistent. +If an entry without a `timestamp` already exists, this means other changes have been introduced by other collaborators since the last publish. Add your changes to the list of notes and adjust the version if your PR introduces a greater semver change (i.e current changes required a patch bump, but your changes require a major version bump). -To lint your code just run: `yarn lint` +### Development Tooling -We also use [Prettier](https://prettier.io/) to auto-format our code. Be sure to either add a [text editor integration](https://prettier.io/docs/en/editors.html) or a [pre-commit hook](https://prettier.io/docs/en/precommit.html) to properly format your code changes. +We strongly recommend you use the [VSCode](https://code.visualstudio.com/) text editor since most of our code is written in Typescript and it offers amazing support for the language. -If using the Atom text editor, we recommend you install the following packages: +#### Linter + +We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) to keep our code-style consistent. -* [atom-typescript](https://atom.io/packages/atom-typescript) -* [linter-tslint](https://atom.io/packages/linter-tslint) -* [prettier-atom](https://atom.io/packages/prettier-atom) -* [language-ethereum](https://atom.io/packages/language-ethereum) +Use `yarn:lint` to lint the entire monorepo, and `PKG={PACKAGE_NAME} yarn lint` to lint a specific package. -Our CI will also run TSLint and Prettier as a part of the test run when you submit your PR. Make sure that the CI tests pass for your contribution. +If you want to change a rule, or add a custom rule, please make these changes to our [tslint-config](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) package. All other packages have it as a dependency. -### Branch structure & versioning +Integrate it into your text editor: -We use [semantic versioning](http://semver.org/), but before a package reaches v1.0.0 all breaking changes as well as new features will be minor version bumps. +* VSCode: [vscode-tslint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) +* Atom: [linter-tslint](https://atom.io/packages/linter-tslint) -We have two main branches: `master` and `development`. +#### Auto-formatter + +We use [Prettier](https://prettier.io/) to auto-format our code. Be sure to either add a [text editor integration](https://prettier.io/docs/en/editors.html) or a [pre-commit hook](https://prettier.io/docs/en/precommit.html) to properly format your code changes. + +If using the Atom text editor, we recommend you install the following packages: + +* VSCode: [prettier-vscode](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +* Atom: [prettier-atom](https://atom.io/packages/prettier-atom) + +## Fix `submit-coverage` CI failure + +If you simply fork the repo and then create a PR from it, your PR will fail the `submit-coverage` check on CI. This is because the 0x CircleCI configuration sets the `COVERALLS_REPO_TOKEN` environment variable to the token for `0xProject/0x-monorepo`, but when running the check against your fork the token needs to match your repo's name `your-username/0x-monorepo`. + +To facilitate this check, after creating your fork, but before creating the branch for your PR, do the following: -`master` represents the most recent released (published on npm) version. +1. Log in to [coveralls.io](https://coveralls.io/), go to `Add Repos`, and enable your fork. Then go to the settings for that repo, and copy the `Repo Token` identifier. +2. Log in to [CircleCI](https://circleci.com/login), go to `Add Projects`, click the `Set Up Project` button corresponding to your fork, and then click `Start Building`. (Aside from step 3 below, no actual set up is needed, since it will use the `.circleci/config.yml` file in 0x-monorepo, so you can ignore all of the instruction/explanation given on the page with the `Start Building` button.) +3. In CircleCI, configure your project to add an environment variable, with name `COVERALLS_REPO_TOKEN`, and for the value paste in the `Repo Token` you copied in step 1. -`development` represents the development state and is a default branch to which you will submit a PR. We use this structure so that we can push hotfixes to the currently released version without needing to publish all the changes made towards the next release. If a hotfix is implemented on `master`, it is back-ported to `development`. +Now, when you push to your branch, CircleCI will automatically run all of the checks in your own instance, and the coverage check will work since it has the proper `Repo Token`, and the PR will magically refer to your own checks rather than running them in the 0x CircleCI instance. @@ -20,6 +20,8 @@ If you're developing on 0x now or are interested in using 0x infrastructure in t ### Published Packages +#### TypeScript/JavaScript + | Package | Version | Description | | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [`0x.js`](/packages/0x.js) | [![npm](https://img.shields.io/npm/v/0x.js.svg)](https://www.npmjs.com/package/0x.js) | A Javascript library for interacting with the 0x protocol | @@ -52,6 +54,12 @@ If you're developing on 0x now or are interested in using 0x infrastructure in t | [`@0x/utils`](/packages/utils) | [![npm](https://img.shields.io/npm/v/@0x/utils.svg)](https://www.npmjs.com/package/@0x/utils) | Shared utilities | | [`@0x/web3-wrapper`](/packages/web3-wrapper) | [![npm](https://img.shields.io/npm/v/@0x/web3-wrapper.svg)](https://www.npmjs.com/package/@0x/web3-wrapper) | Web3 wrapper | +#### Python + +| Package | Version | Description | +| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| [`0x-order-utils.py`](/python-packages/order_utils) | [![PyPI](https://img.shields.io/pypi/v/0x-order-utils.svg)](https://pypi.org/project/0x-order-utils/) | A set of utilities for generating, parsing, signing and validating 0x orders | + ### Private Packages | Package | Description | diff --git a/package.json b/package.json index 96c18a2c8..801657f5d 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "maxSize": "700kB" }, { - "path": "packages/instant/public/main.bundle.js", + "path": "packages/instant/umd/instant.js", "maxSize": "1000kB" } ], diff --git a/packages/contract-addresses/CHANGELOG.json b/packages/contract-addresses/CHANGELOG.json index 307d73545..86c6a5c31 100644 --- a/packages/contract-addresses/CHANGELOG.json +++ b/packages/contract-addresses/CHANGELOG.json @@ -1,5 +1,13 @@ [ { + "version": "1.2.0", + "changes": [ + { + "note": "Rinkeby Deployment" + } + ] + }, + { "version": "1.1.0", "changes": [ { diff --git a/packages/contract-addresses/src/index.ts b/packages/contract-addresses/src/index.ts index f5fd8d0be..57358dd38 100644 --- a/packages/contract-addresses/src/index.ts +++ b/packages/contract-addresses/src/index.ts @@ -14,6 +14,7 @@ export interface ContractAddresses { export enum NetworkId { Mainnet = 1, Ropsten = 3, + Rinkeby = 4, Kovan = 42, } @@ -38,6 +39,16 @@ const networkToAddresses: { [networkId: number]: ContractAddresses } = { forwarder: '0x2240dab907db71e64d3e0dba4800c83b5c502d4e', orderValidator: '0x90431a90516ab49af23a0530e04e8c7836e7122f', }, + 4: { + erc20Proxy: '0x3e809c563c15a295e832e37053798ddc8d6c8dab', + erc721Proxy: '0x8e1ff02637cb5e39f2fa36c14706aa348b065b09', + zrxToken: '0x2727e688b8fd40b198cd5fe6e408e00494a06f07', + etherToken: '0xc778417e063141139fce010982780140aa0cd5ab', + exchange: '0x22ebc052f43a88efa06379426120718170f2204e', + assetProxyOwner: '0x1da52d1d3a3acfa0a1836b737393b4e9931268fc', + forwarder: '0xd2dbf3250a764eaaa94fa0c84ed87c0edc8ed04e', + orderValidator: '0x39c3fc9f4d8430af2713306ce80c584752d9e1c7', + }, 42: { erc20Proxy: '0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e', erc721Proxy: '0x2a9127c745688a165106c11cd4d647d2220af821', diff --git a/packages/instant/.dogfood.discharge.json b/packages/instant/.dogfood.discharge.json index 9ade97d01..ca36b3861 100644 --- a/packages/instant/.dogfood.discharge.json +++ b/packages/instant/.dogfood.discharge.json @@ -1,6 +1,6 @@ { "domain": "0x-instant-dogfood", - "build_command": "yarn build:umd:prod", + "build_command": "WEBPACK_OUTPUT_PATH=public yarn build:umd:prod", "upload_directory": "public", "index_key": "index.html", "error_key": "index.html", diff --git a/packages/instant/.gitignore b/packages/instant/.gitignore index e1ce60fa2..a99cea187 100644 --- a/packages/instant/.gitignore +++ b/packages/instant/.gitignore @@ -1,2 +1,3 @@ -public/main.bundle.js -public/main.bundle.js.map
\ No newline at end of file +public/instant.js +public/instant.js.map +umd/*
\ No newline at end of file diff --git a/packages/instant/.npmignore b/packages/instant/.npmignore new file mode 100644 index 000000000..579d65af0 --- /dev/null +++ b/packages/instant/.npmignore @@ -0,0 +1,5 @@ +.* +* +*/ +!lib/src/**/* +!umd/**/*
\ No newline at end of file diff --git a/packages/instant/.staging.discharge.json b/packages/instant/.staging.discharge.json index 1026b9986..c917a650b 100644 --- a/packages/instant/.staging.discharge.json +++ b/packages/instant/.staging.discharge.json @@ -1,6 +1,6 @@ { "domain": "0x-instant-staging", - "build_command": "yarn build:umd:prod", + "build_command": "WEBPACK_OUTPUT_PATH=public yarn build:umd:prod", "upload_directory": "public", "index_key": "index.html", "error_key": "index.html", diff --git a/packages/instant/package.json b/packages/instant/package.json index 6caa3902b..bddc88d18 100644 --- a/packages/instant/package.json +++ b/packages/instant/package.json @@ -1,11 +1,11 @@ { "name": "@0x/instant", - "version": "0.0.7", + "version": "1.0.0", "engines": { "node": ">=6.12" }, - "private": true, "description": "0x Instant React Component", + "private": true, "main": "lib/src/index.js", "types": "lib/src/index.d.ts", "scripts": { @@ -29,8 +29,8 @@ "config": { "postpublish": { "assets": [ - "packages/instant/public/index.js", - "packages/instant/public/index.min.js" + "packages/instant/umd/instant.js", + "packages/instant/umd/instant.js.map" ] } }, diff --git a/packages/instant/public/index.html b/packages/instant/public/index.html index f6c809e33..253cbb194 100644 --- a/packages/instant/public/index.html +++ b/packages/instant/public/index.html @@ -6,7 +6,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1"> <title>0x Instant Dev Environment</title> <link rel="stylesheet" href="/external.css"> - <script type="text/javascript" src="/main.bundle.js" charset="utf-8"></script> + <script type="text/javascript" src="/instant.js" charset="utf-8"></script> <script type="text/javascript" src="https://unpkg.com/jsuri@1.3.1/Uri.js" charset="utf-8"></script> <script type="text/javascript" src="https://unpkg.com/bignumber.js@4.1.0/bignumber.js" charset="utf-8"></script> <style> diff --git a/packages/instant/webpack.config.js b/packages/instant/webpack.config.js index 6a4953bcc..ce4f1672e 100644 --- a/packages/instant/webpack.config.js +++ b/packages/instant/webpack.config.js @@ -10,11 +10,15 @@ const GIT_SHA = childProcess .execSync('git rev-parse HEAD') .toString() .trim(); + +const outputPath = process.env.WEBPACK_OUTPUT_PATH || 'umd'; const config = { - entry: './src/index.umd.ts', + entry: { + instant: './src/index.umd.ts', + }, output: { - filename: '[name].bundle.js', - path: path.resolve(__dirname, 'public'), + filename: '[name].js', + path: path.resolve(__dirname, outputPath), library: 'zeroExInstant', libraryTarget: 'umd', }, diff --git a/packages/website/ts/pages/documentation/docs_home.tsx b/packages/website/ts/pages/documentation/docs_home.tsx index 9faa930fc..e3328f3fa 100644 --- a/packages/website/ts/pages/documentation/docs_home.tsx +++ b/packages/website/ts/pages/documentation/docs_home.tsx @@ -84,6 +84,15 @@ const CATEGORY_TO_PACKAGES: ObjectMap<Package[]> = { }, { description: + "A Python library for interacting with 0x orders. Generate an orderHash, sign an order, validate it's signature and more.", + link: { + title: '0x-order-utils.py', + to: 'http://0x-order-utils-py.s3-website-us-east-1.amazonaws.com/', + shouldOpenInNewTab: true, + }, + }, + { + description: 'An http & websocket client for interacting with relayers that have implemented the [Standard Relayer API](https://github.com/0xProject/standard-relayer-api)', link: { title: '@0x/connect', diff --git a/packages/website/ts/pages/landing/landing.tsx b/packages/website/ts/pages/landing/landing.tsx index e2af40c8d..bb76efe21 100644 --- a/packages/website/ts/pages/landing/landing.tsx +++ b/packages/website/ts/pages/landing/landing.tsx @@ -36,8 +36,8 @@ interface Project { } const THROTTLE_TIMEOUT = 100; -const WHATS_NEW_TITLE = '0x Protocol v2 is Live!'; -const WHATS_NEW_URL = 'https://blog.0xproject.com/0x-protocol-v2-0-is-live-183aac180149'; +const WHATS_NEW_TITLE = 'Introducing the 0x Launch Kit'; +const WHATS_NEW_URL = 'https://blog.0xproject.com/introducing-the-0x-launch-kit-4acdc3453585'; const TITLE_STYLE: React.CSSProperties = { fontFamily: 'Roboto Mono', color: colors.grey, diff --git a/python-packages/order_utils/.discharge.json b/python-packages/order_utils/.discharge.json new file mode 100644 index 000000000..2b14aa023 --- /dev/null +++ b/python-packages/order_utils/.discharge.json @@ -0,0 +1,13 @@ +{ + "domain": "0x-order-utils-py", + "build_command": "python setup.py build_sphinx", + "upload_directory": "build/docs/html", + "index_key": "index.html", + "error_key": "index.html", + "trailing_slashes": true, + "cache": 3600, + "aws_profile": "default", + "aws_region": "us-east-1", + "cdn": false, + "dns_configured": true +} diff --git a/python-packages/order_utils/README.md b/python-packages/order_utils/README.md index 4c5f7627c..2181c7a11 100644 --- a/python-packages/order_utils/README.md +++ b/python-packages/order_utils/README.md @@ -2,7 +2,7 @@ 0x order-related utilities for those developing on top of 0x protocol. -Read the [documentation](https://0x.readthedocs.io/projects/order-utils/en/latest/) +Read the [documentation](http://0x-order-utils-py.s3-website-us-east-1.amazonaws.com/) ## Installing diff --git a/python-packages/order_utils/setup.py b/python-packages/order_utils/setup.py index 679bfb4b2..125de5ff7 100755 --- a/python-packages/order_utils/setup.py +++ b/python-packages/order_utils/setup.py @@ -116,6 +116,19 @@ class PublishCommand(distutils.command.build_py.build_py): subprocess.check_call("twine upload dist/*".split()) # nosec +class PublishDocsCommand(distutils.command.build_py.build_py): + """Custom command to publish docs to S3.""" + + description = ( + "Publish docs to " + + "http://0x-order-utils-py.s3-website-us-east-1.amazonaws.com/" + ) + + def run(self): + """Run npm package `discharge` to build & upload docs.""" + subprocess.check_call("discharge deploy".split()) # nosec + + class GanacheCommand(distutils.command.build_py.build_py): """Custom command to publish to pypi.org.""" @@ -141,7 +154,7 @@ with open("README.md", "r") as file_handle: setup( name="0x-order-utils", - version="0.1.0", + version="1.0.1", description="Order utilities for 0x applications", long_description=README_MD, long_description_content_type="text/markdown", @@ -154,6 +167,7 @@ setup( "test": TestCommandExtension, "test_publish": TestPublishCommand, "publish": PublishCommand, + "publish_docs": PublishDocsCommand, "ganache": GanacheCommand, }, install_requires=[ |