diff options
767 files changed, 9261 insertions, 14269 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml index 1cf665cce..897fca3c0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,358 +1,350 @@ version: 2 jobs: - build: - resource_class: medium+ - docker: - - image: circleci/node:9 - environment: - CONTRACTS_COMMIT_HASH: '9ed05f5' - working_directory: ~/repo - steps: - - checkout - - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV - - run: - name: install-yarn - command: sudo npm install --global yarn@1.9.4 - - run: - name: yarn - command: yarn --frozen-lockfile install || yarn --frozen-lockfile install - - run: yarn build:ci:no_website - - save_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo - build-website: - resource_class: medium+ - docker: - - image: circleci/node:9 - working_directory: ~/repo - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: cd packages/website && yarn build - test-contracts-ganache: - docker: - - image: circleci/node:9 - working_directory: ~/repo - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn wsrun test:circleci contracts - test-contracts-geth: - docker: - - image: circleci/node:9 - - image: 0xorg/devnet - working_directory: ~/repo - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - # HACK(albrow): we need to sleep 10 seconds to ensure the devnet is - # initialized - - run: sleep 10 && TEST_PROVIDER=geth yarn wsrun test contracts - test-publish: - resource_class: medium+ - docker: - - image: circleci/node:9 - - image: 0xorg/verdaccio - working_directory: ~/repo - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn test:publish:circleci - test-doc-generation: - docker: - - image: circleci/node:9 - working_directory: ~/repo - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn test:generate_docs:circleci - test-rest: - docker: - - image: circleci/node:9 - working_directory: ~/repo - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn wsrun test:circleci @0xproject/abi-gen - - run: yarn wsrun test:circleci @0xproject/assert - - run: yarn wsrun test:circleci @0xproject/base-contract - - run: yarn wsrun test:circleci @0xproject/connect - - run: yarn wsrun test:circleci @0xproject/contract-wrappers - - run: yarn wsrun test:circleci @0xproject/dev-utils - - run: yarn wsrun test:circleci @0xproject/json-schemas - - run: yarn wsrun test:circleci @0xproject/metacoin - - run: yarn wsrun test:circleci @0xproject/order-utils - - run: yarn wsrun test:circleci @0xproject/order-watcher - - run: yarn wsrun test:circleci @0xproject/sol-compiler - - run: yarn wsrun test:circleci @0xproject/sol-cov - - run: yarn wsrun test:circleci @0xproject/sol-doc - - run: yarn wsrun test:circleci @0xproject/sra-report - - run: yarn wsrun test:circleci @0xproject/subproviders - - run: yarn wsrun test:circleci @0xproject/web3-wrapper - - run: yarn wsrun test:circleci @0xproject/utils - - run: yarn wsrun test:circleci @0xproject/instant - - save_cache: - key: coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/abi-gen/coverage/lcov.info - - save_cache: - key: coverage-assert-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/assert/coverage/lcov.info - - save_cache: - key: coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/base-contract/coverage/lcov.info - - save_cache: - key: coverage-connect-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/connect/coverage/lcov.info - - save_cache: - key: coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/contract-wrappers/coverage/lcov.info - - save_cache: - key: coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/dev-utils/coverage/lcov.info - - save_cache: - key: coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/json-schemas/coverage/lcov.info - - save_cache: - key: coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/metacoin/coverage/lcov.info - - save_cache: - key: coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/order-utils/coverage/lcov.info - - save_cache: - key: coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/order-watcher/coverage/lcov.info - - save_cache: - key: coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/sol-compiler/coverage/lcov.info - - save_cache: - key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/sol-cov/coverage/lcov.info - - save_cache: - key: coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/sol-doc/coverage/lcov.info - - save_cache: - key: coverage-sra-report-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/sra-report/coverage/lcov.info - - save_cache: - key: coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/subproviders/coverage/lcov.info - - save_cache: - key: coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/packages/web3-wrapper/coverage/lcov.info - test-python: - working_directory: ~/repo - docker: - - image: circleci/python - steps: - - checkout - - run: sudo chown -R circleci:circleci /usr/local/bin - - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages - - restore_cache: - key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} - - run: - command: | - cd python-packages/order_utils - python -m ensurepip - python -m pip install -e .[dev] - - save_cache: - key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} - paths: - - "/usr/local/bin" - - "/usr/local/lib/python3.7/site-packages" - - ".eggs" - - ".mypy_cache" - - ".pytest_cache" - - ".tox" - - run: - command: | - cd python-packages/order_utils - coverage run setup.py test - - save_cache: - key: coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/repo/python-packages/order_utils/.coverage - test-rest-python: - working_directory: ~/repo - docker: - - image: circleci/python - steps: - - checkout - - run: sudo chown -R circleci:circleci /usr/local/bin - - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages - - restore_cache: - key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} - - run: - command: | - cd python-packages/order_utils - python -m ensurepip - python -m pip install -e .[dev] - - save_cache: - key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} - paths: - - "/usr/local/bin" - - "/usr/local/lib/python3.7/site-packages" - - ".eggs" - - ".mypy_cache" - - ".pytest_cache" - - ".tox" - - run: - command: | - cd python-packages/order_utils - tox - static-tests-python: - working_directory: ~/repo - docker: - - image: circleci/python - steps: - - checkout - - run: sudo chown -R circleci:circleci /usr/local/bin - - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages - - restore_cache: - key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} - - run: - command: | - cd python-packages/order_utils - python -m ensurepip - python -m pip install -e .[dev] - - save_cache: - key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} - paths: - - "/usr/local/bin" - - "/usr/local/lib/python3.7/site-packages" - - run: - command: | - cd python-packages/order_utils - python setup.py lint - static-tests: - working_directory: ~/repo - docker: - - image: circleci/node:9 - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn lerna run lint - - run: yarn prettier:ci - - run: cd packages/0x.js && yarn build:umd:prod - - run: yarn bundlewatch - submit-coverage: - docker: - - image: circleci/node:9 - working_directory: ~/repo - steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-assert-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-connect-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-sra-report-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-contracts-{{ .Environment.CIRCLE_SHA1 }} - - restore_cache: - keys: - - coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn report_coverage + build: + resource_class: medium+ + docker: + - image: circleci/node:9 + environment: + CONTRACTS_COMMIT_HASH: '9ed05f5' + working_directory: ~/repo + steps: + - checkout + - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV + - run: + name: install-yarn + command: sudo npm install --global yarn@1.9.4 + - run: + name: yarn + command: yarn --frozen-lockfile install || yarn --frozen-lockfile install + - run: yarn build:ci:no_website + - save_cache: + key: repo-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo + build-website: + resource_class: medium+ + docker: + - image: circleci/node:9 + working_directory: ~/repo + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + - run: cd packages/website && yarn build + test-contracts-ganache: + docker: + - image: circleci/node:9 + working_directory: ~/repo + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn wsrun test:circleci contracts + test-contracts-geth: + docker: + - image: circleci/node:9 + - image: 0xorg/devnet + working_directory: ~/repo + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + # HACK(albrow): we need to sleep 10 seconds to ensure the devnet is + # initialized + - run: sleep 10 && TEST_PROVIDER=geth yarn wsrun test contracts + test-publish: + resource_class: medium+ + docker: + - image: circleci/node:9 + - image: 0xorg/verdaccio + working_directory: ~/repo + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn test:publish:circleci + test-doc-generation: + docker: + - image: circleci/node:9 + working_directory: ~/repo + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn test:generate_docs:circleci + test-rest: + docker: + - image: circleci/node:9 + working_directory: ~/repo + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn wsrun test:circleci @0x/abi-gen + - run: yarn wsrun test:circleci @0x/assert + - run: yarn wsrun test:circleci @0x/base-contract + - run: yarn wsrun test:circleci @0x/connect + - run: yarn wsrun test:circleci @0x/contract-wrappers + - run: yarn wsrun test:circleci @0x/dev-utils + - run: yarn wsrun test:circleci @0x/json-schemas + - run: yarn wsrun test:circleci @0x/metacoin + - run: yarn wsrun test:circleci @0x/order-utils + - run: yarn wsrun test:circleci @0x/order-watcher + - run: yarn wsrun test:circleci @0x/sol-compiler + - run: yarn wsrun test:circleci @0x/sol-cov + - run: yarn wsrun test:circleci @0x/sol-doc + - run: yarn wsrun test:circleci @0x/subproviders + - run: yarn wsrun test:circleci @0x/web3-wrapper + - run: yarn wsrun test:circleci @0x/utils + - run: yarn wsrun test:circleci @0x/instant + - save_cache: + key: coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/abi-gen/coverage/lcov.info + - save_cache: + key: coverage-assert-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/assert/coverage/lcov.info + - save_cache: + key: coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/base-contract/coverage/lcov.info + - save_cache: + key: coverage-connect-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/connect/coverage/lcov.info + - save_cache: + key: coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/contract-wrappers/coverage/lcov.info + - save_cache: + key: coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/dev-utils/coverage/lcov.info + - save_cache: + key: coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/json-schemas/coverage/lcov.info + - save_cache: + key: coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/metacoin/coverage/lcov.info + - save_cache: + key: coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/order-utils/coverage/lcov.info + - save_cache: + key: coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/order-watcher/coverage/lcov.info + - save_cache: + key: coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/sol-compiler/coverage/lcov.info + - save_cache: + key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/sol-cov/coverage/lcov.info + - save_cache: + key: coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/sol-doc/coverage/lcov.info + - save_cache: + key: coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/subproviders/coverage/lcov.info + - save_cache: + key: coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/packages/web3-wrapper/coverage/lcov.info + test-python: + working_directory: ~/repo + docker: + - image: circleci/python + steps: + - checkout + - run: sudo chown -R circleci:circleci /usr/local/bin + - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages + - restore_cache: + key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} + - run: + command: | + cd python-packages/order_utils + python -m ensurepip + python -m pip install -e .[dev] + - save_cache: + key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} + paths: + - '/usr/local/bin' + - '/usr/local/lib/python3.7/site-packages' + - '.eggs' + - '.mypy_cache' + - '.pytest_cache' + - '.tox' + - run: + command: | + cd python-packages/order_utils + coverage run setup.py test + - save_cache: + key: coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/repo/python-packages/order_utils/.coverage + test-rest-python: + working_directory: ~/repo + docker: + - image: circleci/python + steps: + - checkout + - run: sudo chown -R circleci:circleci /usr/local/bin + - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages + - restore_cache: + key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} + - run: + command: | + cd python-packages/order_utils + python -m ensurepip + python -m pip install -e .[dev] + - save_cache: + key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} + paths: + - '/usr/local/bin' + - '/usr/local/lib/python3.7/site-packages' + - '.eggs' + - '.mypy_cache' + - '.pytest_cache' + - '.tox' + - run: + command: | + cd python-packages/order_utils + tox + static-tests-python: + working_directory: ~/repo + docker: + - image: circleci/python + steps: + - checkout + - run: sudo chown -R circleci:circleci /usr/local/bin + - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages + - restore_cache: + key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} + - run: + command: | + cd python-packages/order_utils + python -m ensurepip + python -m pip install -e .[dev] + - save_cache: + key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} + paths: + - '/usr/local/bin' + - '/usr/local/lib/python3.7/site-packages' + - run: + command: | + cd python-packages/order_utils + python setup.py lint + static-tests: + working_directory: ~/repo + docker: + - image: circleci/node:9 + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn lerna run lint + - run: yarn prettier:ci + - run: cd packages/0x.js && yarn build:umd:prod + - run: yarn bundlewatch + submit-coverage: + docker: + - image: circleci/node:9 + working_directory: ~/repo + steps: + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-assert-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-connect-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-contracts-{{ .Environment.CIRCLE_SHA1 }} + - restore_cache: + keys: + - coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn report_coverage workflows: - version: 2 - main: - jobs: - - build - - build-website: - requires: + version: 2 + main: + jobs: - build - - test-contracts-ganache: - requires: - - build - - test-contracts-geth: - requires: - - build - - test-rest: - requires: - - build - - static-tests: - requires: - - build - - test-publish: - requires: - - build - - test-doc-generation: - requires: - - build - - submit-coverage: - requires: - - test-rest + - build-website: + requires: + - build + - test-contracts-ganache: + requires: + - build + - test-contracts-geth: + requires: + - build + - test-rest: + requires: + - build + - static-tests: + requires: + - build + - test-publish: + requires: + - build + - test-doc-generation: + requires: + - build + - submit-coverage: + requires: + - test-rest + - test-python - test-python - - test-python - - static-tests-python - # skip python tox run for now, as we don't yet have multiple test environments to support. - #- test-rest-python + - static-tests-python + # skip python tox run for now, as we don't yet have multiple test environments to support. + #- test-rest-python diff --git a/.gitattributes b/.gitattributes index b786d1f1d..f885b0127 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,7 @@ *.sol linguist-language=Solidity # Automatically collapse generated files in GitHub. +*.svg linguist-generated packages/contract-artifacts/artifacts/*json linguist-generated packages/abi-gen-wrappers/wrappers/*.ts liguist-generated + diff --git a/CODEOWNERS b/CODEOWNERS index 278234aff..3cf75fb2d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -10,19 +10,26 @@ packages/instant/ @BMillman19 @fragosti @steveklebanoff packages/website/ @BMillman19 @fragosti @fabioberger @steveklebanoff # Dev tools & setup +.circleci/ @LogvinovLeon packages/abi-gen/ @LogvinovLeon packages/base-contract/ @LogvinovLeon +packages/connect/ @fragosti packages/contract_templates/ @LogvinovLeon +packages/contract-addresses/ @albrow +packages/contract-artifacts/ @albrow packages/dev-utils/ @LogvinovLeon @fabioberger - +packages/devnet/ @albrow packages/ethereum-types/ @LogvinovLeon packages/metacoin/ @LogvinovLeon +packages/monorepo-scripts/ @fabioberger +packages/order-utils/ @fabioberger @LogvinovLeon packages/sol-compiler/ @LogvinovLeon packages/sol-cov/ @LogvinovLeon packages/sol-resolver/ @LogvinovLeon -packages/web3-wrapper/ @LogvinovLeon @fabioberger -.circleci/ @LogvinovLeon packages/subproviders/ @fabioberger @dekz -packages/connect/ @fragosti -packages/monorepo-scripts/ @fabioberger -packages/order-utils/ @fabioberger @LogvinovLeon +packages/verdaccio/ @albrow +packages/web3-wrapper/ @LogvinovLeon @fabioberger +python-packages/ @feuGeneA + +# Protocol/smart contracts +packages/contracts/test/ @albrow @@ -20,39 +20,46 @@ If you're developing on 0x now or are interested in using 0x infrastructure in t ### Published Packages -| 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 | -| [`@0xproject/abi-gen`](/packages/abi-gen) | [![npm](https://img.shields.io/npm/v/@0xproject/abi-gen.svg)](https://www.npmjs.com/package/@0xproject/abi-gen) | Tool to generate TS wrappers from smart contract ABIs | -| [`@0xproject/assert`](/packages/assert) | [![npm](https://img.shields.io/npm/v/@0xproject/assert.svg)](https://www.npmjs.com/package/@0xproject/assert) | Type and schema assertions used by our packages | -| [`@0xproject/asset-buyer`](/packages/asset-buyer) | [![npm](https://img.shields.io/npm/v/@0xproject/asset-buyer.svg)](https://www.npmjs.com/package/@0xproject/asset-buyer) | Convenience package for discovering and buying assets with Ether. | -| [`@0xproject/base-contract`](/packages/base-contract) | [![npm](https://img.shields.io/npm/v/@0xproject/base-contract.svg)](https://www.npmjs.com/package/@0xproject/base-contract) | BaseContract used by auto-generated `abi-gen` wrapper contracts | -| [`@0xproject/connect`](/packages/connect) | [![npm](https://img.shields.io/npm/v/@0xproject/connect.svg)](https://www.npmjs.com/package/@0xproject/connect) | A Javascript library for interacting with the Standard Relayer API | -| [`@0xproject/dev-utils`](/packages/dev-utils) | [![npm](https://img.shields.io/npm/v/@0xproject/dev-utils.svg)](https://www.npmjs.com/package/@0xproject/dev-utils) | Dev utils to be shared across 0x projects and packages | -| [`@0xproject/json-schemas`](/packages/json-schemas) | [![npm](https://img.shields.io/npm/v/@0xproject/json-schemas.svg)](https://www.npmjs.com/package/@0xproject/json-schemas) | 0x-related json schemas | -| [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts) | [![npm](https://img.shields.io/npm/v/@0xproject/monorepo-scripts.svg)](https://www.npmjs.com/package/@0xproject/monorepo-scripts) | Monorepo scripts | -| [`@0xproject/order-utils`](/packages/order-utils) | [![npm](https://img.shields.io/npm/v/@0xproject/order-utils.svg)](https://www.npmjs.com/package/@0xproject/order-utils) | A set of utilities for generating, parsing, signing and validating 0x orders. | -| [`@0xproject/react-docs`](/packages/react-docs) | [![npm](https://img.shields.io/npm/v/@0xproject/react-docs.svg)](https://www.npmjs.com/package/@0xproject/react-docs) | React documentation component for rendering TypeDoc & Doxity generated JSON | -| [`@0xproject/react-shared`](/packages/react-shared) | [![npm](https://img.shields.io/npm/v/@0xproject/react-shared.svg)](https://www.npmjs.com/package/@0xproject/react-shared) | 0x shared react components | -| [`@0xproject/sol-compiler`](/packages/sol-compiler) | [![npm](https://img.shields.io/npm/v/@0xproject/sol-compiler.svg)](https://www.npmjs.com/package/@0xproject/sol-compiler) | A thin wrapper around Solc.js that outputs artifacts, resolves imports, only re-compiles when needed, and other niceties. | -| [`@0xproject/sol-cov`](/packages/sol-cov) | [![npm](https://img.shields.io/npm/v/@0xproject/sol-cov.svg)](https://www.npmjs.com/package/@0xproject/sol-cov) | Solidity test coverage tool | -| [`@0xproject/sra-spec`](/packages/sra-spec) | [![npm](https://img.shields.io/npm/v/@0xproject/sra-spec.svg)](https://www.npmjs.com/package/@0xproject/sra-spec) | OpenAPI specification for the standard relayer API | -| [`@0xproject/sra-report`](/packages/sra-report) | [![npm](https://img.shields.io/npm/v/@0xproject/sra-report.svg)](https://www.npmjs.com/package/@0xproject/sra-report) | Generate reports for standard relayer API compliance | -| [`@0xproject/subproviders`](/packages/subproviders) | [![npm](https://img.shields.io/npm/v/@0xproject/subproviders.svg)](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) | -| [`@0xproject/tslint-config`](/packages/tslint-config) | [![npm](https://img.shields.io/npm/v/@0xproject/tslint-config.svg)](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules | -| [`@0xproject/types`](/packages/types) | [![npm](https://img.shields.io/npm/v/@0xproject/types.svg)](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations | -| [`@0xproject/typescript-typings`](/packages/typescript-typings) | [![npm](https://img.shields.io/npm/v/@0xproject/typescript-typings.svg)](https://www.npmjs.com/package/@0xproject/typescript-typings) | Repository of types for external packages | -| [`@0xproject/utils`](/packages/utils) | [![npm](https://img.shields.io/npm/v/@0xproject/utils.svg)](https://www.npmjs.com/package/@0xproject/utils) | Shared utilities | -| [`@0xproject/web3-wrapper`](/packages/web3-wrapper) | [![npm](https://img.shields.io/npm/v/@0xproject/web3-wrapper.svg)](https://www.npmjs.com/package/@0xproject/web3-wrapper) | Web3 wrapper | +| 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 | +| [`@0x/abi-gen`](/packages/abi-gen) | [![npm](https://img.shields.io/npm/v/@0x/abi-gen.svg)](https://www.npmjs.com/package/@0x/abi-gen) | Tool to generate TS wrappers from smart contract ABIs | +| [`@0x/abi-gen-wrappers`](/packages/abi-gen-wrappers) | [![npm](https://img.shields.io/npm/v/@0x/abi-gen-wrappers.svg)](https://www.npmjs.com/package/@0x/abi-gen-wrappers) | Low-level 0x smart contract wrappers generated using @0x/abi-gen | +| [`@0x/assert`](/packages/assert) | [![npm](https://img.shields.io/npm/v/@0x/assert.svg)](https://www.npmjs.com/package/@0x/assert) | Type and schema assertions used by our packages | +| [`@0x/asset-buyer`](/packages/asset-buyer) | [![npm](https://img.shields.io/npm/v/@0x/asset-buyer.svg)](https://www.npmjs.com/package/@0x/asset-buyer) | Convenience package for discovering and buying assets with Ether | +| [`@0x/base-contract`](/packages/base-contract) | [![npm](https://img.shields.io/npm/v/@0x/base-contract.svg)](https://www.npmjs.com/package/@0x/base-contract) | BaseContract used by auto-generated `abi-gen` wrapper contracts | +| [`@0x/connect`](/packages/connect) | [![npm](https://img.shields.io/npm/v/@0x/connect.svg)](https://www.npmjs.com/package/@0x/connect) | A Javascript library for interacting with the Standard Relayer API | +| [`@0x/contract-addresses`](/packages/contract-addresses) | [![npm](https://img.shields.io/npm/v/@0x/contract-addresses.svg)](https://www.npmjs.com/package/@0x/contract-addresses) | Used to get known addresses of deployed 0x contracts | +| [`@0x/contract-artifacts`](/packages/contract-artifacts) | [![npm](https://img.shields.io/npm/v/@0x/contract-artifacts.svg)](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts | +| [`@0x/contract-wrappers`](/packages/contract-wrappers) | [![npm](https://img.shields.io/npm/v/@0x/contract-wrappers.svg)](https://www.npmjs.com/package/@0x/contract-wrappers) | Smart TS wrappers for 0x smart contracts | +| [`@0x/dev-utils`](/packages/dev-utils) | [![npm](https://img.shields.io/npm/v/@0x/dev-utils.svg)](https://www.npmjs.com/package/@0x/dev-utils) | Dev utils to be shared across 0x projects and packages | +| [`@0x/fill-scenarios`](/packages/fill-scenarios) | [![npm](https://img.shields.io/npm/v/@0x/fill-scenarios.svg)](https://www.npmjs.com/package/@0x/fill-scenarios) | 0x order fill scenario generation | +| [`@0x/json-schemas`](/packages/json-schemas) | [![npm](https://img.shields.io/npm/v/@0x/json-schemas.svg)](https://www.npmjs.com/package/@0x/json-schemas) | 0x-related json schemas | +| [`@0x/migrations`](/packages/migrations) | [![npm](https://img.shields.io/npm/v/@0x/migrations.svg)](https://www.npmjs.com/package/@0x/migrations) | 0x smart contract migrations | +| [`@0x/order-utils`](/packages/order-utils) | [![npm](https://img.shields.io/npm/v/@0x/order-utils.svg)](https://www.npmjs.com/package/@0x/order-utils) | A set of utilities for generating, parsing, signing and validating 0x orders | +| [`@0x/order-watcher`](/packages/order-watcher) | [![npm](https://img.shields.io/npm/v/@0x/order-watcher.svg)](https://www.npmjs.com/package/@0x/order-watcher) | An order watcher daemon that watches for order validity | +| [`@0x/react-docs`](/packages/react-docs) | [![npm](https://img.shields.io/npm/v/@0x/react-docs.svg)](https://www.npmjs.com/package/@0x/react-docs) | React documentation component for rendering TypeDoc & Doxity generated JSON | +| [`@0x/react-shared`](/packages/react-shared) | [![npm](https://img.shields.io/npm/v/@0x/react-shared.svg)](https://www.npmjs.com/package/@0x/react-shared) | 0x shared react components | +| [`@0x/sol-compiler`](/packages/sol-compiler) | [![npm](https://img.shields.io/npm/v/@0x/sol-compiler.svg)](https://www.npmjs.com/package/@0x/sol-compiler) | A thin wrapper around Solc.js that outputs artifacts, resolves imports, only re-compiles when needed, and other niceties | +| [`@0x/sol-cov`](/packages/sol-cov) | [![npm](https://img.shields.io/npm/v/@0x/sol-cov.svg)](https://www.npmjs.com/package/@0x/sol-cov) | Solidity test coverage tool | +| [`@0x/sol-doc`](/packages/sol-doc) | [![npm](https://img.shields.io/npm/v/@0x/sol-doc.svg)](https://www.npmjs.com/package/@0x/sol-doc) | Solidity documentation generator | +| [`@0x/sol-resolver`](/packages/sol-resolver) | [![npm](https://img.shields.io/npm/v/@0x/sol-resolver.svg)](https://www.npmjs.com/package/@0x/sol-resolver) | Import resolver for smart contracts dependencies | +| [`@0x/sra-spec`](/packages/sra-spec) | [![npm](https://img.shields.io/npm/v/@0x/sra-spec.svg)](https://www.npmjs.com/package/@0x/sra-spec) | OpenAPI specification for the standard relayer API | +| [`@0x/subproviders`](/packages/subproviders) | [![npm](https://img.shields.io/npm/v/@0x/subproviders.svg)](https://www.npmjs.com/package/@0x/subproviders) | Useful web3 subproviders (e.g. LedgerSubprovider) | +| [`@0x/tslint-config`](/packages/tslint-config) | [![npm](https://img.shields.io/npm/v/@0x/tslint-config.svg)](https://www.npmjs.com/package/@0x/tslint-config) | Custom 0x development TSLint rules | +| [`@0x/types`](/packages/types) | [![npm](https://img.shields.io/npm/v/@0x/types.svg)](https://www.npmjs.com/package/@0x/types) | Shared type declarations | +| [`@0x/typescript-typings`](/packages/typescript-typings) | [![npm](https://img.shields.io/npm/v/@0x/typescript-typings.svg)](https://www.npmjs.com/package/@0x/typescript-typings) | Repository of types for external packages | +| [`@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 | ### Private Packages -| Package | Description | -| --------------------------------------------------------------- | ---------------------------------------------------------------- | -| [`@0xproject/contracts`](/packages/contracts) | 0x solidity smart contracts & tests | -| [`@0xproject/react-docs-example`](/packages/react-docs-example) | Example documentation site created with `@0xproject/react-docs` | -| [`@0xproject/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether | -| [`@0xproject/website`](/packages/website) | 0x website & Portal DApp | +| Package | Description | +| -------------------------------------------------------- | ---------------------------------------------------------------- | +| [`@0x/contracts`](/packages/contracts) | 0x solidity smart contracts & tests | +| [`@0x/react-docs-example`](/packages/react-docs-example) | Example documentation site created with `@0x/react-docs` | +| [`@0x/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether | +| [`@0x/website`](/packages/website) | 0x website & Portal DApp | ## Usage @@ -71,10 +78,10 @@ Dedicated documentation pages: Node version >= 6.12 is required. Most of the packages require additional typings for external dependencies. -You can include those by prepending the `@0xproject/typescript-typings` package to your [`typeRoots`](http://www.typescriptlang.org/docs/handbook/tsconfig-json.html) config. +You can include those by prepending the `@0x/typescript-typings` package to your [`typeRoots`](http://www.typescriptlang.org/docs/handbook/tsconfig-json.html) config. ```json -"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], +"typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], ``` ## Contributing @@ -87,6 +94,10 @@ We strongly recommend that the community help us make improvements and determine Make sure you are using Yarn v1.9.4. To install using brew: +```bash +brew install yarn@1.9.4 +``` + Then install dependencies ```bash @@ -104,7 +115,7 @@ yarn build To build a specific package: ```bash -PKG=@0xproject/web3-wrapper yarn build +PKG=@0x/web3-wrapper yarn build ``` ### Watch @@ -121,7 +132,7 @@ To watch a specific package and all it's dependent packages: PKG=[NPM_PACKAGE_NAME] yarn watch e.g -PKG=@0xproject/web3-wrapper yarn watch +PKG=@0x/web3-wrapper yarn watch ``` ### Clean @@ -177,5 +188,5 @@ yarn test Run a specific package's test: ```bash -PKG=@0xproject/web3-wrapper yarn test +PKG=@0x/web3-wrapper yarn test ``` diff --git a/package.json b/package.json index 9785cd672..c786e7f19 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,9 @@ "wsrun": "wsrun", "lerna": "lerna", "build": "wsrun build $PKG --fast-exit -r --stages", - "build:no_website": "wsrun build $PKG --fast-exit -r --stages --exclude @0xproject/website", - "build:ci:no_website": "wsrun build:ci $PKG --fast-exit -r --stages --exclude @0xproject/website", - "build:monorepo_scripts": "PKG=@0xproject/monorepo-scripts yarn build", + "build:no_website": "wsrun build $PKG --fast-exit -r --stages --exclude @0x/website", + "build:ci:no_website": "wsrun build:ci $PKG --fast-exit -r --stages --exclude @0x/website", + "build:monorepo_scripts": "PKG=@0x/monorepo-scripts yarn build", "build:ts": "tsc -b", "watch:ts": "tsc -b -w", "clean": "wsrun clean $PKG --fast-exit -r --parallel", @@ -42,7 +42,7 @@ "mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic", "packagesWithDocPages": "0x.js connect json-schemas subproviders web3-wrapper contract-wrappers order-utils order-watcher sol-compiler sol-cov ethereum-types asset-buyer" }, - "bundlewatch" : { + "bundlewatch": { "files": [ { "path": "packages/0x.js/_bundles/index.min.js", @@ -54,18 +54,22 @@ } ], "ci": { - "trackBranches": ["master", "development"], + "trackBranches": [ + "master", + "development" + ], "repoBranchBase": "development" } }, "devDependencies": { "@0x-lerna-fork/lerna": "3.0.0-beta.25", + "@0xproject/npm-cli-login": "^0.0.11", "async-child-process": "^1.1.1", "bundlewatch": "^0.2.1", "coveralls": "^3.0.0", "ganache-cli": "6.1.8", "lcov-result-merger": "^3.0.0", - "@0xproject/npm-cli-login": "^0.0.11", + "lerna": "^3.0.0-beta.25", "npm-run-all": "^4.1.2", "prettier": "^1.11.1", "source-map-support": "^0.5.6", diff --git a/packages/0x.js/CHANGELOG.json b/packages/0x.js/CHANGELOG.json index 98791139f..a404ed481 100644 --- a/packages/0x.js/CHANGELOG.json +++ b/packages/0x.js/CHANGELOG.json @@ -29,7 +29,8 @@ "note": "Export new `AssetData` type from types", "pr": 1131 } - ] + ], + "timestamp": 1539871071 }, { "version": "1.0.8", diff --git a/packages/0x.js/CHANGELOG.md b/packages/0x.js/CHANGELOG.md index 27702413d..939ada519 100644 --- a/packages/0x.js/CHANGELOG.md +++ b/packages/0x.js/CHANGELOG.md @@ -5,6 +5,15 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.0.0 - _October 18, 2018_ + + * Add support for `eth_signTypedData`. (#1102) + * Added `MetamaskSubprovider` to handle inconsistencies in Metamask's signing JSON RPC endpoints. (#1102) + * Removed `SignerType` (including `SignerType.Metamask`). Please use the `MetamaskSubprovider` to wrap `web3.currentProvider`. (#1102) + * Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers (#1105) + * Make web3-provider-engine types a 'dependency' so it's available to users of the library (#1105) + * Export new `AssetData` type from types (#1131) + ## v1.0.8 - _October 4, 2018_ * Dependencies updated @@ -49,7 +58,7 @@ CHANGELOG * Re-organize the exported interface of 0x.js. Remove the `ZeroEx` class, and instead export the same exports as `0x.js`'s sub-packages: `@0xproject/contract-wrappers`, `@0xproject/order-utils` and `@0xproject/order-watcher` (#963) -## v1.0.1-rc.3 - _August 13, 2018_ +## v1.0.1-rc.3 - _August 14, 2018_ * Dependencies updated * Update ecSignOrderHashAsync to return the signature as a string for immediate use in contracts (#914) diff --git a/packages/0x.js/README.md b/packages/0x.js/README.md index 329037324..5b7a2308c 100644 --- a/packages/0x.js/README.md +++ b/packages/0x.js/README.md @@ -33,7 +33,7 @@ If your project is in [TypeScript](https://www.typescriptlang.org/), add the fol ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json index c439c8af3..56999d3e5 100644 --- a/packages/0x.js/package.json +++ b/packages/0x.js/package.json @@ -1,6 +1,6 @@ { "name": "0x.js", - "version": "1.0.8", + "version": "2.0.0", "engines": { "node": ">=6.12" }, @@ -42,13 +42,12 @@ }, "license": "Apache-2.0", "devDependencies": { - "@0xproject/contract-addresses": "^1.0.0", - "@0xproject/abi-gen": "^1.0.13", - "@0xproject/abi-gen-wrappers": "^1.0.0", - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/migrations": "^1.0.14", - "@0xproject/monorepo-scripts": "^1.0.11", - "@0xproject/tslint-config": "^1.0.8", + "@0x/abi-gen": "^1.0.14", + "@0x/abi-gen-wrappers": "^1.0.1", + "@0x/contract-addresses": "^1.0.1", + "@0x/dev-utils": "^1.0.13", + "@0x/migrations": "^2.0.0", + "@0x/tslint-config": "^1.0.9", "@types/lodash": "4.14.104", "@types/mocha": "^2.2.42", "@types/node": "*", @@ -74,18 +73,18 @@ "webpack": "^4.20.2" }, "dependencies": { - "@0xproject/assert": "^1.0.13", - "@0xproject/base-contract": "^3.0.1", - "@0xproject/contract-wrappers": "^2.0.2", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/order-watcher": "^2.1.1", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/assert": "^1.0.14", + "@0x/base-contract": "^3.0.2", + "@0x/contract-wrappers": "^3.0.0", + "@0x/order-utils": "^2.0.0", + "@0x/order-watcher": "^2.2.0", + "@0x/subproviders": "^2.1.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@types/web3-provider-engine": "^14.0.0", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethers": "~4.0.4", "lodash": "^4.17.5", "web3-provider-engine": "14.0.6" diff --git a/packages/0x.js/src/index.ts b/packages/0x.js/src/index.ts index 2fcfb5ce7..2df360b96 100644 --- a/packages/0x.js/src/index.ts +++ b/packages/0x.js/src/index.ts @@ -1,6 +1,6 @@ -export { ContractAddresses } from '@0xproject/contract-addresses'; +export { ContractAddresses } from '@0x/contract-addresses'; -export { assetDataUtils, signatureUtils, generatePseudoRandomSalt, orderHashUtils } from '@0xproject/order-utils'; +export { assetDataUtils, signatureUtils, generatePseudoRandomSalt, orderHashUtils } from '@0x/order-utils'; export { ContractWrappers, @@ -27,7 +27,7 @@ export { OrderAndTraderInfo, TraderInfo, ValidateOrderFillableOpts, -} from '@0xproject/contract-wrappers'; +} from '@0x/contract-wrappers'; export { WETH9Events, @@ -52,9 +52,9 @@ export { ExchangeCancelEventArgs, ExchangeEventArgs, ExchangeEvents, -} from '@0xproject/abi-gen-wrappers'; +} from '@0x/abi-gen-wrappers'; -export { OrderWatcher, OnOrderStateChangeCallback, OrderWatcherConfig } from '@0xproject/order-watcher'; +export { OrderWatcher, OnOrderStateChangeCallback, OrderWatcherConfig } from '@0x/order-watcher'; export import Web3ProviderEngine = require('web3-provider-engine'); @@ -64,11 +64,11 @@ export { JSONRPCRequestPayloadWithMethod, ErrorCallback, MetamaskSubprovider, -} from '@0xproject/subproviders'; +} from '@0x/subproviders'; -export { AbiDecoder } from '@0xproject/utils'; +export { AbiDecoder } from '@0x/utils'; -export { BigNumber } from '@0xproject/utils'; +export { BigNumber } from '@0x/utils'; export { ExchangeContractErrs, @@ -85,7 +85,7 @@ export { SignatureType, OrderRelevantState, Stats, -} from '@0xproject/types'; +} from '@0x/types'; export { BlockParamLiteral, diff --git a/packages/0x.js/tslint.json b/packages/0x.js/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/0x.js/tslint.json +++ b/packages/0x.js/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/abi-gen-wrappers/CHANGELOG.json b/packages/abi-gen-wrappers/CHANGELOG.json index d91ad0b36..211d79d26 100644 --- a/packages/abi-gen-wrappers/CHANGELOG.json +++ b/packages/abi-gen-wrappers/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.0.1", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "1.0.0", "changes": [ { diff --git a/packages/abi-gen-wrappers/CHANGELOG.md b/packages/abi-gen-wrappers/CHANGELOG.md new file mode 100644 index 000000000..df72b112c --- /dev/null +++ b/packages/abi-gen-wrappers/CHANGELOG.md @@ -0,0 +1,14 @@ +<!-- +changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. +Edit the package's CHANGELOG.json file only. +--> + +CHANGELOG + +## v1.0.1 - _October 18, 2018_ + + * Dependencies updated + +## v1.0.0 - _Invalid date_ + + * Initial release (#1105) diff --git a/packages/abi-gen-wrappers/README.md b/packages/abi-gen-wrappers/README.md index f904f9af8..bcf58ae06 100644 --- a/packages/abi-gen-wrappers/README.md +++ b/packages/abi-gen-wrappers/README.md @@ -1,29 +1,29 @@ -## @0xproject/abi-gen-wrappers +## @0x/abi-gen-wrappers -Low-level 0x smart contract wrappers generated using @0xproject/abi-gen. These +Low-level 0x smart contract wrappers generated using @0x/abi-gen. These low-level wrappers are imported by other packages in the 0x monorepo and application developers are not expected to import this package directly. You may also be interested in the -[@0xproject/contract-wrappers](../contract-wrappers/README.md) package which +[@0x/contract-wrappers](../contract-wrappers/README.md) package which includes some higher-level features. ## Installation ```bash -yarn add @0xproject/abi-gen-wrappers +yarn add @0x/abi-gen-wrappers ``` **Import** ```typescript -import * as wrappers from '@0xproject/abi-gen-wrappers'; +import * as wrappers from '@0x/abi-gen-wrappers'; ``` or ```javascript -var wrappers = require('@0xproject/abi-gen-wrappers'); +var wrappers = require('@0x/abi-gen-wrappers'); ``` ## Contributing @@ -51,7 +51,7 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/abi-gen-wrappers yarn build +PKG=@0x/abi-gen-wrappers yarn build ``` ### Clean diff --git a/packages/abi-gen-wrappers/package.json b/packages/abi-gen-wrappers/package.json index a660d3015..313cc339d 100644 --- a/packages/abi-gen-wrappers/package.json +++ b/packages/abi-gen-wrappers/package.json @@ -1,10 +1,10 @@ { - "name": "@0xproject/abi-gen-wrappers", - "version": "1.0.0", + "name": "@0x/abi-gen-wrappers", + "version": "1.0.1", "engines": { "node": ">=6.12" }, - "description": "Low-level 0x smart contract wrappers generated using @0xproject/abi-gen", + "description": "Low-level 0x smart contract wrappers generated using @0x/abi-gen", "main": "lib/src/index.js", "directories": { "test": "test" @@ -12,6 +12,7 @@ "scripts": { "build": "yarn pre_build && tsc -b", "build:ci": "yarn build", + "lint": "tslint --project .", "pre_build": "yarn generate_contract_wrappers", "clean": "shx rm -rf lib wrappers", "generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated-wrappers --backend ethers" @@ -29,11 +30,17 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen-wrappers/README.md", "devDependencies": { - "@0xproject/abi-gen": "^1.0.12", + "@0x/abi-gen": "^1.0.14", + "@0x/tslint-config": "^1.0.9", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", + "ethereum-types": "^1.1.1", + "ethers": "~4.0.4", + "lodash": "^4.17.5", "shx": "^0.2.2" }, "dependencies": { - "@0xproject/base-contract": "^3.0.1" + "@0x/base-contract": "^3.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts b/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts index 464f80305..8ca70e026 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts index f8ba30cb1..1efeeed0a 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts index ec56448fc..cc5f9679f 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts index 0130faec5..ab207b38e 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts index 5a51561d7..8ee563b7e 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts index 97c9ed0bc..691c55578 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts index 0e25c97b8..d1a2d5670 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts b/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts index 869ad6f10..ffd498055 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts b/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts index afcf90234..80bbc52c7 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts b/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts index ff5160680..203a66b6d 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts b/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts index a9a56ad14..99809a049 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts b/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts index 6be61656b..38233af3f 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts b/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts index b65cf9e9e..86d1031db 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts index 818509972..98079e77b 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/abi-gen-wrappers/tslint.json b/packages/abi-gen-wrappers/tslint.json new file mode 100644 index 000000000..dd9053357 --- /dev/null +++ b/packages/abi-gen-wrappers/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": ["@0x/tslint-config"] +} diff --git a/packages/abi-gen/CHANGELOG.json b/packages/abi-gen/CHANGELOG.json index d5e0f9469..4bec24183 100644 --- a/packages/abi-gen/CHANGELOG.json +++ b/packages/abi-gen/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.0.14", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "1.0.13", "changes": [ { diff --git a/packages/abi-gen/CHANGELOG.md b/packages/abi-gen/CHANGELOG.md index ed955a051..61c4d8487 100644 --- a/packages/abi-gen/CHANGELOG.md +++ b/packages/abi-gen/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.14 - _October 18, 2018_ + + * Dependencies updated + ## v1.0.13 - _October 4, 2018_ * Dependencies updated @@ -37,7 +41,7 @@ CHANGELOG * Dependencies updated -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Dependencies updated diff --git a/packages/abi-gen/README.md b/packages/abi-gen/README.md index b6dd37cd1..20b9d4f30 100644 --- a/packages/abi-gen/README.md +++ b/packages/abi-gen/README.md @@ -8,7 +8,7 @@ You can write your custom handlebars templates which will allow you to seamlessl ## Installation -`yarn add -g @0xproject/abi-gen` +`yarn add -g @0x/abi-gen` ## Usage @@ -82,13 +82,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/abi-gen yarn build +PKG=@0x/abi-gen yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/abi-gen yarn watch +PKG=@0x/abi-gen yarn watch ``` ### Clean diff --git a/packages/abi-gen/package.json b/packages/abi-gen/package.json index bd8c2e749..f32bb3a31 100644 --- a/packages/abi-gen/package.json +++ b/packages/abi-gen/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/abi-gen", - "version": "1.0.13", + "name": "@0x/abi-gen", + "version": "1.0.14", "engines": { "node": ">=6.12" }, @@ -31,10 +31,10 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen/README.md", "dependencies": { - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", "chalk": "^2.3.0", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "glob": "^7.1.2", "handlebars": "^4.0.11", "lodash": "^4.17.5", @@ -45,7 +45,7 @@ "yargs": "^10.0.3" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/glob": "5.0.35", "@types/handlebars": "^4.0.36", "@types/mkdirp": "^0.5.1", diff --git a/packages/abi-gen/src/index.ts b/packages/abi-gen/src/index.ts index f5283b97a..5bad920ca 100644 --- a/packages/abi-gen/src/index.ts +++ b/packages/abi-gen/src/index.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { abiUtils, logUtils } from '@0xproject/utils'; +import { abiUtils, logUtils } from '@0x/utils'; import chalk from 'chalk'; import { AbiDefinition, ConstructorAbi, EventAbi, MethodAbi } from 'ethereum-types'; import { sync as globSync } from 'glob'; diff --git a/packages/abi-gen/tslint.json b/packages/abi-gen/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/abi-gen/tslint.json +++ b/packages/abi-gen/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/assert/CHANGELOG.json b/packages/assert/CHANGELOG.json index ec84f099e..f5a77103b 100644 --- a/packages/assert/CHANGELOG.json +++ b/packages/assert/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.0.14", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "1.0.13", "changes": [ { diff --git a/packages/assert/CHANGELOG.md b/packages/assert/CHANGELOG.md index b9f097c4e..78b5da851 100644 --- a/packages/assert/CHANGELOG.md +++ b/packages/assert/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.14 - _October 18, 2018_ + + * Dependencies updated + ## v1.0.13 - _October 4, 2018_ * Dependencies updated @@ -37,7 +41,7 @@ CHANGELOG * Dependencies updated -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Dependencies updated diff --git a/packages/assert/README.md b/packages/assert/README.md index 1f2139d47..647586f15 100644 --- a/packages/assert/README.md +++ b/packages/assert/README.md @@ -1,17 +1,17 @@ -## @0xproject/assert +## @0x/assert Standard type and schema assertions to be used across all 0x projects and packages ## Installation ```bash -yarn add @0xproject/assert +yarn add @0x/assert ``` ## Usage ```typescript -import { assert } from '@0xproject/assert'; +import { assert } from '@0x/assert'; assert.isValidBaseUnitAmount('baseUnitAmount', baseUnitAmount); ``` @@ -20,7 +20,7 @@ If your project is in [TypeScript](https://www.typescriptlang.org/), add the fol ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -49,13 +49,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/assert yarn build +PKG=@0x/assert yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/assert yarn watch +PKG=@0x/assert yarn watch ``` ### Clean diff --git a/packages/assert/package.json b/packages/assert/package.json index 3cd09e307..37af8979d 100644 --- a/packages/assert/package.json +++ b/packages/assert/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/assert", - "version": "1.0.13", + "name": "@0x/assert", + "version": "1.0.14", "engines": { "node": ">=6.12" }, @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/assert/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/lodash": "4.14.104", "@types/mocha": "^2.2.42", "@types/valid-url": "^1.0.2", @@ -44,9 +44,9 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", + "@0x/json-schemas": "^2.0.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", "lodash": "^4.17.5", "valid-url": "^1.0.9" }, diff --git a/packages/assert/src/index.ts b/packages/assert/src/index.ts index ccf2c9ad8..2d28d51e1 100644 --- a/packages/assert/src/index.ts +++ b/packages/assert/src/index.ts @@ -1,5 +1,5 @@ -import { Schema, SchemaValidator } from '@0xproject/json-schemas'; -import { addressUtils, BigNumber } from '@0xproject/utils'; +import { Schema, SchemaValidator } from '@0x/json-schemas'; +import { addressUtils, BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as validUrl from 'valid-url'; diff --git a/packages/assert/test/assert_test.ts b/packages/assert/test/assert_test.ts index cbbfe39db..9266496ac 100644 --- a/packages/assert/test/assert_test.ts +++ b/packages/assert/test/assert_test.ts @@ -1,5 +1,5 @@ -import { schemas } from '@0xproject/json-schemas'; -import { BigNumber } from '@0xproject/utils'; +import { schemas } from '@0x/json-schemas'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as dirtyChai from 'dirty-chai'; import 'mocha'; diff --git a/packages/assert/tslint.json b/packages/assert/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/assert/tslint.json +++ b/packages/assert/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/asset-buyer/CHANGELOG.json b/packages/asset-buyer/CHANGELOG.json index e55661235..7ebcd8c2f 100644 --- a/packages/asset-buyer/CHANGELOG.json +++ b/packages/asset-buyer/CHANGELOG.json @@ -25,8 +25,13 @@ { "note": "Add missing types to public interface", "pr": 1139 + }, + { + "note": "Throw `SignatureRequestDenied` and `TransactionValueTooLow` errors when executing buy", + "pr": 1147 } - ] + ], + "timestamp": 1539871071 }, { "version": "2.0.0", diff --git a/packages/asset-buyer/CHANGELOG.md b/packages/asset-buyer/CHANGELOG.md index 65d190a2d..8845e7041 100644 --- a/packages/asset-buyer/CHANGELOG.md +++ b/packages/asset-buyer/CHANGELOG.md @@ -5,6 +5,15 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.1.0 - _October 18, 2018_ + + * Add `gasLimit` and `gasPrice` as optional properties on `BuyQuoteExecutionOpts` + * Export `BuyQuoteInfo` type (#1131) + * Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers (#1105) + * Add `gasLimit` and `gasPrice` as optional properties on `BuyQuoteExecutionOpts` (#1116) + * Add `docs:json` command to package.json (#1139) + * Add missing types to public interface (#1139) + ## v2.0.0 - _October 4, 2018_ * Expand AssetBuyer to work with multiple assets at once (#1086) diff --git a/packages/asset-buyer/README.md b/packages/asset-buyer/README.md index 81c7e1e85..383a3836a 100644 --- a/packages/asset-buyer/README.md +++ b/packages/asset-buyer/README.md @@ -1,4 +1,4 @@ -## @0xproject/asset-buyer +## @0x/asset-buyer **Warning: In Beta, has not been extensively tested.** @@ -9,26 +9,26 @@ In its more advanced and useful form, it integrates with the [Standard Relayer A ## Installation ```bash -yarn add @0xproject/asset-buyer +yarn add @0x/asset-buyer ``` **Import** ```typescript -import { AssetBuyer } from '@0xproject/asset-buyer'; +import { AssetBuyer } from '@0x/asset-buyer'; ``` or ```javascript -var AssetBuyer = require('@0xproject/asset-buyer').AssetBuyer; +var AssetBuyer = require('@0x/asset-buyer').AssetBuyer; ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -57,13 +57,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/asset-buyer yarn build +PKG=@0x/asset-buyer yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/asset-buyer yarn watch +PKG=@0x/asset-buyer yarn watch ``` ### Clean diff --git a/packages/asset-buyer/package.json b/packages/asset-buyer/package.json index 850fce873..e4b4d19c0 100644 --- a/packages/asset-buyer/package.json +++ b/packages/asset-buyer/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/asset-buyer", - "version": "2.0.0", + "name": "@0x/asset-buyer", + "version": "2.1.0", "engines": { "node": ">=6.12" }, @@ -36,21 +36,21 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/asset-buyer/README.md", "dependencies": { - "@0xproject/assert": "^1.0.13", - "@0xproject/connect": "^3.0.1", - "@0xproject/contract-wrappers": "^2.0.2", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", - "ethereum-types": "^1.0.11", + "@0x/assert": "^1.0.14", + "@0x/connect": "^3.0.2", + "@0x/contract-wrappers": "^3.0.0", + "@0x/json-schemas": "^2.0.0", + "@0x/order-utils": "^2.0.0", + "@0x/subproviders": "^2.1.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", + "ethereum-types": "^1.1.1", "lodash": "^4.17.10" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/lodash": "^4.14.116", "@types/mocha": "^2.2.42", "@types/node": "*", diff --git a/packages/asset-buyer/src/asset_buyer.ts b/packages/asset-buyer/src/asset_buyer.ts index 4739e5a29..74f3cb471 100644 --- a/packages/asset-buyer/src/asset_buyer.ts +++ b/packages/asset-buyer/src/asset_buyer.ts @@ -1,9 +1,9 @@ -import { ContractWrappers } from '@0xproject/contract-wrappers'; -import { schemas } from '@0xproject/json-schemas'; -import { SignedOrder } from '@0xproject/order-utils'; -import { ObjectMap } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ContractWrappers, ContractWrappersError, ForwarderWrapperError } from '@0x/contract-wrappers'; +import { schemas } from '@0x/json-schemas'; +import { SignedOrder } from '@0x/order-utils'; +import { ObjectMap } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; @@ -135,9 +135,14 @@ export class AssetBuyer { assert.isBoolean('shouldForceOrderRefresh', shouldForceOrderRefresh); assert.isNumber('slippagePercentage', slippagePercentage); const zrxTokenAssetData = this._getZrxTokenAssetDataOrThrow(); + const isMakerAssetZrxToken = assetData === zrxTokenAssetData; + // get the relevant orders for the makerAsset and fees + // if the requested assetData is ZRX, don't get the fee info const [ordersAndFillableAmounts, feeOrdersAndFillableAmounts] = await Promise.all([ this._getOrdersAndFillableAmountsAsync(assetData, shouldForceOrderRefresh), - this._getOrdersAndFillableAmountsAsync(zrxTokenAssetData, shouldForceOrderRefresh), + isMakerAssetZrxToken + ? Promise.resolve(constants.EMPTY_ORDERS_AND_FILLABLE_AMOUNTS) + : this._getOrdersAndFillableAmountsAsync(zrxTokenAssetData, shouldForceOrderRefresh), shouldForceOrderRefresh, ]); if (ordersAndFillableAmounts.orders.length === 0) { @@ -149,6 +154,7 @@ export class AssetBuyer { assetBuyAmount, feePercentage, slippagePercentage, + isMakerAssetZrxToken, ); return buyQuote; } @@ -210,21 +216,32 @@ export class AssetBuyer { throw new Error(AssetBuyerError.NoAddressAvailable); } } - // if no ethAmount is provided, default to the worst ethAmount from buyQuote - const txHash = await this._contractWrappers.forwarder.marketBuyOrdersWithEthAsync( - orders, - assetBuyAmount, - finalTakerAddress, - ethAmount || worstCaseQuoteInfo.totalEthAmount, - feeOrders, - feePercentage, - feeRecipient, - { - gasLimit, - gasPrice, - }, - ); - return txHash; + try { + // if no ethAmount is provided, default to the worst ethAmount from buyQuote + const txHash = await this._contractWrappers.forwarder.marketBuyOrdersWithEthAsync( + orders, + assetBuyAmount, + finalTakerAddress, + ethAmount || worstCaseQuoteInfo.totalEthAmount, + feeOrders, + feePercentage, + feeRecipient, + { + gasLimit, + gasPrice, + shouldValidate: true, + }, + ); + return txHash; + } catch (err) { + if (_.includes(err.message, ContractWrappersError.SignatureRequestDenied)) { + throw new Error(AssetBuyerError.SignatureRequestDenied); + } else if (_.includes(err.message, ForwarderWrapperError.CompleteFillFailed)) { + throw new Error(AssetBuyerError.TransactionValueTooLow); + } else { + throw err; + } + } } /** * Grab orders from the map, if there is a miss or it is time to refresh, fetch and process the orders diff --git a/packages/asset-buyer/src/constants.ts b/packages/asset-buyer/src/constants.ts index e095dee06..c912253bd 100644 --- a/packages/asset-buyer/src/constants.ts +++ b/packages/asset-buyer/src/constants.ts @@ -1,6 +1,7 @@ -import { BigNumber } from '@0xproject/utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; -import { AssetBuyerOpts, BuyQuoteExecutionOpts, BuyQuoteRequestOpts } from './types'; +import { AssetBuyerOpts, BuyQuoteExecutionOpts, BuyQuoteRequestOpts, OrdersAndFillableAmounts } from './types'; const NULL_ADDRESS = '0x0000000000000000000000000000000000000000'; const MAINNET_NETWORK_ID = 1; @@ -22,6 +23,11 @@ const DEFAULT_BUY_QUOTE_EXECUTION_OPTS: BuyQuoteExecutionOpts = { feeRecipient: NULL_ADDRESS, }; +const EMPTY_ORDERS_AND_FILLABLE_AMOUNTS: OrdersAndFillableAmounts = { + orders: [] as SignedOrder[], + remainingFillableMakerAssetAmounts: [] as BigNumber[], +}; + export const constants = { ZERO_AMOUNT: new BigNumber(0), NULL_ADDRESS, @@ -31,4 +37,5 @@ export const constants = { DEFAULT_BUY_QUOTE_EXECUTION_OPTS, DEFAULT_BUY_QUOTE_REQUEST_OPTS, MAX_PER_PAGE: 10000, + EMPTY_ORDERS_AND_FILLABLE_AMOUNTS, }; diff --git a/packages/asset-buyer/src/index.ts b/packages/asset-buyer/src/index.ts index 9ac3c0b8a..8418edb42 100644 --- a/packages/asset-buyer/src/index.ts +++ b/packages/asset-buyer/src/index.ts @@ -5,8 +5,8 @@ export { JSONRPCErrorCallback, Provider, } from 'ethereum-types'; -export { SignedOrder } from '@0xproject/types'; -export { BigNumber } from '@0xproject/utils'; +export { SignedOrder } from '@0x/types'; +export { BigNumber } from '@0x/utils'; export { AssetBuyer } from './asset_buyer'; export { BasicOrderProvider } from './order_providers/basic_order_provider'; diff --git a/packages/asset-buyer/src/order_providers/basic_order_provider.ts b/packages/asset-buyer/src/order_providers/basic_order_provider.ts index 9bb2d90ac..68406f19b 100644 --- a/packages/asset-buyer/src/order_providers/basic_order_provider.ts +++ b/packages/asset-buyer/src/order_providers/basic_order_provider.ts @@ -1,5 +1,5 @@ -import { schemas } from '@0xproject/json-schemas'; -import { SignedOrder } from '@0xproject/types'; +import { schemas } from '@0x/json-schemas'; +import { SignedOrder } from '@0x/types'; import * as _ from 'lodash'; import { OrderProvider, OrderProviderRequest, OrderProviderResponse } from '../types'; diff --git a/packages/asset-buyer/src/order_providers/standard_relayer_api_order_provider.ts b/packages/asset-buyer/src/order_providers/standard_relayer_api_order_provider.ts index 31942c25b..41fd1fb30 100644 --- a/packages/asset-buyer/src/order_providers/standard_relayer_api_order_provider.ts +++ b/packages/asset-buyer/src/order_providers/standard_relayer_api_order_provider.ts @@ -1,5 +1,5 @@ -import { HttpClient } from '@0xproject/connect'; -import { APIOrder, OrderbookResponse } from '@0xproject/types'; +import { HttpClient } from '@0x/connect'; +import { APIOrder, OrderbookResponse } from '@0x/types'; import * as _ from 'lodash'; import { @@ -30,7 +30,7 @@ export class StandardRelayerAPIOrderProvider implements OrderProvider { 'remainingTakerAssetAmount', order.takerAssetAmount, ); - const remainingFillableMakerAssetAmount = orderUtils.calculateRemainingMakerAssetAmount( + const remainingFillableMakerAssetAmount = orderUtils.getRemainingMakerAmount( order, remainingFillableTakerAssetAmount, ); diff --git a/packages/asset-buyer/src/types.ts b/packages/asset-buyer/src/types.ts index 6218f4ba4..f15e7e934 100644 --- a/packages/asset-buyer/src/types.ts +++ b/packages/asset-buyer/src/types.ts @@ -1,5 +1,5 @@ -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; /** * makerAssetData: The assetData representing the desired makerAsset. @@ -112,6 +112,8 @@ export enum AssetBuyerError { NoAddressAvailable = 'NO_ADDRESS_AVAILABLE', InvalidOrderProviderResponse = 'INVALID_ORDER_PROVIDER_RESPONSE', AssetUnavailable = 'ASSET_UNAVAILABLE', + SignatureRequestDenied = 'SIGNATURE_REQUEST_DENIED', + TransactionValueTooLow = 'TRANSACTION_VALUE_TOO_LOW', } export interface OrdersAndFillableAmounts { diff --git a/packages/asset-buyer/src/utils/assert.ts b/packages/asset-buyer/src/utils/assert.ts index d43b71fee..e8cb7f763 100644 --- a/packages/asset-buyer/src/utils/assert.ts +++ b/packages/asset-buyer/src/utils/assert.ts @@ -1,6 +1,6 @@ -import { assert as sharedAssert } from '@0xproject/assert'; -import { schemas } from '@0xproject/json-schemas'; -import { SignedOrder } from '@0xproject/types'; +import { assert as sharedAssert } from '@0x/assert'; +import { schemas } from '@0x/json-schemas'; +import { SignedOrder } from '@0x/types'; import * as _ from 'lodash'; import { BuyQuote, BuyQuoteInfo, OrderProvider, OrderProviderRequest } from '../types'; diff --git a/packages/asset-buyer/src/utils/asset_data_utils.ts b/packages/asset-buyer/src/utils/asset_data_utils.ts index f54462a23..70f646902 100644 --- a/packages/asset-buyer/src/utils/asset_data_utils.ts +++ b/packages/asset-buyer/src/utils/asset_data_utils.ts @@ -1,5 +1,5 @@ -import { ContractWrappers } from '@0xproject/contract-wrappers'; -import { assetDataUtils as sharedAssetDataUtils } from '@0xproject/order-utils'; +import { ContractWrappers } from '@0x/contract-wrappers'; +import { assetDataUtils as sharedAssetDataUtils } from '@0x/order-utils'; import * as _ from 'lodash'; export const assetDataUtils = { diff --git a/packages/asset-buyer/src/utils/buy_quote_calculator.ts b/packages/asset-buyer/src/utils/buy_quote_calculator.ts index a1d334eef..f94ab3fa4 100644 --- a/packages/asset-buyer/src/utils/buy_quote_calculator.ts +++ b/packages/asset-buyer/src/utils/buy_quote_calculator.ts @@ -1,10 +1,12 @@ -import { marketUtils, rateUtils } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; +import { marketUtils, SignedOrder } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import { constants } from '../constants'; import { AssetBuyerError, BuyQuote, BuyQuoteInfo, OrdersAndFillableAmounts } from '../types'; +import { orderUtils } from './order_utils'; + // Calculates a buy quote for orders that have WETH as the takerAsset export const buyQuoteCalculator = { calculate( @@ -13,6 +15,7 @@ export const buyQuoteCalculator = { assetBuyAmount: BigNumber, feePercentage: number, slippagePercentage: number, + isMakerAssetZrxToken: boolean, ): BuyQuote { const orders = ordersAndFillableAmounts.orders; const remainingFillableMakerAssetAmounts = ordersAndFillableAmounts.remainingFillableMakerAssetAmounts; @@ -32,22 +35,31 @@ export const buyQuoteCalculator = { if (remainingFillAmount.gt(constants.ZERO_AMOUNT)) { throw new Error(AssetBuyerError.InsufficientAssetLiquidity); } + // if we are not buying ZRX: // given the orders calculated above, find the fee-orders that cover the desired assetBuyAmount (with slippage) // TODO(bmillman): optimization // update this logic to find the minimum amount of feeOrders to cover the worst case as opposed to // finding order that cover all fees, this will help with estimating ETH and minimizing gas usage - const { - resultFeeOrders, - remainingFeeAmount, - feeOrdersRemainingFillableMakerAssetAmounts, - } = marketUtils.findFeeOrdersThatCoverFeesForTargetOrders(resultOrders, feeOrders, { - remainingFillableMakerAssetAmounts: ordersRemainingFillableMakerAssetAmounts, - remainingFillableFeeAmounts, - }); - // if we do not have enough feeOrders to cover the fees, throw - if (remainingFeeAmount.gt(constants.ZERO_AMOUNT)) { - throw new Error(AssetBuyerError.InsufficientZrxLiquidity); + let resultFeeOrders = [] as SignedOrder[]; + let feeOrdersRemainingFillableMakerAssetAmounts = [] as BigNumber[]; + if (!isMakerAssetZrxToken) { + const feeOrdersAndRemainingFeeAmount = marketUtils.findFeeOrdersThatCoverFeesForTargetOrders( + resultOrders, + feeOrders, + { + remainingFillableMakerAssetAmounts: ordersRemainingFillableMakerAssetAmounts, + remainingFillableFeeAmounts, + }, + ); + // if we do not have enough feeOrders to cover the fees, throw + if (feeOrdersAndRemainingFeeAmount.remainingFeeAmount.gt(constants.ZERO_AMOUNT)) { + throw new Error(AssetBuyerError.InsufficientZrxLiquidity); + } + resultFeeOrders = feeOrdersAndRemainingFeeAmount.resultFeeOrders; + feeOrdersRemainingFillableMakerAssetAmounts = + feeOrdersAndRemainingFeeAmount.feeOrdersRemainingFillableMakerAssetAmounts; } + // assetData information for the result const assetData = orders[0].makerAssetData; // compile the resulting trimmed set of orders for makerAsset and feeOrders that are needed for assetBuyAmount @@ -64,6 +76,7 @@ export const buyQuoteCalculator = { trimmedFeeOrdersAndFillableAmounts, assetBuyAmount, feePercentage, + isMakerAssetZrxToken, ); // in order to calculate the maxRate, reverse the ordersAndFillableAmounts such that they are sorted from worst rate to best rate const worstCaseQuoteInfo = calculateQuoteInfo( @@ -71,6 +84,7 @@ export const buyQuoteCalculator = { reverseOrdersAndFillableAmounts(trimmedFeeOrdersAndFillableAmounts), assetBuyAmount, feePercentage, + isMakerAssetZrxToken, ); return { assetData, @@ -89,22 +103,30 @@ function calculateQuoteInfo( feeOrdersAndFillableAmounts: OrdersAndFillableAmounts, assetBuyAmount: BigNumber, feePercentage: number, + isMakerAssetZrxToken: boolean, ): BuyQuoteInfo { // find the total eth and zrx needed to buy assetAmount from the resultOrders from left to right - const [ethAmountToBuyAsset, zrxAmountToBuyAsset] = findEthAndZrxAmountNeededToBuyAsset( - ordersAndFillableAmounts, - assetBuyAmount, - ); - // find the total eth needed to buy fees - const ethAmountToBuyFees = findEthAmountNeededToBuyFees(feeOrdersAndFillableAmounts, zrxAmountToBuyAsset); - const affiliateFeeEthAmount = ethAmountToBuyAsset.mul(feePercentage); - const totalEthAmountWithoutAffiliateFee = ethAmountToBuyAsset.plus(ethAmountToBuyFees); - const totalEthAmount = totalEthAmountWithoutAffiliateFee.plus(affiliateFeeEthAmount); + let ethAmountToBuyAsset = constants.ZERO_AMOUNT; + let ethAmountToBuyZrx = constants.ZERO_AMOUNT; + if (isMakerAssetZrxToken) { + ethAmountToBuyAsset = findEthAmountNeededToBuyZrx(ordersAndFillableAmounts, assetBuyAmount); + } else { + // find eth and zrx amounts needed to buy + const ethAndZrxAmountToBuyAsset = findEthAndZrxAmountNeededToBuyAsset(ordersAndFillableAmounts, assetBuyAmount); + ethAmountToBuyAsset = ethAndZrxAmountToBuyAsset[0]; + const zrxAmountToBuyAsset = ethAndZrxAmountToBuyAsset[1]; + // find eth amount needed to buy zrx + ethAmountToBuyZrx = findEthAmountNeededToBuyZrx(feeOrdersAndFillableAmounts, zrxAmountToBuyAsset); + } + /// find the eth amount needed to buy the affiliate fee + const ethAmountToBuyAffiliateFee = ethAmountToBuyAsset.mul(feePercentage); + const totalEthAmountWithoutAffiliateFee = ethAmountToBuyAsset.plus(ethAmountToBuyZrx); + const ethAmountTotal = totalEthAmountWithoutAffiliateFee.plus(ethAmountToBuyAffiliateFee); // divide into the assetBuyAmount in order to find rate of makerAsset / WETH const ethPerAssetPrice = totalEthAmountWithoutAffiliateFee.div(assetBuyAmount); return { - totalEthAmount, - feeEthAmount: affiliateFeeEthAmount, + totalEthAmount: ethAmountTotal, + feeEthAmount: ethAmountToBuyAffiliateFee, ethPerAssetPrice, }; } @@ -119,29 +141,38 @@ function reverseOrdersAndFillableAmounts(ordersAndFillableAmounts: OrdersAndFill }; } -function findEthAmountNeededToBuyFees( +function findEthAmountNeededToBuyZrx( feeOrdersAndFillableAmounts: OrdersAndFillableAmounts, - feeAmount: BigNumber, + zrxBuyAmount: BigNumber, ): BigNumber { const { orders, remainingFillableMakerAssetAmounts } = feeOrdersAndFillableAmounts; const result = _.reduce( orders, (acc, order, index) => { + const { totalEthAmount, remainingZrxBuyAmount } = acc; const remainingFillableMakerAssetAmount = remainingFillableMakerAssetAmounts[index]; - const amountToFill = BigNumber.min(acc.remainingFeeAmount, remainingFillableMakerAssetAmount); - const feeAdjustedRate = rateUtils.getFeeAdjustedRateOfFeeOrder(order); - const ethAmountForThisOrder = feeAdjustedRate.mul(amountToFill); + const makerFillAmount = BigNumber.min(remainingZrxBuyAmount, remainingFillableMakerAssetAmount); + const [takerFillAmount, adjustedMakerFillAmount] = orderUtils.getTakerFillAmountForFeeOrder( + order, + makerFillAmount, + ); + const extraFeeAmount = remainingFillableMakerAssetAmount.greaterThanOrEqualTo(adjustedMakerFillAmount) + ? constants.ZERO_AMOUNT + : adjustedMakerFillAmount.sub(makerFillAmount); return { - ethAmount: acc.ethAmount.plus(ethAmountForThisOrder), - remainingFeeAmount: BigNumber.max(constants.ZERO_AMOUNT, acc.remainingFeeAmount.minus(amountToFill)), + totalEthAmount: totalEthAmount.plus(takerFillAmount), + remainingZrxBuyAmount: BigNumber.max( + constants.ZERO_AMOUNT, + remainingZrxBuyAmount.minus(makerFillAmount).plus(extraFeeAmount), + ), }; }, { - ethAmount: constants.ZERO_AMOUNT, - remainingFeeAmount: feeAmount, + totalEthAmount: constants.ZERO_AMOUNT, + remainingZrxBuyAmount: zrxBuyAmount, }, ); - return result.ethAmount; + return result.totalEthAmount; } function findEthAndZrxAmountNeededToBuyAsset( @@ -152,28 +183,25 @@ function findEthAndZrxAmountNeededToBuyAsset( const result = _.reduce( orders, (acc, order, index) => { + const { totalEthAmount, totalZrxAmount, remainingAssetBuyAmount } = acc; const remainingFillableMakerAssetAmount = remainingFillableMakerAssetAmounts[index]; - const amountToFill = BigNumber.min(acc.remainingAssetBuyAmount, remainingFillableMakerAssetAmount); - // find the amount of eth required to fill amountToFill (amountToFill / makerAssetAmount) * takerAssetAmount - const ethAmountForThisOrder = amountToFill - .mul(order.takerAssetAmount) - .dividedToIntegerBy(order.makerAssetAmount); - // find the amount of zrx required to fill fees for amountToFill (amountToFill / makerAssetAmount) * takerFee - const zrxAmountForThisOrder = amountToFill.mul(order.takerFee).dividedToIntegerBy(order.makerAssetAmount); + const makerFillAmount = BigNumber.min(acc.remainingAssetBuyAmount, remainingFillableMakerAssetAmount); + const takerFillAmount = orderUtils.getTakerFillAmount(order, makerFillAmount); + const takerFeeAmount = orderUtils.getTakerFeeAmount(order, takerFillAmount); return { - ethAmount: acc.ethAmount.plus(ethAmountForThisOrder), - zrxAmount: acc.zrxAmount.plus(zrxAmountForThisOrder), + totalEthAmount: totalEthAmount.plus(takerFillAmount), + totalZrxAmount: totalZrxAmount.plus(takerFeeAmount), remainingAssetBuyAmount: BigNumber.max( constants.ZERO_AMOUNT, - acc.remainingAssetBuyAmount.minus(amountToFill), + remainingAssetBuyAmount.minus(makerFillAmount), ), }; }, { - ethAmount: constants.ZERO_AMOUNT, - zrxAmount: constants.ZERO_AMOUNT, + totalEthAmount: constants.ZERO_AMOUNT, + totalZrxAmount: constants.ZERO_AMOUNT, remainingAssetBuyAmount: assetBuyAmount, }, ); - return [result.ethAmount, result.zrxAmount]; + return [result.totalEthAmount, result.totalZrxAmount]; } diff --git a/packages/asset-buyer/src/utils/order_provider_response_processor.ts b/packages/asset-buyer/src/utils/order_provider_response_processor.ts index 74eec162d..28f684f3c 100644 --- a/packages/asset-buyer/src/utils/order_provider_response_processor.ts +++ b/packages/asset-buyer/src/utils/order_provider_response_processor.ts @@ -1,8 +1,8 @@ -import { OrderAndTraderInfo, OrderStatus, OrderValidatorWrapper } from '@0xproject/contract-wrappers'; -import { sortingUtils } from '@0xproject/order-utils'; -import { RemainingFillableCalculator } from '@0xproject/order-utils/lib/src/remaining_fillable_calculator'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { OrderAndTraderInfo, OrderStatus, OrderValidatorWrapper } from '@0x/contract-wrappers'; +import { sortingUtils } from '@0x/order-utils'; +import { RemainingFillableCalculator } from '@0x/order-utils/lib/src/remaining_fillable_calculator'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import { constants } from '../constants'; @@ -110,10 +110,7 @@ function getValidOrdersWithRemainingFillableMakerAssetAmountsFromOnChain( traderInfo.makerZrxBalance, ]); const remainingTakerAssetAmount = order.takerAssetAmount.minus(orderInfo.orderTakerAssetFilledAmount); - const remainingMakerAssetAmount = orderUtils.calculateRemainingMakerAssetAmount( - order, - remainingTakerAssetAmount, - ); + const remainingMakerAssetAmount = orderUtils.getRemainingMakerAmount(order, remainingTakerAssetAmount); const remainingFillableCalculator = new RemainingFillableCalculator( order.makerFee, order.makerAssetAmount, diff --git a/packages/asset-buyer/src/utils/order_utils.ts b/packages/asset-buyer/src/utils/order_utils.ts index cfc13a8a1..1cc2cf95f 100644 --- a/packages/asset-buyer/src/utils/order_utils.ts +++ b/packages/asset-buyer/src/utils/order_utils.ts @@ -1,5 +1,5 @@ -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { constants } from '../constants'; @@ -12,19 +12,63 @@ export const orderUtils = { const currentUnixTimestampSec = new BigNumber(Date.now() / millisecondsInSecond).round(); return order.expirationTimeSeconds.lessThan(currentUnixTimestampSec.plus(secondsFromNow)); }, - calculateRemainingMakerAssetAmount(order: SignedOrder, remainingTakerAssetAmount: BigNumber): BigNumber { - if (remainingTakerAssetAmount.eq(0)) { - return constants.ZERO_AMOUNT; - } - return remainingTakerAssetAmount.times(order.makerAssetAmount).dividedToIntegerBy(order.takerAssetAmount); - }, - calculateRemainingTakerAssetAmount(order: SignedOrder, remainingMakerAssetAmount: BigNumber): BigNumber { - if (remainingMakerAssetAmount.eq(0)) { - return constants.ZERO_AMOUNT; - } - return remainingMakerAssetAmount.times(order.takerAssetAmount).dividedToIntegerBy(order.makerAssetAmount); - }, isOpenOrder(order: SignedOrder): boolean { return order.takerAddress === constants.NULL_ADDRESS; }, + // given a remaining amount of takerAsset, calculate how much makerAsset is available + getRemainingMakerAmount(order: SignedOrder, remainingTakerAmount: BigNumber): BigNumber { + const remainingMakerAmount = remainingTakerAmount + .times(order.makerAssetAmount) + .div(order.takerAssetAmount) + .floor(); + return remainingMakerAmount; + }, + // given a desired amount of makerAsset, calculate how much takerAsset is required to fill that amount + getTakerFillAmount(order: SignedOrder, makerFillAmount: BigNumber): BigNumber { + // Round up because exchange rate favors Maker + const takerFillAmount = makerFillAmount + .mul(order.takerAssetAmount) + .div(order.makerAssetAmount) + .ceil(); + return takerFillAmount; + }, + // given a desired amount of takerAsset to fill, calculate how much fee is required by the taker to fill that amount + getTakerFeeAmount(order: SignedOrder, takerFillAmount: BigNumber): BigNumber { + // Round down because Taker fee rate favors Taker + const takerFeeAmount = takerFillAmount + .mul(order.takerFee) + .div(order.takerAssetAmount) + .floor(); + return takerFeeAmount; + }, + // given a desired amount of takerAsset to fill, calculate how much makerAsset will be filled + getMakerFillAmount(order: SignedOrder, takerFillAmount: BigNumber): BigNumber { + // Round down because exchange rate favors Maker + const makerFillAmount = takerFillAmount + .mul(order.makerAssetAmount) + .div(order.takerAssetAmount) + .floor(); + return makerFillAmount; + }, + // given a desired amount of makerAsset, calculate how much fee is required by the maker to fill that amount + getMakerFeeAmount(order: SignedOrder, makerFillAmount: BigNumber): BigNumber { + // Round down because Maker fee rate favors Maker + const makerFeeAmount = makerFillAmount + .mul(order.makerFee) + .div(order.makerAssetAmount) + .floor(); + return makerFeeAmount; + }, + // given a desired amount of ZRX from a fee order, calculate how much takerAsset is required to fill that amount + // also calculate how much ZRX needs to be bought in order fill the desired amount + takerFee + getTakerFillAmountForFeeOrder(order: SignedOrder, makerFillAmount: BigNumber): [BigNumber, BigNumber] { + // For each unit of TakerAsset we buy (MakerAsset - TakerFee) + const adjustedTakerFillAmount = makerFillAmount + .mul(order.takerAssetAmount) + .div(order.makerAssetAmount.sub(order.takerFee)) + .ceil(); + // The amount that we buy will be greater than makerFillAmount, since we buy some amount for fees. + const adjustedMakerFillAmount = orderUtils.getMakerFillAmount(order, adjustedTakerFillAmount); + return [adjustedTakerFillAmount, adjustedMakerFillAmount]; + }, }; diff --git a/packages/asset-buyer/test/buy_quote_calculator_test.ts b/packages/asset-buyer/test/buy_quote_calculator_test.ts index fda6958cd..0ea371982 100644 --- a/packages/asset-buyer/test/buy_quote_calculator_test.ts +++ b/packages/asset-buyer/test/buy_quote_calculator_test.ts @@ -1,5 +1,5 @@ -import { orderFactory } from '@0xproject/order-utils/lib/src/order_factory'; -import { BigNumber } from '@0xproject/utils'; +import { orderFactory } from '@0x/order-utils/lib/src/order_factory'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; import 'mocha'; @@ -49,9 +49,9 @@ describe('buyQuoteCalculator', () => { remainingFillableMakerAssetAmounts: [smallFeeOrder.makerAssetAmount], }; const largeFeeOrder = orderFactory.createSignedOrderFromPartial({ - makerAssetAmount: new BigNumber(110), + makerAssetAmount: new BigNumber(113), takerAssetAmount: new BigNumber(200), - takerFee: new BigNumber(10), + takerFee: new BigNumber(11), }); allFeeOrdersAndFillableAmounts = { orders: [smallFeeOrder, largeFeeOrder], @@ -70,6 +70,7 @@ describe('buyQuoteCalculator', () => { new BigNumber(500), 0, 0, + false, ), ).to.throw(AssetBuyerError.InsufficientAssetLiquidity); }); @@ -82,6 +83,7 @@ describe('buyQuoteCalculator', () => { new BigNumber(300), 0, 0, + false, ), ).to.throw(AssetBuyerError.InsufficientZrxLiquidity); }); @@ -97,6 +99,7 @@ describe('buyQuoteCalculator', () => { assetBuyAmount, feePercentage, slippagePercentage, + false, ); // test if orders are correct expect(buyQuote.orders).to.deep.equal([ordersAndFillableAmounts.orders[0]]); @@ -134,6 +137,7 @@ describe('buyQuoteCalculator', () => { assetBuyAmount, feePercentage, slippagePercentage, + false, ); // test if orders are correct expect(buyQuote.orders).to.deep.equal(ordersAndFillableAmounts.orders); @@ -149,9 +153,9 @@ describe('buyQuoteCalculator', () => { expect(buyQuote.bestCaseQuoteInfo.feeEthAmount).to.bignumber.equal(expectedFeeEthAmount); expect(buyQuote.bestCaseQuoteInfo.totalEthAmount).to.bignumber.equal(expectedTotalEthAmount); expect(buyQuote.bestCaseQuoteInfo.ethPerAssetPrice).to.bignumber.equal(expectedEthPerAssetPrice); - // 100 eth to fill the first order + 200 eth for fees + // 100 eth to fill the first order + 208 eth for fees const expectedWorstEthAmountForAsset = new BigNumber(100); - const expectedWorstEthAmountForZrxFees = new BigNumber(200); + const expectedWorstEthAmountForZrxFees = new BigNumber(208); const expectedWorstFillEthAmount = expectedWorstEthAmountForAsset.plus(expectedWorstEthAmountForZrxFees); const expectedWorstFeeEthAmount = expectedWorstEthAmountForAsset.mul(feePercentage); const expectedWorstTotalEthAmount = expectedWorstFillEthAmount.plus(expectedWorstFeeEthAmount); diff --git a/packages/asset-buyer/tslint.json b/packages/asset-buyer/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/asset-buyer/tslint.json +++ b/packages/asset-buyer/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/base-contract/CHANGELOG.json b/packages/base-contract/CHANGELOG.json index eca1717d5..166c04408 100644 --- a/packages/base-contract/CHANGELOG.json +++ b/packages/base-contract/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "3.0.2", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "3.0.1", "changes": [ { diff --git a/packages/base-contract/CHANGELOG.md b/packages/base-contract/CHANGELOG.md index 114cac90f..2981b5ef8 100644 --- a/packages/base-contract/CHANGELOG.md +++ b/packages/base-contract/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v3.0.2 - _October 18, 2018_ + + * Dependencies updated + ## v3.0.1 - _October 4, 2018_ * Dependencies updated @@ -38,7 +42,7 @@ CHANGELOG * Dependencies updated -## v2.0.0-rc.1 - _August 13, 2018_ +## v2.0.0-rc.1 - _August 14, 2018_ * Added strict encoding/decoding checks for sendTransaction and call (#915) diff --git a/packages/base-contract/README.md b/packages/base-contract/README.md index 4f2426c2e..b6ea05b74 100644 --- a/packages/base-contract/README.md +++ b/packages/base-contract/README.md @@ -1,25 +1,25 @@ -## @0xproject/base-contract +## @0x/base-contract BaseContract to derive all auto-generated wrappers from ## Installation ```bash -yarn add @0xproject/base-contract +yarn add @0x/base-contract ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` ## Usage ```javascript -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; ``` ## Contributing @@ -47,13 +47,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/base-contract yarn build +PKG=@0x/base-contract yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/base-contract yarn watch +PKG=@0x/base-contract yarn watch ``` ### Lint diff --git a/packages/base-contract/package.json b/packages/base-contract/package.json index 3758dd1a7..676e8aab9 100644 --- a/packages/base-contract/package.json +++ b/packages/base-contract/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/base-contract", - "version": "3.0.1", + "name": "@0x/base-contract", + "version": "3.0.2", "engines": { "node": ">=6.12" }, @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/base-contract/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/lodash": "4.14.104", "chai": "^4.0.1", "make-promises-safe": "^1.1.0", @@ -40,10 +40,10 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", - "ethereum-types": "^1.0.11", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", + "ethereum-types": "^1.1.1", "ethers": "~4.0.4", "lodash": "^4.17.5" }, diff --git a/packages/base-contract/src/index.ts b/packages/base-contract/src/index.ts index 73550ffd4..fbb8478b7 100644 --- a/packages/base-contract/src/index.ts +++ b/packages/base-contract/src/index.ts @@ -1,5 +1,5 @@ -import { abiUtils, BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { abiUtils, BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { AbiDefinition, AbiType, diff --git a/packages/base-contract/test/utils_test.ts b/packages/base-contract/test/utils_test.ts index c083704f4..0608b72a2 100644 --- a/packages/base-contract/test/utils_test.ts +++ b/packages/base-contract/test/utils_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/base-contract/tslint.json b/packages/base-contract/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/base-contract/tslint.json +++ b/packages/base-contract/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/connect/CHANGELOG.json b/packages/connect/CHANGELOG.json index 04488504d..3412831d5 100644 --- a/packages/connect/CHANGELOG.json +++ b/packages/connect/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "3.0.2", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "3.0.1", "changes": [ { diff --git a/packages/connect/CHANGELOG.md b/packages/connect/CHANGELOG.md index 16e35a0d5..d20b5a5f7 100644 --- a/packages/connect/CHANGELOG.md +++ b/packages/connect/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v3.0.2 - _October 18, 2018_ + + * Dependencies updated + ## v3.0.1 - _October 4, 2018_ * Dependencies updated @@ -42,7 +46,7 @@ CHANGELOG * Updated for SRA v2 (#974) * Stopped exporting `Order` type (#924) -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Dependencies updated diff --git a/packages/connect/README.md b/packages/connect/README.md index 9d8cb9215..6d3ee66a0 100644 --- a/packages/connect/README.md +++ b/packages/connect/README.md @@ -1,18 +1,18 @@ -## @0xproject/connect +## @0x/connect This repository contains a Javascript library that makes it easy to interact with Relayers that conform to the [Standard Relayer API](https://github.com/0xProject/standard-relayer-api) ## Installation ```bash -yarn add @0xproject/connect +yarn add @0x/connect ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -46,13 +46,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/connect yarn build +PKG=@0x/connect yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/connect yarn watch +PKG=@0x/connect yarn watch ``` ### Clean diff --git a/packages/connect/package.json b/packages/connect/package.json index 591db0f83..95b1bbd7d 100644 --- a/packages/connect/package.json +++ b/packages/connect/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/connect", - "version": "3.0.1", + "name": "@0x/connect", + "version": "3.0.2", "engines": { "node": ">=6.12" }, @@ -44,12 +44,12 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md", "dependencies": { - "@0xproject/assert": "^1.0.13", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", + "@0x/assert": "^1.0.14", + "@0x/json-schemas": "^2.0.0", + "@0x/order-utils": "^2.0.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", "lodash": "^4.17.5", "query-string": "^5.0.1", "sinon": "^4.0.0", @@ -57,7 +57,7 @@ "websocket": "^1.0.25" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/fetch-mock": "^6.0.3", "@types/lodash": "4.14.104", "@types/mocha": "^2.2.42", diff --git a/packages/connect/src/http_client.ts b/packages/connect/src/http_client.ts index bbd0d2042..b6c031fa8 100644 --- a/packages/connect/src/http_client.ts +++ b/packages/connect/src/http_client.ts @@ -1,5 +1,5 @@ -import { assert } from '@0xproject/assert'; -import { schemas } from '@0xproject/json-schemas'; +import { assert } from '@0x/assert'; +import { schemas } from '@0x/json-schemas'; import { APIOrder, AssetPairsRequestOpts, @@ -14,8 +14,8 @@ import { PagedRequestOpts, RequestOpts, SignedOrder, -} from '@0xproject/types'; -import { fetchAsync } from '@0xproject/utils'; +} from '@0x/types'; +import { fetchAsync } from '@0x/utils'; import * as _ from 'lodash'; import * as queryString from 'query-string'; diff --git a/packages/connect/src/index.ts b/packages/connect/src/index.ts index 0ec5a0f68..f319d63cb 100644 --- a/packages/connect/src/index.ts +++ b/packages/connect/src/index.ts @@ -17,4 +17,4 @@ export { PaginatedCollection, RequestOpts, SignedOrder, -} from '@0xproject/types'; +} from '@0x/types'; diff --git a/packages/connect/src/types.ts b/packages/connect/src/types.ts index 4bb0ae534..08a4506ac 100644 --- a/packages/connect/src/types.ts +++ b/packages/connect/src/types.ts @@ -12,7 +12,7 @@ import { PagedRequestOpts, PaginatedCollection, SignedOrder, -} from '@0xproject/types'; +} from '@0x/types'; export interface Client { getAssetPairsAsync: ( diff --git a/packages/connect/src/utils/assert.ts b/packages/connect/src/utils/assert.ts index 4e2202d2e..de7536ffe 100644 --- a/packages/connect/src/utils/assert.ts +++ b/packages/connect/src/utils/assert.ts @@ -1,11 +1,11 @@ -import { assert as sharedAssert } from '@0xproject/assert'; +import { assert as sharedAssert } from '@0x/assert'; // HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here // tslint:disable-next-line:no-unused-variable -import { Schema, schemas } from '@0xproject/json-schemas'; +import { Schema, schemas } from '@0x/json-schemas'; // tslint:disable-next-line:no-unused-variable -import { ECSignature } from '@0xproject/types'; +import { ECSignature } from '@0x/types'; // tslint:disable-next-line:no-unused-variable -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; export const assert = { diff --git a/packages/connect/src/utils/orders_channel_message_parser.ts b/packages/connect/src/utils/orders_channel_message_parser.ts index 943d7802e..1306a74b1 100644 --- a/packages/connect/src/utils/orders_channel_message_parser.ts +++ b/packages/connect/src/utils/orders_channel_message_parser.ts @@ -1,8 +1,8 @@ -import { assert } from '@0xproject/assert'; -import { schemas } from '@0xproject/json-schemas'; +import { assert } from '@0x/assert'; +import { schemas } from '@0x/json-schemas'; import * as _ from 'lodash'; -import { OrdersChannelMessage, OrdersChannelMessageTypes } from '@0xproject/types'; +import { OrdersChannelMessage, OrdersChannelMessageTypes } from '@0x/types'; import { relayerResponseJsonParsers } from './relayer_response_json_parsers'; diff --git a/packages/connect/src/utils/relayer_response_json_parsers.ts b/packages/connect/src/utils/relayer_response_json_parsers.ts index 356e2dde6..2b1a658d1 100644 --- a/packages/connect/src/utils/relayer_response_json_parsers.ts +++ b/packages/connect/src/utils/relayer_response_json_parsers.ts @@ -1,6 +1,6 @@ -import { assert } from '@0xproject/assert'; -import { schemas } from '@0xproject/json-schemas'; -import { orderParsingUtils } from '@0xproject/order-utils'; +import { assert } from '@0x/assert'; +import { schemas } from '@0x/json-schemas'; +import { orderParsingUtils } from '@0x/order-utils'; import { APIOrder, @@ -9,7 +9,7 @@ import { OrderbookResponse, OrderConfigResponse, OrdersResponse, -} from '@0xproject/types'; +} from '@0x/types'; import { typeConverters } from './type_converters'; diff --git a/packages/connect/src/utils/type_converters.ts b/packages/connect/src/utils/type_converters.ts index 99760cf74..b262a516b 100644 --- a/packages/connect/src/utils/type_converters.ts +++ b/packages/connect/src/utils/type_converters.ts @@ -1,7 +1,7 @@ -import { orderParsingUtils } from '@0xproject/order-utils'; +import { orderParsingUtils } from '@0x/order-utils'; import * as _ from 'lodash'; -import { APIOrder } from '@0xproject/types'; +import { APIOrder } from '@0x/types'; export const typeConverters = { convertOrderbookStringFieldsToBigNumber(orderbook: any): any { diff --git a/packages/connect/src/ws_orders_channel.ts b/packages/connect/src/ws_orders_channel.ts index bf5e8508d..70a357c61 100644 --- a/packages/connect/src/ws_orders_channel.ts +++ b/packages/connect/src/ws_orders_channel.ts @@ -1,4 +1,4 @@ -import { OrdersChannelMessageTypes, OrdersChannelSubscriptionOpts } from '@0xproject/types'; +import { OrdersChannelMessageTypes, OrdersChannelSubscriptionOpts } from '@0x/types'; import * as _ from 'lodash'; import { v4 as uuid } from 'uuid'; import * as WebSocket from 'websocket'; diff --git a/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.ts b/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.ts index 27216e421..3ceeffdc8 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.ts @@ -1,6 +1,6 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; -import { AssetPairsResponse } from '@0xproject/types'; +import { AssetPairsResponse } from '@0x/types'; export const assetDataPairsResponse: AssetPairsResponse = { total: 43, diff --git a/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.ts b/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.ts index 6f544e9d3..694433128 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.ts @@ -1,4 +1,4 @@ -import { FeeRecipientsResponse } from '@0xproject/types'; +import { FeeRecipientsResponse } from '@0x/types'; export const feeRecipientsResponse: FeeRecipientsResponse = { total: 3, diff --git a/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts b/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts index c8a669b3b..3d2fbdba8 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const orderResponse = { order: { diff --git a/packages/connect/test/fixtures/standard_relayer_api/order_config.ts b/packages/connect/test/fixtures/standard_relayer_api/order_config.ts index 56a4ac550..2290c39c0 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/order_config.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/order_config.ts @@ -1,6 +1,6 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; -import { OrderConfigResponse } from '@0xproject/types'; +import { OrderConfigResponse } from '@0x/types'; export const orderConfigResponse: OrderConfigResponse = { senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', diff --git a/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts b/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts index 21d51da74..de2d4eaea 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts @@ -1,6 +1,6 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; -import { OrderbookResponse } from '@0xproject/types'; +import { OrderbookResponse } from '@0x/types'; export const orderbookResponse: OrderbookResponse = { bids: { diff --git a/packages/connect/test/fixtures/standard_relayer_api/orders.ts b/packages/connect/test/fixtures/standard_relayer_api/orders.ts index fb85990d0..ed1f588df 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/orders.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/orders.ts @@ -1,6 +1,6 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; -import { OrdersResponse } from '@0xproject/types'; +import { OrdersResponse } from '@0x/types'; export const ordersResponse: OrdersResponse = { total: 984, diff --git a/packages/connect/test/http_client_test.ts b/packages/connect/test/http_client_test.ts index e9fc9372e..f799ca849 100644 --- a/packages/connect/test/http_client_test.ts +++ b/packages/connect/test/http_client_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; import * as dirtyChai from 'dirty-chai'; diff --git a/packages/connect/tslint.json b/packages/connect/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/connect/tslint.json +++ b/packages/connect/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/contract-addresses/CHANGELOG.json b/packages/contract-addresses/CHANGELOG.json index d91ad0b36..c2b44ede8 100644 --- a/packages/contract-addresses/CHANGELOG.json +++ b/packages/contract-addresses/CHANGELOG.json @@ -1,11 +1,20 @@ [ { - "version": "1.0.0", + "version": "1.0.1", "changes": [ { "pr": 1105, "note": "Initial release" } + ], + "timestamp": 1539871071 + }, + { + "version": "1.0.0", + "changes": [ + { + "note": "Unpublished Package" + } ] } ] diff --git a/packages/contract-addresses/CHANGELOG.md b/packages/contract-addresses/CHANGELOG.md new file mode 100644 index 000000000..82c22f2e4 --- /dev/null +++ b/packages/contract-addresses/CHANGELOG.md @@ -0,0 +1,14 @@ +<!-- +changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. +Edit the package's CHANGELOG.json file only. +--> + +CHANGELOG + +## v1.0.1 - _October 18, 2018_ + + * Initial release (#1105) + +## v1.0.0 - _Invalid date_ + + * Unpublished Package diff --git a/packages/contract-addresses/README.md b/packages/contract-addresses/README.md index 6c615c422..a4040cb54 100644 --- a/packages/contract-addresses/README.md +++ b/packages/contract-addresses/README.md @@ -1,4 +1,4 @@ -## @0xproject/contract-addresses +## @0x/contract-addresses A tiny utility library for getting known deployed contract addresses for a particular network. @@ -6,20 +6,19 @@ particular network. ## Installation ```bash -yarn add @0xproject/contract-addresses +yarn add @0x/contract-addresses ``` **Import** ```typescript -import { getContractAddressesForNetworkOrThrow } from '@0xproject/contract-addresses'; +import { getContractAddressesForNetworkOrThrow } from '@0x/contract-addresses'; ``` or ```javascript -var getContractAddressesForNetworkOrThrow = require('@0xproject/contract-addresses') - .getContractAddressesForNetworkOrThrow; +var getContractAddressesForNetworkOrThrow = require('@0x/contract-addresses').getContractAddressesForNetworkOrThrow; ``` ## Contributing @@ -47,7 +46,7 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/contract-addresses yarn build +PKG=@0x/contract-addresses yarn build ``` ### Clean diff --git a/packages/contract-addresses/package.json b/packages/contract-addresses/package.json index 60642224f..3136d571b 100644 --- a/packages/contract-addresses/package.json +++ b/packages/contract-addresses/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/contract-addresses", - "version": "1.0.0", + "name": "@0x/contract-addresses", + "version": "1.0.1", "engines": { "node": ">=6.12" }, @@ -25,8 +25,8 @@ "homepage": "https://github.com/0xProject/0x-monorepo/packages/contract-addresses/README.md", "devDependencies": { "@types/lodash": "4.14.104", - "typescript": "3.0.1", - "shx": "^0.2.2" + "shx": "^0.2.2", + "typescript": "3.0.1" }, "dependencies": { "lodash": "^4.17.5" diff --git a/packages/contract-addresses/tslint.json b/packages/contract-addresses/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/contract-addresses/tslint.json +++ b/packages/contract-addresses/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/contract-artifacts/CHANGELOG.json b/packages/contract-artifacts/CHANGELOG.json index d91ad0b36..c2b44ede8 100644 --- a/packages/contract-artifacts/CHANGELOG.json +++ b/packages/contract-artifacts/CHANGELOG.json @@ -1,11 +1,20 @@ [ { - "version": "1.0.0", + "version": "1.0.1", "changes": [ { "pr": 1105, "note": "Initial release" } + ], + "timestamp": 1539871071 + }, + { + "version": "1.0.0", + "changes": [ + { + "note": "Unpublished Package" + } ] } ] diff --git a/packages/contract-artifacts/CHANGELOG.md b/packages/contract-artifacts/CHANGELOG.md new file mode 100644 index 000000000..82c22f2e4 --- /dev/null +++ b/packages/contract-artifacts/CHANGELOG.md @@ -0,0 +1,14 @@ +<!-- +changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. +Edit the package's CHANGELOG.json file only. +--> + +CHANGELOG + +## v1.0.1 - _October 18, 2018_ + + * Initial release (#1105) + +## v1.0.0 - _Invalid date_ + + * Unpublished Package diff --git a/packages/contract-artifacts/README.md b/packages/contract-artifacts/README.md index f8901266d..5a382c308 100644 --- a/packages/contract-artifacts/README.md +++ b/packages/contract-artifacts/README.md @@ -1,23 +1,23 @@ -## @0xproject/contract-artifacts +## @0x/contract-artifacts Smart contract compilation artifacts for the latest version of the 0x Protocol. ## Installation ```bash -yarn add @0xproject/contract-artifacts +yarn add @0x/contract-artifacts ``` **Import** ```typescript -import * as artifacts from '@0xproject/contract-artifacts'; +import * as artifacts from '@0x/contract-artifacts'; ``` or ```javascript -var artifacts = require('@0xproject/contract-artifacts'); +var artifacts = require('@0x/contract-artifacts'); ``` ## Contributing @@ -45,7 +45,7 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/contract-artifacts yarn build +PKG=@0x/contract-artifacts yarn build ``` ### Clean diff --git a/packages/contract-artifacts/package.json b/packages/contract-artifacts/package.json index 3e1696695..53f5d3c47 100644 --- a/packages/contract-artifacts/package.json +++ b/packages/contract-artifacts/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/contract-artifacts", - "version": "1.0.0", + "name": "@0x/contract-artifacts", + "version": "1.0.1", "engines": { "node": ">=6.12" }, @@ -24,8 +24,8 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/contract-artifacts/README.md", "devDependencies": { - "typescript": "3.0.1", - "shx": "^0.2.2" + "shx": "^0.2.2", + "typescript": "3.0.1" }, "publishConfig": { "access": "public" diff --git a/packages/contract-artifacts/tslint.json b/packages/contract-artifacts/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/contract-artifacts/tslint.json +++ b/packages/contract-artifacts/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/contract-wrappers/CHANGELOG.json b/packages/contract-wrappers/CHANGELOG.json index 9bb5e5fc5..c3d986b4a 100644 --- a/packages/contract-wrappers/CHANGELOG.json +++ b/packages/contract-wrappers/CHANGELOG.json @@ -37,8 +37,17 @@ "note": "Removed ContractNotFound errors. Checking for this error was somewhat ineffecient. Relevant methods/functions now return the default error from web3-wrapper, which we feel provides enough information.", "pr": 1105 + }, + { + "note": "Add `ForwarderWrapperError` to public interface", + "pr": 1147 + }, + { + "note": "Add `ContractWrapperError.SignatureRequestDenied` to public interface", + "pr": 1147 } - ] + ], + "timestamp": 1539871071 }, { "version": "2.0.2", diff --git a/packages/contract-wrappers/CHANGELOG.md b/packages/contract-wrappers/CHANGELOG.md index 60675ddbe..6f3005831 100644 --- a/packages/contract-wrappers/CHANGELOG.md +++ b/packages/contract-wrappers/CHANGELOG.md @@ -5,6 +5,17 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v3.0.0 - _October 18, 2018_ + + * Add optional validation to the forwarder wrapper methods + * Updated to use new modularized artifacts. (#1105) + * Top-level `ContractWrappers` class has a new optional `contractAddresses` parameter. (#1105) + * Default contract addresses are no longer stored in artifacts and are instead loaded from the `@0xproject/contract-addresses` package. (#1105) + * Most contract addresses are now defined at instantiation time and are available as properties (e.g., `exchangeWrapper.address`) instead of methods (e.g., `exchangeWrapper.getContractAddress()`). (#1105) + * Removed `setProvider` method in top-level `ContractWrapper` class and added new `unsubscribeAll` method. (#1105) + * Some properties and methods have been renamed. For example, some methods that previously could throw no longer can, and so their names have been updated accordingly. (#1105) + * Removed ContractNotFound errors. Checking for this error was somewhat ineffecient. Relevant methods/functions now return the default error from web3-wrapper, which we feel provides enough information. (#1105) + ## v2.0.2 - _October 4, 2018_ * Dependencies updated @@ -51,7 +62,7 @@ CHANGELOG * Remove superfluous exported types: `ContractEvent`, `Token`, `OrderFillRequest`, `ContractEventArgs`, `LogEvent`, `OnOrderStateChangeCallback`, `ECSignature`, `OrderStateValid`, `OrderStateInvalid`, `OrderState`, `FilterObject`, `TransactionReceipt` & `TransactionReceiptWithDecodedLogs` (#924) * Added Transaction Encoder for use with 0x Exchange executeTransaction (#975) -## v1.0.1-rc.3 - _August 13, 2018_ +## v1.0.1-rc.3 - _August 14, 2018_ * Added strict encoding/decoding checks for sendTransaction and call (#915) * Add ForwarderWrapper (#934) diff --git a/packages/contract-wrappers/README.md b/packages/contract-wrappers/README.md index 6153f798e..36f2f48fb 100644 --- a/packages/contract-wrappers/README.md +++ b/packages/contract-wrappers/README.md @@ -1,4 +1,4 @@ -## @0xproject/contract-wrappers +## @0x/contract-wrappers Smart TS wrappers for 0x smart contracts. The wrappers have simplified interfaces, perform client-side validation on transactions and throw helpful error messages. @@ -9,20 +9,20 @@ Smart TS wrappers for 0x smart contracts. The wrappers have simplified interface **Install** ```bash -npm install @0xproject/contract-wrappers --save +npm install @0x/contract-wrappers --save ``` **Import** ```javascript -import { ContractWrappers } from '@0xproject/contract-wrappers'; +import { ContractWrappers } from '@0x/contract-wrappers'; ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -51,13 +51,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/contract-wrappers yarn build +PKG=@0x/contract-wrappers yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/contract-wrappers yarn watch +PKG=@0x/contract-wrappers yarn watch ``` ```bash diff --git a/packages/contract-wrappers/package.json b/packages/contract-wrappers/package.json index ef19057cd..d427bb628 100644 --- a/packages/contract-wrappers/package.json +++ b/packages/contract-wrappers/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/contract-wrappers", - "version": "2.0.2", + "name": "@0x/contract-wrappers", + "version": "3.0.0", "description": "Smart TS wrappers for 0x smart contracts", "keywords": [ "0xproject", @@ -37,10 +37,10 @@ "node": ">=6.0.0" }, "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/migrations": "^1.0.14", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/tslint-config": "^1.0.8", + "@0x/dev-utils": "^1.0.13", + "@0x/migrations": "^2.0.0", + "@0x/subproviders": "^2.1.0", + "@0x/tslint-config": "^1.0.9", "@types/lodash": "4.14.104", "@types/mocha": "^2.2.42", "@types/node": "*", @@ -65,18 +65,18 @@ "web3-provider-engine": "14.0.6" }, "dependencies": { - "@0xproject/abi-gen-wrappers": "^1.0.0", - "@0xproject/assert": "^1.0.13", - "@0xproject/contract-addresses": "^1.0.0", - "@0xproject/contract-artifacts": "^1.0.0", - "@0xproject/fill-scenarios": "^1.0.7", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", - "ethereum-types": "^1.0.11", + "@0x/abi-gen-wrappers": "^1.0.1", + "@0x/assert": "^1.0.14", + "@0x/contract-addresses": "^1.0.1", + "@0x/contract-artifacts": "^1.0.1", + "@0x/fill-scenarios": "^1.0.8", + "@0x/json-schemas": "^2.0.0", + "@0x/order-utils": "^2.0.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", + "ethereum-types": "^1.1.1", "ethereumjs-blockstream": "6.0.0", "ethereumjs-util": "^5.1.1", "ethers": "~4.0.4", diff --git a/packages/contract-wrappers/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts b/packages/contract-wrappers/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts index 1f139f1ef..b095c8e79 100644 --- a/packages/contract-wrappers/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts +++ b/packages/contract-wrappers/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export abstract class AbstractBalanceAndProxyAllowanceLazyStore { public abstract async getBalanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber>; diff --git a/packages/contract-wrappers/src/contract_wrappers.ts b/packages/contract-wrappers/src/contract_wrappers.ts index 36381c623..0c535bd5c 100644 --- a/packages/contract-wrappers/src/contract_wrappers.ts +++ b/packages/contract-wrappers/src/contract_wrappers.ts @@ -7,8 +7,8 @@ import { Forwarder, OrderValidator, WETH9, -} from '@0xproject/contract-artifacts'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +} from '@0x/contract-artifacts'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts index e03e4188b..7b11f35bc 100644 --- a/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts @@ -1,5 +1,5 @@ -import { AbiDecoder, intervalUtils, logUtils } from '@0xproject/utils'; -import { marshaller, Web3Wrapper } from '@0xproject/web3-wrapper'; +import { AbiDecoder, intervalUtils, logUtils } from '@0x/utils'; +import { marshaller, Web3Wrapper } from '@0x/web3-wrapper'; import { BlockParamLiteral, ContractAbi, diff --git a/packages/contract-wrappers/src/contract_wrappers/erc20_proxy_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/erc20_proxy_wrapper.ts index e59b2c20b..adf8c7614 100644 --- a/packages/contract-wrappers/src/contract_wrappers/erc20_proxy_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/erc20_proxy_wrapper.ts @@ -1,7 +1,7 @@ -import { ERC20ProxyContract } from '@0xproject/abi-gen-wrappers'; -import { ERC20Proxy } from '@0xproject/contract-artifacts'; -import { AssetProxyId } from '@0xproject/types'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ERC20ProxyContract } from '@0x/abi-gen-wrappers'; +import { ERC20Proxy } from '@0x/contract-artifacts'; +import { AssetProxyId } from '@0x/types'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ContractAbi } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts index 192eaf0a7..f5fc63b42 100644 --- a/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts @@ -1,8 +1,8 @@ -import { ERC20TokenContract, ERC20TokenEventArgs, ERC20TokenEvents } from '@0xproject/abi-gen-wrappers'; -import { ERC20Token } from '@0xproject/contract-artifacts'; -import { schemas } from '@0xproject/json-schemas'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ERC20TokenContract, ERC20TokenEventArgs, ERC20TokenEvents } from '@0x/abi-gen-wrappers'; +import { ERC20Token } from '@0x/contract-artifacts'; +import { schemas } from '@0x/json-schemas'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ContractAbi, LogWithDecodedArgs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/erc721_proxy_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/erc721_proxy_wrapper.ts index adee3e3ab..9f3a6930b 100644 --- a/packages/contract-wrappers/src/contract_wrappers/erc721_proxy_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/erc721_proxy_wrapper.ts @@ -1,7 +1,7 @@ -import { ERC721ProxyContract } from '@0xproject/abi-gen-wrappers'; -import { ERC721Proxy } from '@0xproject/contract-artifacts'; -import { AssetProxyId } from '@0xproject/types'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ERC721ProxyContract } from '@0x/abi-gen-wrappers'; +import { ERC721Proxy } from '@0x/contract-artifacts'; +import { AssetProxyId } from '@0x/types'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ContractAbi } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts index d92d7087c..1c4b61c0b 100644 --- a/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts @@ -1,8 +1,8 @@ -import { ERC721TokenContract, ERC721TokenEventArgs, ERC721TokenEvents } from '@0xproject/abi-gen-wrappers'; -import { ERC721Token } from '@0xproject/contract-artifacts'; -import { schemas } from '@0xproject/json-schemas'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ERC721TokenContract, ERC721TokenEventArgs, ERC721TokenEvents } from '@0x/abi-gen-wrappers'; +import { ERC721Token } from '@0x/contract-artifacts'; +import { schemas } from '@0x/json-schemas'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ContractAbi, LogWithDecodedArgs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts index d5775208e..d4a08da86 100644 --- a/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts @@ -1,8 +1,8 @@ -import { WETH9Contract, WETH9EventArgs, WETH9Events } from '@0xproject/abi-gen-wrappers'; -import { WETH9 } from '@0xproject/contract-artifacts'; -import { schemas } from '@0xproject/json-schemas'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { WETH9Contract, WETH9EventArgs, WETH9Events } from '@0x/abi-gen-wrappers'; +import { WETH9 } from '@0x/contract-artifacts'; +import { schemas } from '@0x/json-schemas'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ContractAbi, LogWithDecodedArgs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts index 9063e0e40..907d25aa0 100644 --- a/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts @@ -1,15 +1,15 @@ -import { ExchangeContract, ExchangeEventArgs, ExchangeEvents } from '@0xproject/abi-gen-wrappers'; -import { Exchange } from '@0xproject/contract-artifacts'; -import { schemas } from '@0xproject/json-schemas'; +import { ExchangeContract, ExchangeEventArgs, ExchangeEvents } from '@0x/abi-gen-wrappers'; +import { Exchange } from '@0x/contract-artifacts'; +import { schemas } from '@0x/json-schemas'; import { assetDataUtils, BalanceAndProxyAllowanceLazyStore, ExchangeTransferSimulator, OrderValidationUtils, -} from '@0xproject/order-utils'; -import { AssetProxyId, Order, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +} from '@0x/order-utils'; +import { AssetProxyId, Order, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { BlockParamLiteral, ContractAbi, LogWithDecodedArgs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/forwarder_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/forwarder_wrapper.ts index b6fc071ea..9463a6849 100644 --- a/packages/contract-wrappers/src/contract_wrappers/forwarder_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/forwarder_wrapper.ts @@ -1,9 +1,9 @@ -import { ForwarderContract } from '@0xproject/abi-gen-wrappers'; -import { Forwarder } from '@0xproject/contract-artifacts'; -import { schemas } from '@0xproject/json-schemas'; -import { AssetProxyId, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ForwarderContract } from '@0x/abi-gen-wrappers'; +import { Forwarder } from '@0x/contract-artifacts'; +import { schemas } from '@0x/json-schemas'; +import { AssetProxyId, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ContractAbi } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/contract_wrappers/order_validator_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/order_validator_wrapper.ts index 2ae1a158b..c186e080e 100644 --- a/packages/contract-wrappers/src/contract_wrappers/order_validator_wrapper.ts +++ b/packages/contract-wrappers/src/contract_wrappers/order_validator_wrapper.ts @@ -1,9 +1,9 @@ -import { OrderValidatorContract } from '@0xproject/abi-gen-wrappers'; -import { OrderValidator } from '@0xproject/contract-artifacts'; -import { schemas } from '@0xproject/json-schemas'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { OrderValidatorContract } from '@0x/abi-gen-wrappers'; +import { OrderValidator } from '@0x/contract-artifacts'; +import { schemas } from '@0x/json-schemas'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ContractAbi } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts b/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts index 023cd5ac3..d10cffe57 100644 --- a/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts +++ b/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts @@ -1,7 +1,7 @@ // tslint:disable:no-unnecessary-type-assertion -import { AbstractBalanceAndProxyAllowanceFetcher, assetDataUtils } from '@0xproject/order-utils'; -import { AssetProxyId, ERC20AssetData, ERC721AssetData } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { AbstractBalanceAndProxyAllowanceFetcher, assetDataUtils } from '@0x/order-utils'; +import { AssetProxyId, ERC20AssetData, ERC721AssetData } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { BlockParamLiteral } from 'ethereum-types'; import { ERC20TokenWrapper } from '../contract_wrappers/erc20_token_wrapper'; diff --git a/packages/contract-wrappers/src/fetchers/order_filled_cancelled_fetcher.ts b/packages/contract-wrappers/src/fetchers/order_filled_cancelled_fetcher.ts index 7a252aed3..acf7038fa 100644 --- a/packages/contract-wrappers/src/fetchers/order_filled_cancelled_fetcher.ts +++ b/packages/contract-wrappers/src/fetchers/order_filled_cancelled_fetcher.ts @@ -1,6 +1,6 @@ // tslint:disable:no-unnecessary-type-assertion -import { AbstractOrderFilledCancelledFetcher } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; +import { AbstractOrderFilledCancelledFetcher } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; import { BlockParamLiteral } from 'ethereum-types'; import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper'; diff --git a/packages/contract-wrappers/src/index.ts b/packages/contract-wrappers/src/index.ts index f24828153..d66ff5c9c 100644 --- a/packages/contract-wrappers/src/index.ts +++ b/packages/contract-wrappers/src/index.ts @@ -1,4 +1,4 @@ -export { ContractAddresses } from '@0xproject/contract-addresses'; +export { ContractAddresses } from '@0x/contract-addresses'; export { WETH9Events, @@ -23,7 +23,7 @@ export { ExchangeCancelEventArgs, ExchangeEventArgs, ExchangeEvents, -} from '@0xproject/abi-gen-wrappers'; +} from '@0x/abi-gen-wrappers'; export { ContractWrappers } from './contract_wrappers'; export { ERC20TokenWrapper } from './contract_wrappers/erc20_token_wrapper'; @@ -39,6 +39,7 @@ export { TransactionEncoder } from './utils/transaction_encoder'; export { ContractWrappersError, + ForwarderWrapperError, IndexedFilterValues, BlockRange, ContractWrappersConfig, @@ -55,7 +56,7 @@ export { ValidateOrderFillableOpts, } from './types'; -export { Order, SignedOrder, AssetProxyId } from '@0xproject/types'; +export { Order, SignedOrder, AssetProxyId } from '@0x/types'; export { BlockParamLiteral, @@ -81,7 +82,7 @@ export { StateMutability, } from 'ethereum-types'; -export { AbstractBalanceAndProxyAllowanceFetcher, AbstractOrderFilledCancelledFetcher } from '@0xproject/order-utils'; +export { AbstractBalanceAndProxyAllowanceFetcher, AbstractOrderFilledCancelledFetcher } from '@0x/order-utils'; export { AssetBalanceAndProxyAllowanceFetcher } from './fetchers/asset_balance_and_proxy_allowance_fetcher'; export { OrderFilledCancelledFetcher } from './fetchers/order_filled_cancelled_fetcher'; diff --git a/packages/contract-wrappers/src/types.ts b/packages/contract-wrappers/src/types.ts index 895a47cc1..5a5bdd530 100644 --- a/packages/contract-wrappers/src/types.ts +++ b/packages/contract-wrappers/src/types.ts @@ -7,10 +7,10 @@ import { ExchangeEvents, WETH9EventArgs, WETH9Events, -} from '@0xproject/abi-gen-wrappers'; -import { ContractAddresses } from '@0xproject/contract-addresses'; -import { OrderState, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +} from '@0x/abi-gen-wrappers'; +import { ContractAddresses } from '@0x/contract-addresses'; +import { OrderState, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { BlockParam, ContractEventArg, DecodedLogArgs, LogEntryEvent, LogWithDecodedArgs } from 'ethereum-types'; @@ -18,6 +18,10 @@ export enum ExchangeWrapperError { AssetDataMismatch = 'ASSET_DATA_MISMATCH', } +export enum ForwarderWrapperError { + CompleteFillFailed = 'COMPLETE_FILL_FAILED', +} + export enum ContractWrappersError { ContractNotDeployedOnNetwork = 'CONTRACT_NOT_DEPLOYED_ON_NETWORK', InsufficientAllowanceForTransfer = 'INSUFFICIENT_ALLOWANCE_FOR_TRANSFER', @@ -30,6 +34,7 @@ export enum ContractWrappersError { SubscriptionAlreadyPresent = 'SUBSCRIPTION_ALREADY_PRESENT', ERC721OwnerNotFound = 'ERC_721_OWNER_NOT_FOUND', ERC721NoApproval = 'ERC_721_NO_APPROVAL', + SignatureRequestDenied = 'SIGNATURE_REQUEST_DENIED', } export enum InternalContractWrappersError { diff --git a/packages/contract-wrappers/src/utils/assert.ts b/packages/contract-wrappers/src/utils/assert.ts index 30726c546..3f02ed052 100644 --- a/packages/contract-wrappers/src/utils/assert.ts +++ b/packages/contract-wrappers/src/utils/assert.ts @@ -1,10 +1,10 @@ -import { assert as sharedAssert } from '@0xproject/assert'; +import { assert as sharedAssert } from '@0x/assert'; // HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here -import { Schema } from '@0xproject/json-schemas'; // tslint:disable-line:no-unused-variable -import { assetDataUtils, signatureUtils } from '@0xproject/order-utils'; -import { Order } from '@0xproject/types'; // tslint:disable-line:no-unused-variable -import { BigNumber } from '@0xproject/utils'; // tslint:disable-line:no-unused-variable -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Schema } from '@0x/json-schemas'; // tslint:disable-line:no-unused-variable +import { assetDataUtils, signatureUtils } from '@0x/order-utils'; +import { Order } from '@0x/types'; // tslint:disable-line:no-unused-variable +import { BigNumber } from '@0x/utils'; // tslint:disable-line:no-unused-variable +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contract-wrappers/src/utils/calldata_optimization_utils.ts b/packages/contract-wrappers/src/utils/calldata_optimization_utils.ts index 3172cf531..bee7acaa7 100644 --- a/packages/contract-wrappers/src/utils/calldata_optimization_utils.ts +++ b/packages/contract-wrappers/src/utils/calldata_optimization_utils.ts @@ -1,4 +1,4 @@ -import { SignedOrder } from '@0xproject/types'; +import { SignedOrder } from '@0x/types'; import * as _ from 'lodash'; import { constants } from './constants'; diff --git a/packages/contract-wrappers/src/utils/constants.ts b/packages/contract-wrappers/src/utils/constants.ts index 78441decf..c587ba526 100644 --- a/packages/contract-wrappers/src/utils/constants.ts +++ b/packages/contract-wrappers/src/utils/constants.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const constants = { NULL_ADDRESS: '0x0000000000000000000000000000000000000000', @@ -14,4 +14,5 @@ export const constants = { ZERO_AMOUNT: new BigNumber(0), ONE_AMOUNT: new BigNumber(1), ETHER_TOKEN_DECIMALS: 18, + USER_DENIED_SIGNATURE_PATTERN: 'User denied transaction signature', }; diff --git a/packages/contract-wrappers/src/utils/contract_addresses.ts b/packages/contract-wrappers/src/utils/contract_addresses.ts index 98967c52d..dc156e017 100644 --- a/packages/contract-wrappers/src/utils/contract_addresses.ts +++ b/packages/contract-wrappers/src/utils/contract_addresses.ts @@ -1,4 +1,4 @@ -import { ContractAddresses, getContractAddressesForNetworkOrThrow, NetworkId } from '@0xproject/contract-addresses'; +import { ContractAddresses, getContractAddressesForNetworkOrThrow, NetworkId } from '@0x/contract-addresses'; import * as _ from 'lodash'; /** diff --git a/packages/contract-wrappers/src/utils/decorators.ts b/packages/contract-wrappers/src/utils/decorators.ts index e17246015..a4207ae4c 100644 --- a/packages/contract-wrappers/src/utils/decorators.ts +++ b/packages/contract-wrappers/src/utils/decorators.ts @@ -29,6 +29,14 @@ const schemaErrorTransformer = (error: Error) => { return error; }; +const signatureRequestErrorTransformer = (error: Error) => { + if (_.includes(error.message, constants.USER_DENIED_SIGNATURE_PATTERN)) { + const errMsg = ContractWrappersError.SignatureRequestDenied; + return new Error(errMsg); + } + return error; +}; + /** * Source: https://stackoverflow.com/a/29837695/3546986 */ @@ -87,7 +95,11 @@ const syncErrorHandlerFactory = (errorTransformer: ErrorTransformer) => { }; // _.flow(f, g) = f ∘ g -const zeroExErrorTransformer = _.flow(schemaErrorTransformer, contractCallErrorTransformer); +const zeroExErrorTransformer = _.flow( + schemaErrorTransformer, + contractCallErrorTransformer, + signatureRequestErrorTransformer, +); export const decorators = { asyncZeroExErrorHandler: asyncErrorHandlerFactory(zeroExErrorTransformer), diff --git a/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts b/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts index a7c4a238f..f374d509b 100644 --- a/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts +++ b/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts @@ -1,5 +1,5 @@ -import { ExchangeContractErrs } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { ExchangeContractErrs } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { AbstractBalanceAndProxyAllowanceLazyStore } from '../abstract/abstract_balance_and_proxy_allowance_lazy_store'; import { TradeSide, TransferType } from '../types'; diff --git a/packages/contract-wrappers/src/utils/transaction_encoder.ts b/packages/contract-wrappers/src/utils/transaction_encoder.ts index d179fa07e..0cf08a8fe 100644 --- a/packages/contract-wrappers/src/utils/transaction_encoder.ts +++ b/packages/contract-wrappers/src/utils/transaction_encoder.ts @@ -1,9 +1,9 @@ -import { ExchangeContract } from '@0xproject/abi-gen-wrappers'; +import { ExchangeContract } from '@0x/abi-gen-wrappers'; -import { schemas } from '@0xproject/json-schemas'; -import { eip712Utils } from '@0xproject/order-utils'; -import { Order, SignedOrder } from '@0xproject/types'; -import { BigNumber, signTypedDataUtils } from '@0xproject/utils'; +import { schemas } from '@0x/json-schemas'; +import { eip712Utils } from '@0x/order-utils'; +import { Order, SignedOrder } from '@0x/types'; +import { BigNumber, signTypedDataUtils } from '@0x/utils'; import _ = require('lodash'); import { assert } from './assert'; diff --git a/packages/contract-wrappers/src/utils/utils.ts b/packages/contract-wrappers/src/utils/utils.ts index f7949ec34..fbacdaa28 100644 --- a/packages/contract-wrappers/src/utils/utils.ts +++ b/packages/contract-wrappers/src/utils/utils.ts @@ -1,5 +1,5 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { constants } from './constants'; diff --git a/packages/contract-wrappers/test/calldata_optimization_utils_test.ts b/packages/contract-wrappers/test/calldata_optimization_utils_test.ts index 94e55bffa..6cb8a669e 100644 --- a/packages/contract-wrappers/test/calldata_optimization_utils_test.ts +++ b/packages/contract-wrappers/test/calldata_optimization_utils_test.ts @@ -1,4 +1,4 @@ -import { orderFactory } from '@0xproject/order-utils/lib/src/order_factory'; +import { orderFactory } from '@0x/order-utils/lib/src/order_factory'; import * as chai from 'chai'; import * as _ from 'lodash'; import 'mocha'; diff --git a/packages/contract-wrappers/test/erc20_wrapper_test.ts b/packages/contract-wrappers/test/erc20_wrapper_test.ts index c065f4d63..15d3a9ead 100644 --- a/packages/contract-wrappers/test/erc20_wrapper_test.ts +++ b/packages/contract-wrappers/test/erc20_wrapper_test.ts @@ -1,8 +1,8 @@ -import { ContractAddresses } from '@0xproject/contract-addresses'; -import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; -import { DoneCallback } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { ContractAddresses } from '@0x/contract-addresses'; +import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils'; +import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0x/subproviders'; +import { DoneCallback } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { Provider } from 'ethereum-types'; import 'mocha'; diff --git a/packages/contract-wrappers/test/erc721_wrapper_test.ts b/packages/contract-wrappers/test/erc721_wrapper_test.ts index 1efbb37c7..a7f1e4c41 100644 --- a/packages/contract-wrappers/test/erc721_wrapper_test.ts +++ b/packages/contract-wrappers/test/erc721_wrapper_test.ts @@ -1,7 +1,7 @@ -import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; -import { DoneCallback } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils'; +import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0x/subproviders'; +import { DoneCallback } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { Provider } from 'ethereum-types'; import 'mocha'; diff --git a/packages/contract-wrappers/test/ether_token_wrapper_test.ts b/packages/contract-wrappers/test/ether_token_wrapper_test.ts index 74d030e1d..e3efef19d 100644 --- a/packages/contract-wrappers/test/ether_token_wrapper_test.ts +++ b/packages/contract-wrappers/test/ether_token_wrapper_test.ts @@ -1,8 +1,8 @@ -import { ContractAddresses } from '@0xproject/contract-addresses'; -import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { DoneCallback } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ContractAddresses } from '@0x/contract-addresses'; +import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils'; +import { DoneCallback } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/contract-wrappers/test/exchange_wrapper_test.ts b/packages/contract-wrappers/test/exchange_wrapper_test.ts index 4d0176349..0e537bd83 100644 --- a/packages/contract-wrappers/test/exchange_wrapper_test.ts +++ b/packages/contract-wrappers/test/exchange_wrapper_test.ts @@ -1,8 +1,8 @@ -import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { FillScenarios } from '@0xproject/fill-scenarios'; -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { DoneCallback, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils'; +import { FillScenarios } from '@0x/fill-scenarios'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { DoneCallback, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { BlockParamLiteral } from 'ethereum-types'; import 'mocha'; diff --git a/packages/contract-wrappers/test/forwarder_wrapper_test.ts b/packages/contract-wrappers/test/forwarder_wrapper_test.ts index 730658884..ff4ff8b67 100644 --- a/packages/contract-wrappers/test/forwarder_wrapper_test.ts +++ b/packages/contract-wrappers/test/forwarder_wrapper_test.ts @@ -1,8 +1,8 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { FillScenarios } from '@0xproject/fill-scenarios'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { FillScenarios } from '@0x/fill-scenarios'; +import { assetDataUtils } from '@0x/order-utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/contract-wrappers/test/order_validator_wrapper_test.ts b/packages/contract-wrappers/test/order_validator_wrapper_test.ts index 636aa9a50..da3f99e72 100644 --- a/packages/contract-wrappers/test/order_validator_wrapper_test.ts +++ b/packages/contract-wrappers/test/order_validator_wrapper_test.ts @@ -1,9 +1,9 @@ -import { ContractAddresses } from '@0xproject/contract-addresses'; -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { FillScenarios } from '@0xproject/fill-scenarios'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { ContractAddresses } from '@0x/contract-addresses'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { FillScenarios } from '@0x/fill-scenarios'; +import { assetDataUtils } from '@0x/order-utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; import 'mocha'; diff --git a/packages/contract-wrappers/test/revert_validation_test.ts b/packages/contract-wrappers/test/revert_validation_test.ts index f5f8be6c3..efd5dd61f 100644 --- a/packages/contract-wrappers/test/revert_validation_test.ts +++ b/packages/contract-wrappers/test/revert_validation_test.ts @@ -1,10 +1,10 @@ -import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils'; -import { FillScenarios } from '@0xproject/fill-scenarios'; -import { runMigrationsAsync } from '@0xproject/migrations'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle, devConstants, web3Factory } from '@0x/dev-utils'; +import { FillScenarios } from '@0x/fill-scenarios'; +import { runMigrationsAsync } from '@0x/migrations'; +import { assetDataUtils } from '@0x/order-utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/contract-wrappers/test/subscription_test.ts b/packages/contract-wrappers/test/subscription_test.ts index 40921bce8..0fa6af40d 100644 --- a/packages/contract-wrappers/test/subscription_test.ts +++ b/packages/contract-wrappers/test/subscription_test.ts @@ -1,5 +1,5 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { DoneCallback } from '@0xproject/types'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { DoneCallback } from '@0x/types'; import * as _ from 'lodash'; import 'mocha'; import * as Sinon from 'sinon'; diff --git a/packages/contract-wrappers/test/transaction_encoder_test.ts b/packages/contract-wrappers/test/transaction_encoder_test.ts index 300f2a330..ef9eb2cf3 100644 --- a/packages/contract-wrappers/test/transaction_encoder_test.ts +++ b/packages/contract-wrappers/test/transaction_encoder_test.ts @@ -1,8 +1,8 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { FillScenarios } from '@0xproject/fill-scenarios'; -import { assetDataUtils, generatePseudoRandomSalt, orderHashUtils, signatureUtils } from '@0xproject/order-utils'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { FillScenarios } from '@0x/fill-scenarios'; +import { assetDataUtils, generatePseudoRandomSalt, orderHashUtils, signatureUtils } from '@0x/order-utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import 'mocha'; import { ContractWrappers } from '../src'; diff --git a/packages/contract-wrappers/test/utils/constants.ts b/packages/contract-wrappers/test/utils/constants.ts index f38728b77..ca6c574e4 100644 --- a/packages/contract-wrappers/test/utils/constants.ts +++ b/packages/contract-wrappers/test/utils/constants.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const constants = { NULL_ADDRESS: '0x0000000000000000000000000000000000000000', diff --git a/packages/contract-wrappers/test/utils/migrate.ts b/packages/contract-wrappers/test/utils/migrate.ts index 53319a383..665ce0faa 100644 --- a/packages/contract-wrappers/test/utils/migrate.ts +++ b/packages/contract-wrappers/test/utils/migrate.ts @@ -1,6 +1,6 @@ -import { ContractAddresses } from '@0xproject/contract-addresses'; -import { devConstants } from '@0xproject/dev-utils'; -import { runMigrationsOnceAsync } from '@0xproject/migrations'; +import { ContractAddresses } from '@0x/contract-addresses'; +import { devConstants } from '@0x/dev-utils'; +import { runMigrationsOnceAsync } from '@0x/migrations'; import { provider } from './web3_wrapper'; diff --git a/packages/contract-wrappers/test/utils/token_utils.ts b/packages/contract-wrappers/test/utils/token_utils.ts index c9e1e7434..f8a88637f 100644 --- a/packages/contract-wrappers/test/utils/token_utils.ts +++ b/packages/contract-wrappers/test/utils/token_utils.ts @@ -1,7 +1,7 @@ -import { DummyERC721TokenContract } from '@0xproject/abi-gen-wrappers'; -import { DummyERC721Token } from '@0xproject/contract-artifacts'; -import { generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; +import { DummyERC721TokenContract } from '@0x/abi-gen-wrappers'; +import { DummyERC721Token } from '@0x/contract-artifacts'; +import { generatePseudoRandomSalt } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; import { provider, txDefaults, web3Wrapper } from './web3_wrapper'; diff --git a/packages/contract-wrappers/test/utils/web3_wrapper.ts b/packages/contract-wrappers/test/utils/web3_wrapper.ts index 02c8c5918..4e86ebeba 100644 --- a/packages/contract-wrappers/test/utils/web3_wrapper.ts +++ b/packages/contract-wrappers/test/utils/web3_wrapper.ts @@ -1,5 +1,5 @@ -import { devConstants, web3Factory } from '@0xproject/dev-utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { devConstants, web3Factory } from '@0x/dev-utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; const txDefaults = { diff --git a/packages/contract-wrappers/tslint.json b/packages/contract-wrappers/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/contract-wrappers/tslint.json +++ b/packages/contract-wrappers/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/contract_templates/README.md b/packages/contract_templates/README.md index e5f4b09d1..c6cc3b1b3 100644 --- a/packages/contract_templates/README.md +++ b/packages/contract_templates/README.md @@ -2,7 +2,7 @@ These templates are used with [abi-gen](https://github.com/0xProject/0x-monorepo To successfully compile the generated TypeScript contract wrappers, you must: -* Install the packages on which the main contract template directly depends: `yarn add @0xproject/base-contract @0xproject/sol-compiler @0xproject/utils @0xproject/web3-wrapper ethereum-types ethers lodash` +* Install the packages on which the main contract template directly depends: `yarn add @0x/base-contract @0x/sol-compiler @0x/utils @0x/web3-wrapper ethereum-types ethers lodash` * Install the packages on which the main contract template *in*directly depends: `yarn add @types/lodash` * Ensure that your TypeScript configuration includes the following: @@ -10,7 +10,7 @@ To successfully compile the generated TypeScript contract wrappers, you must: "compilerOptions": { "lib": ["ES2015"], "typeRoots": [ - "node_modules/@0xproject/typescript-typings/types", + "node_modules/@0x/typescript-typings/types", "node_modules/@types" ] } diff --git a/packages/contract_templates/contract.handlebars b/packages/contract_templates/contract.handlebars index 41e5c8630..9c1952ed4 100644 --- a/packages/contract_templates/contract.handlebars +++ b/packages/contract_templates/contract.handlebars @@ -1,10 +1,10 @@ // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method -import { BaseContract } from '@0xproject/base-contract'; +import { BaseContract } from '@0x/base-contract'; import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; import * as _ from 'lodash'; // tslint:enable:no-unused-variable diff --git a/packages/contracts/README.md b/packages/contracts/README.md index 33cbdae26..5aedb249f 100644 --- a/packages/contracts/README.md +++ b/packages/contracts/README.md @@ -4,29 +4,23 @@ Smart contracts that implement the 0x protocol. Addresses of the deployed contra ## Usage -### 2.0.0 +Contracts that make up and interact with version 2.0.0 of the protocol can be found in the [contracts](./contracts) directory. The contents of this directory are broken down into the following subdirectories: -Contracts that make up and interact with version 2.0.0 of the protocol can be found in the `src/2.0.0` directory. The contents of this directory are broken down into the following subdirectories: - -* protocol +* [protocol](./contracts/protocol) * This directory contains the contracts that make up version 2.0.0. A full specification can be found [here](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md). -* extensions +* [extensions](./contracts/extensions) * This directory contains contracts that interact with the 2.0.0 contracts and will be used in production, such as the [Forwarder](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md) contract. -* examples +* [examples](./contracts/examples) * This directory contains example implementations of contracts that interact with the protocol but are _not_ intended for use in production. Examples include [filter](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#filter-contracts) contracts, a [Wallet](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#wallet) contract, and a [Validator](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#validator) contract, among others. -* tokens +* [tokens](./contracts/tokens) * This directory contains implementations of different tokens and token standards, including [wETH](https://weth.io/), ZRX, [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md), and [ERC721](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md). -* multisig +* [multisig](./contracts/multisig) * This directory contains the [Gnosis MultiSigWallet](https://github.com/gnosis/MultiSigWallet) and a custom extension that adds a timelock to transactions within the MultiSigWallet. -* utils +* [utils](./contracts/utils) * This directory contains libraries and utils that are shared across all of the other directories. -* test +* [test](./contracts/test) * This directory contains mocks and other contracts that are used solely for testing contracts within the other directories. -### 1.0.0 - -Contracts that make up version 1.0.0 of the protocol can be found in `src/1.0.0`. These contracts are considered deprecated and will have limited support going forward. - ## Bug bounty A bug bounty for the 2.0.0 contracts is ongoing! Instructions can be found [here](https://0xproject.com/wiki#Bug-Bounty). @@ -107,7 +101,7 @@ TEST_PROVIDER=geth yarn test ###### Code coverage -In order to see the Solidity code coverage output generated by `@0xproject/sol-cov`, run: +In order to see the Solidity code coverage output generated by `@0x/sol-cov`, run: ``` yarn test:coverage diff --git a/packages/contracts/contracts/extensions/Forwarder/MixinExchangeWrapper.sol b/packages/contracts/contracts/extensions/Forwarder/MixinExchangeWrapper.sol index fea9a53c2..4991c0ea5 100644 --- a/packages/contracts/contracts/extensions/Forwarder/MixinExchangeWrapper.sol +++ b/packages/contracts/contracts/extensions/Forwarder/MixinExchangeWrapper.sol @@ -155,8 +155,10 @@ contract MixinExchangeWrapper is uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount); // Convert the remaining amount of makerAsset to buy into remaining amount - // of takerAsset to sell, assuming entire amount can be sold in the current order - uint256 remainingTakerAssetFillAmount = getPartialAmountFloor( + // of takerAsset to sell, assuming entire amount can be sold in the current order. + // We round up because the exchange rate computed by fillOrder rounds in favor + // of the Maker. In this case we want to overestimate the amount of takerAsset. + uint256 remainingTakerAssetFillAmount = getPartialAmountCeil( orders[i].takerAssetAmount, orders[i].makerAssetAmount, remainingMakerAssetFillAmount @@ -224,7 +226,9 @@ contract MixinExchangeWrapper is // Convert the remaining amount of ZRX to buy into remaining amount // of WETH to sell, assuming entire amount can be sold in the current order. - uint256 remainingWethSellAmount = getPartialAmountFloor( + // We round up because the exchange rate computed by fillOrder rounds in favor + // of the Maker. In this case we want to overestimate the amount of takerAsset. + uint256 remainingWethSellAmount = getPartialAmountCeil( orders[i].takerAssetAmount, safeSub(orders[i].makerAssetAmount, orders[i].takerFee), // our exchange rate after fees remainingZrxBuyAmount @@ -233,7 +237,7 @@ contract MixinExchangeWrapper is // Attempt to sell the remaining amount of WETH. FillResults memory singleFillResult = fillOrderNoThrow( orders[i], - safeAdd(remainingWethSellAmount, 1), // we add 1 wei to the fill amount to make up for rounding errors + remainingWethSellAmount, signatures[i] ); diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 33ae3db9a..3a5f12c74 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "contracts", - "version": "2.1.49", + "version": "2.1.50", "engines": { "node": ">=6.12" }, @@ -45,12 +45,12 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/contracts/README.md", "devDependencies": { - "@0xproject/abi-gen": "^1.0.13", - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/sol-compiler": "^1.1.7", - "@0xproject/sol-cov": "^2.1.7", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/tslint-config": "^1.0.8", + "@0x/abi-gen": "^1.0.14", + "@0x/dev-utils": "^1.0.13", + "@0x/sol-compiler": "^1.1.8", + "@0x/sol-cov": "^2.1.8", + "@0x/subproviders": "^2.1.0", + "@0x/tslint-config": "^1.0.9", "@types/bn.js": "^4.11.0", "@types/ethereumjs-abi": "^0.6.0", "@types/lodash": "4.14.104", @@ -71,15 +71,15 @@ "yargs": "^10.0.3" }, "dependencies": { - "@0xproject/base-contract": "^3.0.1", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/base-contract": "^3.0.2", + "@0x/order-utils": "^2.0.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@types/js-combinatorics": "^0.5.29", "bn.js": "^4.11.8", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-abi": "0.6.5", "ethereumjs-util": "^5.1.1", "ethers": "~4.0.4", diff --git a/packages/contracts/test/asset_proxy/authorizable.ts b/packages/contracts/test/asset_proxy/authorizable.ts index a37a865fe..e21af9b81 100644 --- a/packages/contracts/test/asset_proxy/authorizable.ts +++ b/packages/contracts/test/asset_proxy/authorizable.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/asset_proxy/proxies.ts b/packages/contracts/test/asset_proxy/proxies.ts index a46a580d1..b8305993e 100644 --- a/packages/contracts/test/asset_proxy/proxies.ts +++ b/packages/contracts/test/asset_proxy/proxies.ts @@ -1,7 +1,7 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils } from '@0x/order-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/exchange/core.ts b/packages/contracts/test/exchange/core.ts index a47240efc..fc8dc5346 100644 --- a/packages/contracts/test/exchange/core.ts +++ b/packages/contracts/test/exchange/core.ts @@ -1,8 +1,8 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { RevertReason, SignatureType, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { RevertReason, SignatureType, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { LogWithDecodedArgs } from 'ethereum-types'; import ethUtil = require('ethereumjs-util'); diff --git a/packages/contracts/test/exchange/dispatcher.ts b/packages/contracts/test/exchange/dispatcher.ts index 2967ed4e8..3d3aa42c2 100644 --- a/packages/contracts/test/exchange/dispatcher.ts +++ b/packages/contracts/test/exchange/dispatcher.ts @@ -1,7 +1,7 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { AssetProxyId, RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils } from '@0x/order-utils'; +import { AssetProxyId, RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { LogWithDecodedArgs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/exchange/fill_order.ts b/packages/contracts/test/exchange/fill_order.ts index b1e08324f..37efaad2b 100644 --- a/packages/contracts/test/exchange/fill_order.ts +++ b/packages/contracts/test/exchange/fill_order.ts @@ -1,4 +1,4 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; import * as _ from 'lodash'; import { chaiSetup } from '../utils/chai_setup'; diff --git a/packages/contracts/test/exchange/internal.ts b/packages/contracts/test/exchange/internal.ts index a1a14d56c..109be29c6 100644 --- a/packages/contracts/test/exchange/internal.ts +++ b/packages/contracts/test/exchange/internal.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { Order, RevertReason, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { Order, RevertReason, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/exchange/libs.ts b/packages/contracts/test/exchange/libs.ts index 9d5aebcd2..503ef0e0f 100644 --- a/packages/contracts/test/exchange/libs.ts +++ b/packages/contracts/test/exchange/libs.ts @@ -1,7 +1,7 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { TestConstantsContract } from '../../generated-wrappers/test_constants'; diff --git a/packages/contracts/test/exchange/match_orders.ts b/packages/contracts/test/exchange/match_orders.ts index d20b6227f..eea9992d9 100644 --- a/packages/contracts/test/exchange/match_orders.ts +++ b/packages/contracts/test/exchange/match_orders.ts @@ -1,8 +1,8 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils } from '@0x/order-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/exchange/signature_validator.ts b/packages/contracts/test/exchange/signature_validator.ts index 6b9cc87f4..756c72766 100644 --- a/packages/contracts/test/exchange/signature_validator.ts +++ b/packages/contracts/test/exchange/signature_validator.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils, orderHashUtils, signatureUtils } from '@0xproject/order-utils'; -import { RevertReason, SignatureType, SignedOrder } from '@0xproject/types'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils, orderHashUtils, signatureUtils } from '@0x/order-utils'; +import { RevertReason, SignatureType, SignedOrder } from '@0x/types'; import * as chai from 'chai'; import { LogWithDecodedArgs } from 'ethereum-types'; import ethUtil = require('ethereumjs-util'); diff --git a/packages/contracts/test/exchange/transactions.ts b/packages/contracts/test/exchange/transactions.ts index c440770c1..1b5eef295 100644 --- a/packages/contracts/test/exchange/transactions.ts +++ b/packages/contracts/test/exchange/transactions.ts @@ -1,7 +1,7 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils, generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { OrderWithoutExchangeAddress, RevertReason, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils, generatePseudoRandomSalt } from '@0x/order-utils'; +import { OrderWithoutExchangeAddress, RevertReason, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/exchange/wrapper.ts b/packages/contracts/test/exchange/wrapper.ts index 1ddb018ba..6b660aac5 100644 --- a/packages/contracts/test/exchange/wrapper.ts +++ b/packages/contracts/test/exchange/wrapper.ts @@ -1,8 +1,8 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { RevertReason, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { RevertReason, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/extensions/forwarder.ts b/packages/contracts/test/extensions/forwarder.ts index f6d1303b0..c006be0fe 100644 --- a/packages/contracts/test/extensions/forwarder.ts +++ b/packages/contracts/test/extensions/forwarder.ts @@ -1,8 +1,8 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { RevertReason, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils } from '@0x/order-utils'; +import { RevertReason, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { TransactionReceiptWithDecodedLogs } from 'ethereum-types'; @@ -45,6 +45,7 @@ describe(ContractName.Forwarder, () => { let weth: DummyERC20TokenContract; let zrxToken: DummyERC20TokenContract; + let erc20TokenA: DummyERC20TokenContract; let erc721Token: DummyERC721TokenContract; let forwarderContract: ForwarderContract; let wethContract: WETH9Contract; @@ -77,7 +78,6 @@ describe(ContractName.Forwarder, () => { erc20Wrapper = new ERC20Wrapper(provider, usedAddresses, owner); const numDummyErc20ToDeploy = 3; - let erc20TokenA; [erc20TokenA, zrxToken] = await erc20Wrapper.deployDummyTokensAsync( numDummyErc20ToDeploy, constants.DUMMY_TOKEN_DECIMALS, @@ -902,6 +902,269 @@ describe(ContractName.Forwarder, () => { ); expect(forwarderEthBalance).to.be.bignumber.equal(constants.ZERO_AMOUNT); }); + it('Should buy slightly greater MakerAsset when exchange rate is rounded', async () => { + // The 0x Protocol contracts round the exchange rate in favor of the Maker. + // In this case, the taker must round up how much they're going to spend, which + // in turn increases the amount of MakerAsset being purchased. + // Example: + // The taker wants to buy 5 units of the MakerAsset at a rate of 3M/2T. + // For every 2 units of TakerAsset, the taker will receive 3 units of MakerAsset. + // To purchase 5 units, the taker must spend 10/3 = 3.33 units of TakerAssset. + // However, the Taker can only spend whole units. + // Spending floor(10/3) = 3 units will yield a profit of Floor(3*3/2) = Floor(4.5) = 4 units of MakerAsset. + // Spending ceil(10/3) = 4 units will yield a profit of Floor(4*3/2) = 6 units of MakerAsset. + // + // The forwarding contract will opt for the second option, which overbuys, to ensure the taker + // receives at least the amount of MakerAsset they requested. + // + // Construct test case using values from example above + orderWithoutFee = await orderFactory.newSignedOrderAsync({ + makerAssetAmount: new BigNumber('30'), + takerAssetAmount: new BigNumber('20'), + makerAssetData: assetDataUtils.encodeERC20AssetData(erc20TokenA.address), + takerAssetData: assetDataUtils.encodeERC20AssetData(weth.address), + makerFee: new BigNumber(0), + takerFee: new BigNumber(0), + }); + const ordersWithoutFee = [orderWithoutFee]; + const feeOrders: SignedOrder[] = []; + const desiredMakerAssetFillAmount = new BigNumber('5'); + const makerAssetFillAmount = new BigNumber('6'); + const ethValue = new BigNumber('4'); + // Execute test case + tx = await forwarderWrapper.marketBuyOrdersWithEthAsync( + ordersWithoutFee, + feeOrders, + desiredMakerAssetFillAmount, + { + value: ethValue, + from: takerAddress, + }, + ); + // Fetch end balances and construct expected outputs + const takerEthBalanceAfter = await web3Wrapper.getBalanceInWeiAsync(takerAddress); + const forwarderEthBalance = await web3Wrapper.getBalanceInWeiAsync(forwarderContract.address); + const newBalances = await erc20Wrapper.getBalancesAsync(); + const primaryTakerAssetFillAmount = ethValue; + const totalEthSpent = primaryTakerAssetFillAmount.plus(gasPrice.times(tx.gasUsed)); + // Validate test case + expect(makerAssetFillAmount).to.be.bignumber.greaterThan(desiredMakerAssetFillAmount); + expect(takerEthBalanceAfter).to.be.bignumber.equal(takerEthBalanceBefore.minus(totalEthSpent)); + expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal( + erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount), + ); + expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal( + erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount), + ); + expect(newBalances[makerAddress][weth.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][weth.address].plus(primaryTakerAssetFillAmount), + ); + expect(newBalances[forwarderContract.address][weth.address]).to.be.bignumber.equal(constants.ZERO_AMOUNT); + expect(newBalances[forwarderContract.address][defaultMakerAssetAddress]).to.be.bignumber.equal( + constants.ZERO_AMOUNT, + ); + expect(forwarderEthBalance).to.be.bignumber.equal(constants.ZERO_AMOUNT); + }); + it('Should buy slightly greater MakerAsset when exchange rate is rounded, and MakerAsset is ZRX', async () => { + // See the test case above for a detailed description of this case. + // The difference here is that the MakerAsset is ZRX. We expect the same result as above, + // but this tests a different code path. + // + // Construct test case using values from example above + orderWithoutFee = await orderFactory.newSignedOrderAsync({ + makerAssetAmount: new BigNumber('30'), + takerAssetAmount: new BigNumber('20'), + makerAssetData: zrxAssetData, + takerAssetData: assetDataUtils.encodeERC20AssetData(weth.address), + makerFee: new BigNumber(0), + takerFee: new BigNumber(0), + }); + const ordersWithoutFee = [orderWithoutFee]; + const feeOrders: SignedOrder[] = []; + const desiredMakerAssetFillAmount = new BigNumber('5'); + const makerAssetFillAmount = new BigNumber('6'); + const ethValue = new BigNumber('4'); + // Execute test case + tx = await forwarderWrapper.marketBuyOrdersWithEthAsync( + ordersWithoutFee, + feeOrders, + desiredMakerAssetFillAmount, + { + value: ethValue, + from: takerAddress, + }, + ); + // Fetch end balances and construct expected outputs + const takerEthBalanceAfter = await web3Wrapper.getBalanceInWeiAsync(takerAddress); + const forwarderEthBalance = await web3Wrapper.getBalanceInWeiAsync(forwarderContract.address); + const newBalances = await erc20Wrapper.getBalancesAsync(); + const primaryTakerAssetFillAmount = ethValue; + const totalEthSpent = primaryTakerAssetFillAmount.plus(gasPrice.times(tx.gasUsed)); + // Validate test case + expect(makerAssetFillAmount).to.be.bignumber.greaterThan(desiredMakerAssetFillAmount); + expect(takerEthBalanceAfter).to.be.bignumber.equal(takerEthBalanceBefore.minus(totalEthSpent)); + expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][zrxToken.address].minus(makerAssetFillAmount), + ); + expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal( + erc20Balances[takerAddress][zrxToken.address].plus(makerAssetFillAmount), + ); + expect(newBalances[makerAddress][weth.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][weth.address].plus(primaryTakerAssetFillAmount), + ); + expect(newBalances[forwarderContract.address][weth.address]).to.be.bignumber.equal(constants.ZERO_AMOUNT); + expect(forwarderEthBalance).to.be.bignumber.equal(constants.ZERO_AMOUNT); + }); + it('Should buy slightly greater MakerAsset when exchange rate is rounded (Regression Test)', async () => { + // Order taken from a transaction on mainnet that failed due to a rounding error. + orderWithoutFee = await orderFactory.newSignedOrderAsync({ + makerAssetAmount: new BigNumber('268166666666666666666'), + takerAssetAmount: new BigNumber('219090625878836371'), + makerAssetData: assetDataUtils.encodeERC20AssetData(erc20TokenA.address), + takerAssetData: assetDataUtils.encodeERC20AssetData(weth.address), + makerFee: new BigNumber(0), + takerFee: new BigNumber(0), + }); + const ordersWithoutFee = [orderWithoutFee]; + const feeOrders: SignedOrder[] = []; + // The taker will receive more than the desired amount of makerAsset due to rounding + const desiredMakerAssetFillAmount = new BigNumber('5000000000000000000'); + const ethValue = new BigNumber('4084971271824171'); + const makerAssetFillAmount = ethValue + .times(orderWithoutFee.makerAssetAmount) + .dividedToIntegerBy(orderWithoutFee.takerAssetAmount); + // Execute test case + tx = await forwarderWrapper.marketBuyOrdersWithEthAsync( + ordersWithoutFee, + feeOrders, + desiredMakerAssetFillAmount, + { + value: ethValue, + from: takerAddress, + }, + ); + // Fetch end balances and construct expected outputs + const takerEthBalanceAfter = await web3Wrapper.getBalanceInWeiAsync(takerAddress); + const forwarderEthBalance = await web3Wrapper.getBalanceInWeiAsync(forwarderContract.address); + const newBalances = await erc20Wrapper.getBalancesAsync(); + const primaryTakerAssetFillAmount = ethValue; + const totalEthSpent = primaryTakerAssetFillAmount.plus(gasPrice.times(tx.gasUsed)); + // Validate test case + expect(makerAssetFillAmount).to.be.bignumber.greaterThan(desiredMakerAssetFillAmount); + expect(takerEthBalanceAfter).to.be.bignumber.equal(takerEthBalanceBefore.minus(totalEthSpent)); + expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal( + erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount), + ); + expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal( + erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount), + ); + expect(newBalances[makerAddress][weth.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][weth.address].plus(primaryTakerAssetFillAmount), + ); + expect(newBalances[forwarderContract.address][weth.address]).to.be.bignumber.equal(constants.ZERO_AMOUNT); + expect(newBalances[forwarderContract.address][defaultMakerAssetAddress]).to.be.bignumber.equal( + constants.ZERO_AMOUNT, + ); + expect(forwarderEthBalance).to.be.bignumber.equal(constants.ZERO_AMOUNT); + }); + it('Should buy slightly greater MakerAsset when exchange rate is rounded, and MakerAsset is ZRX (Regression Test)', async () => { + // Order taken from a transaction on mainnet that failed due to a rounding error. + orderWithoutFee = await orderFactory.newSignedOrderAsync({ + makerAssetAmount: new BigNumber('268166666666666666666'), + takerAssetAmount: new BigNumber('219090625878836371'), + makerAssetData: zrxAssetData, + takerAssetData: assetDataUtils.encodeERC20AssetData(weth.address), + makerFee: new BigNumber(0), + takerFee: new BigNumber(0), + }); + const ordersWithoutFee = [orderWithoutFee]; + const feeOrders: SignedOrder[] = []; + // The taker will receive more than the desired amount of makerAsset due to rounding + const desiredMakerAssetFillAmount = new BigNumber('5000000000000000000'); + const ethValue = new BigNumber('4084971271824171'); + const makerAssetFillAmount = ethValue + .times(orderWithoutFee.makerAssetAmount) + .dividedToIntegerBy(orderWithoutFee.takerAssetAmount); + // Execute test case + tx = await forwarderWrapper.marketBuyOrdersWithEthAsync( + ordersWithoutFee, + feeOrders, + desiredMakerAssetFillAmount, + { + value: ethValue, + from: takerAddress, + }, + ); + // Fetch end balances and construct expected outputs + const takerEthBalanceAfter = await web3Wrapper.getBalanceInWeiAsync(takerAddress); + const forwarderEthBalance = await web3Wrapper.getBalanceInWeiAsync(forwarderContract.address); + const newBalances = await erc20Wrapper.getBalancesAsync(); + const primaryTakerAssetFillAmount = ethValue; + const totalEthSpent = primaryTakerAssetFillAmount.plus(gasPrice.times(tx.gasUsed)); + // Validate test case + expect(makerAssetFillAmount).to.be.bignumber.greaterThan(desiredMakerAssetFillAmount); + expect(takerEthBalanceAfter).to.be.bignumber.equal(takerEthBalanceBefore.minus(totalEthSpent)); + expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][zrxToken.address].minus(makerAssetFillAmount), + ); + expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal( + erc20Balances[takerAddress][zrxToken.address].plus(makerAssetFillAmount), + ); + expect(newBalances[makerAddress][weth.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][weth.address].plus(primaryTakerAssetFillAmount), + ); + expect(newBalances[forwarderContract.address][weth.address]).to.be.bignumber.equal(constants.ZERO_AMOUNT); + expect(forwarderEthBalance).to.be.bignumber.equal(constants.ZERO_AMOUNT); + }); + it('Should buy correct MakerAsset when exchange rate is NOT rounded, and MakerAsset is ZRX (Regression Test)', async () => { + // An extra unit of TakerAsset was sent to the exchange contract to account for rounding errors, in Forwarder v1. + // Specifically, the takerFillAmount was calculated using Floor(desiredMakerAmount * exchangeRate) + 1 + // We have since changed this to be Ceil(desiredMakerAmount * exchangeRate) + // These calculations produce different results when `desiredMakerAmount * exchangeRate` is an integer. + // + // This test verifies that `ceil` is sufficient: + // Let TakerAssetAmount = MakerAssetAmount * 2 + // -> exchangeRate = TakerAssetAmount / MakerAssetAmount = (2*MakerAssetAmount)/MakerAssetAmount = 2 + // .: desiredMakerAmount * exchangeRate is an integer. + // + // Construct test case using values from example above + orderWithoutFee = await orderFactory.newSignedOrderAsync({ + makerAssetAmount: new BigNumber('30'), + takerAssetAmount: new BigNumber('60'), + makerAssetData: zrxAssetData, + takerAssetData: assetDataUtils.encodeERC20AssetData(weth.address), + makerFee: new BigNumber(0), + takerFee: new BigNumber(0), + }); + const ordersWithoutFee = [orderWithoutFee]; + const feeOrders: SignedOrder[] = []; + const makerAssetFillAmount = new BigNumber('5'); + const ethValue = new BigNumber('10'); + // Execute test case + tx = await forwarderWrapper.marketBuyOrdersWithEthAsync(ordersWithoutFee, feeOrders, makerAssetFillAmount, { + value: ethValue, + from: takerAddress, + }); + // Fetch end balances and construct expected outputs + const takerEthBalanceAfter = await web3Wrapper.getBalanceInWeiAsync(takerAddress); + const forwarderEthBalance = await web3Wrapper.getBalanceInWeiAsync(forwarderContract.address); + const newBalances = await erc20Wrapper.getBalancesAsync(); + const primaryTakerAssetFillAmount = ethValue; + const totalEthSpent = primaryTakerAssetFillAmount.plus(gasPrice.times(tx.gasUsed)); + // Validate test case + expect(takerEthBalanceAfter).to.be.bignumber.equal(takerEthBalanceBefore.minus(totalEthSpent)); + expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][zrxToken.address].minus(makerAssetFillAmount), + ); + expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal( + erc20Balances[takerAddress][zrxToken.address].plus(makerAssetFillAmount), + ); + expect(newBalances[makerAddress][weth.address]).to.be.bignumber.equal( + erc20Balances[makerAddress][weth.address].plus(primaryTakerAssetFillAmount), + ); + expect(newBalances[forwarderContract.address][weth.address]).to.be.bignumber.equal(constants.ZERO_AMOUNT); + expect(forwarderEthBalance).to.be.bignumber.equal(constants.ZERO_AMOUNT); + }); }); describe('marketBuyOrdersWithEth with extra fees', () => { it('should buy an asset and send fee to feeRecipient', async () => { diff --git a/packages/contracts/test/extensions/order_validator.ts b/packages/contracts/test/extensions/order_validator.ts index 5c01de020..37bd1b0e2 100644 --- a/packages/contracts/test/extensions/order_validator.ts +++ b/packages/contracts/test/extensions/order_validator.ts @@ -1,7 +1,7 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/global_hooks.ts b/packages/contracts/test/global_hooks.ts index cf7c52efd..2e9ac9e21 100644 --- a/packages/contracts/test/global_hooks.ts +++ b/packages/contracts/test/global_hooks.ts @@ -1,4 +1,4 @@ -import { env, EnvVars } from '@0xproject/dev-utils'; +import { env, EnvVars } from '@0x/dev-utils'; import { coverage } from './utils/coverage'; import { profiler } from './utils/profiler'; diff --git a/packages/contracts/test/libraries/lib_bytes.ts b/packages/contracts/test/libraries/lib_bytes.ts index 8e8ed7ede..b1a389f00 100644 --- a/packages/contracts/test/libraries/lib_bytes.ts +++ b/packages/contracts/test/libraries/lib_bytes.ts @@ -1,7 +1,7 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { generatePseudoRandomSalt } from '@0x/order-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import BN = require('bn.js'); import * as chai from 'chai'; import ethUtil = require('ethereumjs-util'); diff --git a/packages/contracts/test/multisig/asset_proxy_owner.ts b/packages/contracts/test/multisig/asset_proxy_owner.ts index d866b392e..087152316 100644 --- a/packages/contracts/test/multisig/asset_proxy_owner.ts +++ b/packages/contracts/test/multisig/asset_proxy_owner.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { LogWithDecodedArgs } from 'ethereum-types'; diff --git a/packages/contracts/test/multisig/multi_sig_with_time_lock.ts b/packages/contracts/test/multisig/multi_sig_with_time_lock.ts index 60787ac50..1c0cb0515 100644 --- a/packages/contracts/test/multisig/multi_sig_with_time_lock.ts +++ b/packages/contracts/test/multisig/multi_sig_with_time_lock.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { LogWithDecodedArgs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/tokens/erc721_token.ts b/packages/contracts/test/tokens/erc721_token.ts index fe10e060a..72407748f 100644 --- a/packages/contracts/test/tokens/erc721_token.ts +++ b/packages/contracts/test/tokens/erc721_token.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { LogWithDecodedArgs } from 'ethereum-types'; diff --git a/packages/contracts/test/tokens/unlimited_allowance_token.ts b/packages/contracts/test/tokens/unlimited_allowance_token.ts index ec00e43ab..ea5a50522 100644 --- a/packages/contracts/test/tokens/unlimited_allowance_token.ts +++ b/packages/contracts/test/tokens/unlimited_allowance_token.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { RevertReason } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { RevertReason } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { DummyERC20TokenContract } from '../../generated-wrappers/dummy_erc20_token'; diff --git a/packages/contracts/test/tokens/weth9.ts b/packages/contracts/test/tokens/weth9.ts index 25463ac62..9a31dc3f2 100644 --- a/packages/contracts/test/tokens/weth9.ts +++ b/packages/contracts/test/tokens/weth9.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { WETH9Contract } from '../../generated-wrappers/weth9'; diff --git a/packages/contracts/test/tokens/zrx_token.ts b/packages/contracts/test/tokens/zrx_token.ts index 8881aca77..cab62c205 100644 --- a/packages/contracts/test/tokens/zrx_token.ts +++ b/packages/contracts/test/tokens/zrx_token.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { ZRXTokenContract } from '../../generated-wrappers/zrx_token'; diff --git a/packages/contracts/test/tutorials/arbitrage.ts b/packages/contracts/test/tutorials/arbitrage.ts index 6851483cc..78e0bc238 100644 --- a/packages/contracts/test/tutorials/arbitrage.ts +++ b/packages/contracts/test/tutorials/arbitrage.ts @@ -1,8 +1,8 @@ // import { ECSignature, SignedOrder, ZeroEx } from '0x.js'; -// import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils'; +// import { BlockchainLifecycle, devConstants, web3Factory } from '@0x/dev-utils'; // import { ExchangeContractErrs } from 'ethereum-types'; -// import { BigNumber } from '@0xproject/utils'; -// import { Web3Wrapper } from '@0xproject/web3-wrapper'; +// import { BigNumber } from '@0x/utils'; +// import { Web3Wrapper } from '@0x/web3-wrapper'; // import * as chai from 'chai'; // import ethUtil = require('ethereumjs-util'); // import * as Web3 from 'web3'; diff --git a/packages/contracts/test/utils/address_utils.ts b/packages/contracts/test/utils/address_utils.ts index 3cf8ec786..634da0c16 100644 --- a/packages/contracts/test/utils/address_utils.ts +++ b/packages/contracts/test/utils/address_utils.ts @@ -1,5 +1,5 @@ -import { generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { crypto } from '@0xproject/order-utils/lib/src/crypto'; +import { generatePseudoRandomSalt } from '@0x/order-utils'; +import { crypto } from '@0x/order-utils/lib/src/crypto'; export const addressUtils = { generatePseudoRandomAddress(): string { diff --git a/packages/contracts/test/utils/assertions.ts b/packages/contracts/test/utils/assertions.ts index 3361a751a..5b1cedfcc 100644 --- a/packages/contracts/test/utils/assertions.ts +++ b/packages/contracts/test/utils/assertions.ts @@ -1,6 +1,6 @@ -import { RevertReason } from '@0xproject/types'; -import { logUtils } from '@0xproject/utils'; -import { NodeType } from '@0xproject/web3-wrapper'; +import { RevertReason } from '@0x/types'; +import { logUtils } from '@0x/utils'; +import { NodeType } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { TransactionReceipt, TransactionReceiptStatus, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/utils/asset_wrapper.ts b/packages/contracts/test/utils/asset_wrapper.ts index e3a4800c6..4e7696066 100644 --- a/packages/contracts/test/utils/asset_wrapper.ts +++ b/packages/contracts/test/utils/asset_wrapper.ts @@ -1,6 +1,6 @@ -import { assetDataUtils } from '@0xproject/order-utils'; -import { AssetProxyId } from '@0xproject/types'; -import { BigNumber, errorUtils } from '@0xproject/utils'; +import { assetDataUtils } from '@0x/order-utils'; +import { AssetProxyId } from '@0x/types'; +import { BigNumber, errorUtils } from '@0x/utils'; import * as _ from 'lodash'; import { AbstractAssetWrapper } from './abstract_asset_wrapper'; diff --git a/packages/contracts/test/utils/combinatorial_utils.ts b/packages/contracts/test/utils/combinatorial_utils.ts index d72b41f8a..bb1b55b4d 100644 --- a/packages/contracts/test/utils/combinatorial_utils.ts +++ b/packages/contracts/test/utils/combinatorial_utils.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as combinatorics from 'js-combinatorics'; import { testWithReferenceFuncAsync } from './test_with_reference'; diff --git a/packages/contracts/test/utils/constants.ts b/packages/contracts/test/utils/constants.ts index b9ba8ccb9..cd21330e9 100644 --- a/packages/contracts/test/utils/constants.ts +++ b/packages/contracts/test/utils/constants.ts @@ -1,5 +1,5 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethUtil from 'ethereumjs-util'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/utils/coverage.ts b/packages/contracts/test/utils/coverage.ts index de29a3ecc..5becfa1b6 100644 --- a/packages/contracts/test/utils/coverage.ts +++ b/packages/contracts/test/utils/coverage.ts @@ -1,5 +1,5 @@ -import { devConstants } from '@0xproject/dev-utils'; -import { CoverageSubprovider, SolCompilerArtifactAdapter } from '@0xproject/sol-cov'; +import { devConstants } from '@0x/dev-utils'; +import { CoverageSubprovider, SolCompilerArtifactAdapter } from '@0x/sol-cov'; import * as _ from 'lodash'; let coverageSubprovider: CoverageSubprovider; diff --git a/packages/contracts/test/utils/erc20_wrapper.ts b/packages/contracts/test/utils/erc20_wrapper.ts index 05eaed52b..c281a2abf 100644 --- a/packages/contracts/test/utils/erc20_wrapper.ts +++ b/packages/contracts/test/utils/erc20_wrapper.ts @@ -1,6 +1,6 @@ -import { assetDataUtils } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { assetDataUtils } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/utils/erc721_wrapper.ts b/packages/contracts/test/utils/erc721_wrapper.ts index cdc8f4af6..3ef4e701d 100644 --- a/packages/contracts/test/utils/erc721_wrapper.ts +++ b/packages/contracts/test/utils/erc721_wrapper.ts @@ -1,6 +1,6 @@ -import { generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { generatePseudoRandomSalt } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/utils/exchange_wrapper.ts b/packages/contracts/test/utils/exchange_wrapper.ts index 00014f660..29dba690a 100644 --- a/packages/contracts/test/utils/exchange_wrapper.ts +++ b/packages/contracts/test/utils/exchange_wrapper.ts @@ -1,6 +1,6 @@ -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import { ExchangeContract } from '../../generated-wrappers/exchange'; diff --git a/packages/contracts/test/utils/fill_order_combinatorial_utils.ts b/packages/contracts/test/utils/fill_order_combinatorial_utils.ts index f7c35c469..81bb33318 100644 --- a/packages/contracts/test/utils/fill_order_combinatorial_utils.ts +++ b/packages/contracts/test/utils/fill_order_combinatorial_utils.ts @@ -5,10 +5,10 @@ import { orderHashUtils, OrderStateUtils, OrderValidationUtils, -} from '@0xproject/order-utils'; -import { AssetProxyId, RevertReason, SignatureType, SignedOrder } from '@0xproject/types'; -import { BigNumber, errorUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +} from '@0x/order-utils'; +import { AssetProxyId, RevertReason, SignatureType, SignedOrder } from '@0x/types'; +import { BigNumber, errorUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { LogWithDecodedArgs, Provider, TxData } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/utils/formatters.ts b/packages/contracts/test/utils/formatters.ts index 32e4787d6..813eb45db 100644 --- a/packages/contracts/test/utils/formatters.ts +++ b/packages/contracts/test/utils/formatters.ts @@ -1,5 +1,5 @@ -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import { constants } from './constants'; diff --git a/packages/contracts/test/utils/forwarder_wrapper.ts b/packages/contracts/test/utils/forwarder_wrapper.ts index 07527bc2e..a0bfcfe1d 100644 --- a/packages/contracts/test/utils/forwarder_wrapper.ts +++ b/packages/contracts/test/utils/forwarder_wrapper.ts @@ -1,6 +1,6 @@ -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider, TransactionReceiptWithDecodedLogs, TxDataPayable } from 'ethereum-types'; import * as _ from 'lodash'; @@ -26,9 +26,12 @@ export class ForwarderWrapper { _.forEach(feeOrders, feeOrder => { const feeAvailable = feeOrder.makerAssetAmount.minus(feeOrder.takerFee); if (!remainingFeeAmount.isZero() && feeAvailable.gt(remainingFeeAmount)) { - wethAmount = wethAmount - .plus(feeOrder.takerAssetAmount.times(remainingFeeAmount).dividedToIntegerBy(feeAvailable)) - .plus(1); + wethAmount = wethAmount.plus( + feeOrder.takerAssetAmount + .times(remainingFeeAmount) + .dividedBy(feeAvailable) + .ceil(), + ); remainingFeeAmount = new BigNumber(0); } else if (!remainingFeeAmount.isZero()) { wethAmount = wethAmount.plus(feeOrder.takerAssetAmount); diff --git a/packages/contracts/test/utils/log_decoder.ts b/packages/contracts/test/utils/log_decoder.ts index 10ddbdcba..05b0a9204 100644 --- a/packages/contracts/test/utils/log_decoder.ts +++ b/packages/contracts/test/utils/log_decoder.ts @@ -1,5 +1,5 @@ -import { AbiDecoder, BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { AbiDecoder, BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { AbiDefinition, ContractArtifact, diff --git a/packages/contracts/test/utils/match_order_tester.ts b/packages/contracts/test/utils/match_order_tester.ts index e0c55b834..6c2c84959 100644 --- a/packages/contracts/test/utils/match_order_tester.ts +++ b/packages/contracts/test/utils/match_order_tester.ts @@ -1,6 +1,6 @@ -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { AssetProxyId, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { AssetProxyId, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/utils/multi_sig_wrapper.ts b/packages/contracts/test/utils/multi_sig_wrapper.ts index 953d1004e..74fd3b4d6 100644 --- a/packages/contracts/test/utils/multi_sig_wrapper.ts +++ b/packages/contracts/test/utils/multi_sig_wrapper.ts @@ -1,5 +1,5 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/contracts/test/utils/order_factory.ts b/packages/contracts/test/utils/order_factory.ts index 63a893695..2449d1a8a 100644 --- a/packages/contracts/test/utils/order_factory.ts +++ b/packages/contracts/test/utils/order_factory.ts @@ -1,6 +1,6 @@ -import { generatePseudoRandomSalt, orderHashUtils } from '@0xproject/order-utils'; -import { Order, SignatureType, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { generatePseudoRandomSalt, orderHashUtils } from '@0x/order-utils'; +import { Order, SignatureType, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { getLatestBlockTimestampAsync } from './block_timestamp'; import { constants } from './constants'; diff --git a/packages/contracts/test/utils/order_factory_from_scenario.ts b/packages/contracts/test/utils/order_factory_from_scenario.ts index 2ffb2d620..60c8606c4 100644 --- a/packages/contracts/test/utils/order_factory_from_scenario.ts +++ b/packages/contracts/test/utils/order_factory_from_scenario.ts @@ -1,6 +1,6 @@ -import { assetDataUtils, generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { Order } from '@0xproject/types'; -import { BigNumber, errorUtils } from '@0xproject/utils'; +import { assetDataUtils, generatePseudoRandomSalt } from '@0x/order-utils'; +import { Order } from '@0x/types'; +import { BigNumber, errorUtils } from '@0x/utils'; import { DummyERC721TokenContract } from '../../generated-wrappers/dummy_erc721_token'; diff --git a/packages/contracts/test/utils/order_utils.ts b/packages/contracts/test/utils/order_utils.ts index 444e27c44..4f7a34011 100644 --- a/packages/contracts/test/utils/order_utils.ts +++ b/packages/contracts/test/utils/order_utils.ts @@ -1,5 +1,5 @@ -import { OrderWithoutExchangeAddress, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { OrderWithoutExchangeAddress, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { constants } from './constants'; import { CancelOrder, MatchOrder } from './types'; diff --git a/packages/contracts/test/utils/profiler.ts b/packages/contracts/test/utils/profiler.ts index 85ee24f22..2c7c1d66c 100644 --- a/packages/contracts/test/utils/profiler.ts +++ b/packages/contracts/test/utils/profiler.ts @@ -1,5 +1,5 @@ -import { devConstants } from '@0xproject/dev-utils'; -import { ProfilerSubprovider, SolCompilerArtifactAdapter } from '@0xproject/sol-cov'; +import { devConstants } from '@0x/dev-utils'; +import { ProfilerSubprovider, SolCompilerArtifactAdapter } from '@0x/sol-cov'; import * as _ from 'lodash'; let profilerSubprovider: ProfilerSubprovider; diff --git a/packages/contracts/test/utils/revert_trace.ts b/packages/contracts/test/utils/revert_trace.ts index 0bf8384bc..3f74fd28b 100644 --- a/packages/contracts/test/utils/revert_trace.ts +++ b/packages/contracts/test/utils/revert_trace.ts @@ -1,5 +1,5 @@ -import { devConstants } from '@0xproject/dev-utils'; -import { RevertTraceSubprovider, SolCompilerArtifactAdapter } from '@0xproject/sol-cov'; +import { devConstants } from '@0x/dev-utils'; +import { RevertTraceSubprovider, SolCompilerArtifactAdapter } from '@0x/sol-cov'; import * as _ from 'lodash'; let revertTraceSubprovider: RevertTraceSubprovider; diff --git a/packages/contracts/test/utils/signing_utils.ts b/packages/contracts/test/utils/signing_utils.ts index 9c711c72c..21f864bfa 100644 --- a/packages/contracts/test/utils/signing_utils.ts +++ b/packages/contracts/test/utils/signing_utils.ts @@ -1,4 +1,4 @@ -import { SignatureType } from '@0xproject/types'; +import { SignatureType } from '@0x/types'; import * as ethUtil from 'ethereumjs-util'; export const signingUtils = { diff --git a/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts b/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts index 598ee6d29..64b7dedbe 100644 --- a/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts +++ b/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts @@ -1,5 +1,5 @@ -import { AbstractBalanceAndProxyAllowanceFetcher } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; +import { AbstractBalanceAndProxyAllowanceFetcher } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; import { AssetWrapper } from './asset_wrapper'; diff --git a/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts b/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts index ed69ecc63..5f5575c7b 100644 --- a/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts +++ b/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts @@ -1,5 +1,5 @@ -import { AbstractOrderFilledCancelledFetcher } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; +import { AbstractOrderFilledCancelledFetcher } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; import { ExchangeWrapper } from './exchange_wrapper'; diff --git a/packages/contracts/test/utils/transaction_factory.ts b/packages/contracts/test/utils/transaction_factory.ts index 9ed4c5a31..dbab3ade4 100644 --- a/packages/contracts/test/utils/transaction_factory.ts +++ b/packages/contracts/test/utils/transaction_factory.ts @@ -1,6 +1,6 @@ -import { eip712Utils, generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { SignatureType } from '@0xproject/types'; -import { signTypedDataUtils } from '@0xproject/utils'; +import { eip712Utils, generatePseudoRandomSalt } from '@0x/order-utils'; +import { SignatureType } from '@0x/types'; +import { signTypedDataUtils } from '@0x/utils'; import * as ethUtil from 'ethereumjs-util'; import { signingUtils } from './signing_utils'; diff --git a/packages/contracts/test/utils/type_encoding_utils.ts b/packages/contracts/test/utils/type_encoding_utils.ts index 75307b9bd..bfd9c9ef5 100644 --- a/packages/contracts/test/utils/type_encoding_utils.ts +++ b/packages/contracts/test/utils/type_encoding_utils.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import BN = require('bn.js'); import ethUtil = require('ethereumjs-util'); diff --git a/packages/contracts/test/utils/types.ts b/packages/contracts/test/utils/types.ts index 598fb5393..9fc9e1570 100644 --- a/packages/contracts/test/utils/types.ts +++ b/packages/contracts/test/utils/types.ts @@ -1,5 +1,5 @@ -import { OrderWithoutExchangeAddress } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { OrderWithoutExchangeAddress } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { AbiDefinition } from 'ethereum-types'; export interface ERC20BalancesByOwner { diff --git a/packages/contracts/test/utils/web3_wrapper.ts b/packages/contracts/test/utils/web3_wrapper.ts index d1cd3d387..f7b1a732a 100644 --- a/packages/contracts/test/utils/web3_wrapper.ts +++ b/packages/contracts/test/utils/web3_wrapper.ts @@ -1,7 +1,7 @@ -import { devConstants, env, EnvVars, web3Factory } from '@0xproject/dev-utils'; -import { prependSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; -import { logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { devConstants, env, EnvVars, web3Factory } from '@0x/dev-utils'; +import { prependSubprovider, Web3ProviderEngine } from '@0x/subproviders'; +import { logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import { coverage } from './coverage'; diff --git a/packages/contracts/tslint.json b/packages/contracts/tslint.json index 1ab924e47..1bb3ac2a2 100644 --- a/packages/contracts/tslint.json +++ b/packages/contracts/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "custom-no-magic-numbers": false } diff --git a/packages/dev-tools-pages/README.md b/packages/dev-tools-pages/README.md index 39fe70a25..cbc459be7 100644 --- a/packages/dev-tools-pages/README.md +++ b/packages/dev-tools-pages/README.md @@ -19,7 +19,7 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/dev-tools-pages yarn build +PKG=@0x/dev-tools-pages yarn build ``` Note: Ignore the `WARNING in asset size limit` and `WARNING in entrypoint size limit` warnings. diff --git a/packages/dev-tools-pages/package.json b/packages/dev-tools-pages/package.json index f73260544..3563b4bef 100644 --- a/packages/dev-tools-pages/package.json +++ b/packages/dev-tools-pages/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/dev-tools-pages", - "version": "0.0.1", + "name": "@0x/dev-tools-pages", + "version": "0.0.2", "engines": { "node": ">=6.12" }, @@ -16,7 +16,7 @@ }, "license": "Apache-2.0", "dependencies": { - "@0xproject/react-shared": "^1.0.15", + "@0x/react-shared": "^1.0.17", "basscss": "^8.0.3", "bowser": "^1.9.3", "less": "^2.7.2", diff --git a/packages/dev-tools-pages/ts/components/ui/text.tsx b/packages/dev-tools-pages/ts/components/ui/text.tsx index 8e314beae..b4a61457f 100644 --- a/packages/dev-tools-pages/ts/components/ui/text.tsx +++ b/packages/dev-tools-pages/ts/components/ui/text.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import { darken } from 'polished'; import * as React from 'react'; import styled from 'styled-components'; diff --git a/packages/dev-tools-pages/tslint.json b/packages/dev-tools-pages/tslint.json index b55ffe90f..50f5be4f6 100644 --- a/packages/dev-tools-pages/tslint.json +++ b/packages/dev-tools-pages/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "no-implicit-dependencies": false, "no-object-literal-type-assertion": false, diff --git a/packages/dev-utils/CHANGELOG.json b/packages/dev-utils/CHANGELOG.json index b9bd7d080..fd5a8d446 100644 --- a/packages/dev-utils/CHANGELOG.json +++ b/packages/dev-utils/CHANGELOG.json @@ -6,7 +6,8 @@ "note": "Make web3-provider-engine types a 'dependency' so it's available to users of the library", "pr": 1105 } - ] + ], + "timestamp": 1539871071 }, { "version": "1.0.12", diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 00301d9c9..a6b60884e 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.13 - _October 18, 2018_ + + * Make web3-provider-engine types a 'dependency' so it's available to users of the library (#1105) + ## v1.0.12 - _October 4, 2018_ * Dependencies updated @@ -37,7 +41,7 @@ CHANGELOG * Dependencies updated -## v1.0.4 - _August 13, 2018_ +## v1.0.4 - _August 14, 2018_ * Dependencies updated diff --git a/packages/dev-utils/README.md b/packages/dev-utils/README.md index 1c3bd3a3f..73b0b8816 100644 --- a/packages/dev-utils/README.md +++ b/packages/dev-utils/README.md @@ -16,14 +16,14 @@ Boolean env variables should be either `true` or `false`. Defaults to `false` if ## Install ```bash -yarn add @0xproject/dev-utils +yarn add @0x/dev-utils ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -52,13 +52,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/dev-utils yarn build +PKG=@0x/dev-utils yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/dev-utils yarn watch +PKG=@0x/dev-utils yarn watch ``` ### Clean diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 9d054e6bf..d1b1efc87 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/dev-utils", - "version": "1.0.12", + "name": "@0x/dev-utils", + "version": "1.0.13", "engines": { "node": ">=6.12" }, @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/dev-utils/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/lodash": "4.14.104", "@types/mocha": "^2.2.42", "make-promises-safe": "^1.1.0", @@ -41,14 +41,14 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/subproviders": "^2.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/subproviders": "^2.1.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@types/web3-provider-engine": "^14.0.0", "chai": "^4.0.1", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "lodash": "^4.17.5" }, "publishConfig": { diff --git a/packages/dev-utils/src/blockchain_lifecycle.ts b/packages/dev-utils/src/blockchain_lifecycle.ts index a48cb0856..e9687787f 100644 --- a/packages/dev-utils/src/blockchain_lifecycle.ts +++ b/packages/dev-utils/src/blockchain_lifecycle.ts @@ -1,5 +1,5 @@ -import { logUtils } from '@0xproject/utils'; -import { NodeType, Web3Wrapper } from '@0xproject/web3-wrapper'; +import { logUtils } from '@0x/utils'; +import { NodeType, Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; // HACK(albrow): 🐉 We have to do this so that debug.setHead works correctly. diff --git a/packages/dev-utils/src/callback_error_reporter.ts b/packages/dev-utils/src/callback_error_reporter.ts index e69ce1c05..b993bf22a 100644 --- a/packages/dev-utils/src/callback_error_reporter.ts +++ b/packages/dev-utils/src/callback_error_reporter.ts @@ -1,7 +1,7 @@ import * as chai from 'chai'; import * as _ from 'lodash'; -import { DoneCallback } from '@0xproject/types'; +import { DoneCallback } from '@0x/types'; const expect = chai.expect; diff --git a/packages/dev-utils/src/web3_factory.ts b/packages/dev-utils/src/web3_factory.ts index 7c86d3df4..b22bcc88b 100644 --- a/packages/dev-utils/src/web3_factory.ts +++ b/packages/dev-utils/src/web3_factory.ts @@ -4,7 +4,7 @@ import { GanacheSubprovider, RPCSubprovider, Web3ProviderEngine, -} from '@0xproject/subproviders'; +} from '@0x/subproviders'; import * as fs from 'fs'; import * as _ from 'lodash'; diff --git a/packages/dev-utils/test/blockchain_lifecycle_test.ts b/packages/dev-utils/test/blockchain_lifecycle_test.ts index 7d5e15fbe..d7e54f0e8 100644 --- a/packages/dev-utils/test/blockchain_lifecycle_test.ts +++ b/packages/dev-utils/test/blockchain_lifecycle_test.ts @@ -1,4 +1,4 @@ -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/dev-utils/test/rpc_test.ts b/packages/dev-utils/test/rpc_test.ts index dfbc0f7b2..f8cea4580 100644 --- a/packages/dev-utils/test/rpc_test.ts +++ b/packages/dev-utils/test/rpc_test.ts @@ -1,4 +1,4 @@ -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { BlockParamLiteral } from 'ethereum-types'; import 'mocha'; diff --git a/packages/dev-utils/tslint.json b/packages/dev-utils/tslint.json index 015dce851..631f46bca 100644 --- a/packages/dev-utils/tslint.json +++ b/packages/dev-utils/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "completed-docs": false } diff --git a/packages/ethereum-types/CHANGELOG.json b/packages/ethereum-types/CHANGELOG.json index 60fb8c806..b042c4588 100644 --- a/packages/ethereum-types/CHANGELOG.json +++ b/packages/ethereum-types/CHANGELOG.json @@ -1,11 +1,20 @@ [ { - "version": "1.1.0", + "version": "1.1.1", "changes": [ { "note": "Add `JSONRPCResponseError` and error field on `JSONRPCResponsePayload`.", "pr": 1102 } + ], + "timestamp": 1539871071 + }, + { + "version": "1.1.0", + "changes": [ + { + "note": "Unpublished package." + } ] }, { diff --git a/packages/ethereum-types/CHANGELOG.md b/packages/ethereum-types/CHANGELOG.md index 6e1965964..73ea54204 100644 --- a/packages/ethereum-types/CHANGELOG.md +++ b/packages/ethereum-types/CHANGELOG.md @@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.1.1 - _October 18, 2018_ + + * Add `JSONRPCResponseError` and error field on `JSONRPCResponsePayload`. (#1102) + +## v1.1.0 - _Invalid date_ + + * Unpublished package. + ## v1.0.11 - _October 4, 2018_ * Dependencies updated @@ -33,7 +41,7 @@ CHANGELOG * Dependencies updated -## v1.0.4 - _August 13, 2018_ +## v1.0.4 - _August 14, 2018_ * Dependencies updated @@ -55,6 +63,6 @@ CHANGELOG * Add `TransactionReceiptStatus` type (#812) * Add Artifact types: `CompilerSettings`, `CompilerOptions`, `OutputField` (#924) -## v0.0.2 - _May 31, 2018_ +## v0.0.2 - _June 1, 2018_ * Initial publish (#642) diff --git a/packages/ethereum-types/package.json b/packages/ethereum-types/package.json index 954b047e7..d24e39dfd 100644 --- a/packages/ethereum-types/package.json +++ b/packages/ethereum-types/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-types", - "version": "1.0.11", + "version": "1.1.1", "engines": { "node": ">=6.12" }, @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/ethereum-types/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "make-promises-safe": "^1.1.0", "shx": "^0.2.2", "tslint": "5.11.0", diff --git a/packages/ethereum-types/tslint.json b/packages/ethereum-types/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/ethereum-types/tslint.json +++ b/packages/ethereum-types/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/fill-scenarios/CHANGELOG.json b/packages/fill-scenarios/CHANGELOG.json index f8a2eab70..b9840957e 100644 --- a/packages/fill-scenarios/CHANGELOG.json +++ b/packages/fill-scenarios/CHANGELOG.json @@ -6,7 +6,8 @@ "note": "Updated to use new @0xproject/contract-artifacts and @0xproject/abi-gen-wrappers packages", "pr": 1105 } - ] + ], + "timestamp": 1539871071 }, { "version": "1.0.7", diff --git a/packages/fill-scenarios/CHANGELOG.md b/packages/fill-scenarios/CHANGELOG.md index bf6fcf13e..20ef1322c 100644 --- a/packages/fill-scenarios/CHANGELOG.md +++ b/packages/fill-scenarios/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.8 - _October 18, 2018_ + + * Updated to use new @0xproject/contract-artifacts and @0xproject/abi-gen-wrappers packages (#1105) + ## v1.0.7 - _October 4, 2018_ * Dependencies updated @@ -41,7 +45,7 @@ CHANGELOG * Dependencies updated -## v1.0.1-rc.3 - _August 13, 2018_ +## v1.0.1-rc.3 - _August 14, 2018_ * Updated to use latest orderFactory interface, fixed `feeRecipient` spelling error in public interface (#936) * Dependencies updated diff --git a/packages/fill-scenarios/README.md b/packages/fill-scenarios/README.md index 67df0941f..794b70e56 100644 --- a/packages/fill-scenarios/README.md +++ b/packages/fill-scenarios/README.md @@ -1,18 +1,18 @@ -## @0xproject/fill-scenarios +## @0x/fill-scenarios 0x order fill scenario generator ## Installation ```bash -yarn add @0xproject/fill-scenarios +yarn add @0x/fill-scenarios ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -41,13 +41,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/fill-scenarios yarn build +PKG=@0x/fill-scenarios yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/fill-scenarios yarn watch +PKG=@0x/fill-scenarios yarn watch ``` ### Clean diff --git a/packages/fill-scenarios/package.json b/packages/fill-scenarios/package.json index fc30f11dc..0e1303259 100644 --- a/packages/fill-scenarios/package.json +++ b/packages/fill-scenarios/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/fill-scenarios", - "version": "1.0.7", + "name": "@0x/fill-scenarios", + "version": "1.0.8", "description": "0x order fill scenario generator", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -20,7 +20,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/fill-scenarios/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/lodash": "4.14.104", "make-promises-safe": "^1.1.0", "shx": "^0.2.2", @@ -28,15 +28,15 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/abi-gen-wrappers": "^1.0.0", - "@0xproject/base-contract": "^3.0.1", - "@0xproject/contract-artifacts": "^1.0.0", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", - "ethereum-types": "^1.0.11", + "@0x/abi-gen-wrappers": "^1.0.1", + "@0x/base-contract": "^3.0.2", + "@0x/contract-artifacts": "^1.0.1", + "@0x/order-utils": "^2.0.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", + "ethereum-types": "^1.1.1", "ethers": "~4.0.4", "lodash": "^4.17.5" }, diff --git a/packages/fill-scenarios/src/fill_scenarios.ts b/packages/fill-scenarios/src/fill_scenarios.ts index 131828e8d..0154bcd0a 100644 --- a/packages/fill-scenarios/src/fill_scenarios.ts +++ b/packages/fill-scenarios/src/fill_scenarios.ts @@ -1,10 +1,10 @@ -import { DummyERC20TokenContract, DummyERC721TokenContract, ExchangeContract } from '@0xproject/abi-gen-wrappers'; -import * as artifacts from '@0xproject/contract-artifacts'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { orderFactory } from '@0xproject/order-utils/lib/src/order_factory'; -import { AssetProxyId, ERC721AssetData, OrderWithoutExchangeAddress, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { DummyERC20TokenContract, DummyERC721TokenContract, ExchangeContract } from '@0x/abi-gen-wrappers'; +import * as artifacts from '@0x/contract-artifacts'; +import { assetDataUtils } from '@0x/order-utils'; +import { orderFactory } from '@0x/order-utils/lib/src/order_factory'; +import { AssetProxyId, ERC721AssetData, OrderWithoutExchangeAddress, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/fill-scenarios/tslint.json b/packages/fill-scenarios/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/fill-scenarios/tslint.json +++ b/packages/fill-scenarios/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/instant/.discharge.json b/packages/instant/.discharge.json new file mode 100644 index 000000000..9ade97d01 --- /dev/null +++ b/packages/instant/.discharge.json @@ -0,0 +1,13 @@ +{ + "domain": "0x-instant-dogfood", + "build_command": "yarn build:umd:prod", + "upload_directory": "public", + "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/packages/instant/README.md b/packages/instant/README.md index 25aca9d3b..07b01ac95 100644 --- a/packages/instant/README.md +++ b/packages/instant/README.md @@ -1,9 +1,9 @@ -## @0xproject/instant +## @0x/instant ## Installation ```bash -yarn add @0xproject/instant +yarn add @0x/instant ``` **Import** @@ -11,20 +11,20 @@ yarn add @0xproject/instant **CommonJS module** ```typescript -import { ZeroExInstant } from '@0xproject/instant'; +import { ZeroExInstant } from '@0x/instant'; ``` or ```javascript -var ZeroExInstant = require('@0xproject/instant').ZeroExInstant; +var ZeroExInstant = require('@0x/instant').ZeroExInstant; ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -46,6 +46,18 @@ The package is also available as a UMD module named `zeroExInstant`. </body> ``` +## Deploying + +You can deploy a work-in-progress version of 0x Instant at http://0x-instant-dogfood.s3-website-us-east-1.amazonaws.com for easy sharing. + +To build and deploy the site run + +``` +yarn deploy +``` + +**NOTE: On deploying the site, it will say the site is available at a non-existent URL. Please ignore and use the (now updated) URL above.** + ## Contributing We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository. @@ -71,13 +83,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/instant yarn build +PKG=@0x/instant yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/instant yarn watch +PKG=@0x/instant yarn watch ``` ### Clean diff --git a/packages/instant/package.json b/packages/instant/package.json index 0c4b470fa..421802530 100644 --- a/packages/instant/package.json +++ b/packages/instant/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/instant", - "version": "0.0.2", + "name": "@0x/instant", + "version": "0.0.3", "engines": { "node": ">=6.12" }, @@ -22,6 +22,7 @@ "rebuild_and_test": "run-s clean build test", "test:circleci": "yarn test:coverage", "clean": "shx rm -rf lib coverage scripts", + "deploy": "discharge deploy", "manual:postpublish": "yarn build; node ./scripts/postpublish.js" }, "config": { @@ -43,23 +44,26 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/instant/README.md", "dependencies": { - "@0xproject/asset-buyer": "^2.0.0", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^2.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", - "ethereum-types": "^1.0.11", + "@0x/asset-buyer": "^2.1.0", + "@0x/order-utils": "^2.0.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", + "ethereum-types": "^1.1.1", "lodash": "^4.17.10", "polished": "^2.2.0", "react": "^16.5.2", "react-dom": "^16.5.2", "react-redux": "^5.0.7", "redux": "^4.0.0", + "redux-devtools-extension": "^2.13.5", "styled-components": "^3.4.9", "ts-optchain": "^0.1.1" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", + "@static/discharge": "^1.2.2", "@types/enzyme": "^3.1.14", "@types/enzyme-adapter-react-16": "^1.0.3", "@types/jest": "^23.3.5", diff --git a/packages/instant/public/index.html b/packages/instant/public/index.html index fb041745e..14555fc64 100644 --- a/packages/instant/public/index.html +++ b/packages/instant/public/index.html @@ -25,7 +25,8 @@ <div id="zeroExInstantContainer"></div> <script> zeroExInstant.render({ - + liquiditySource: 'https://api.radarrelay.com/0x/v2/', + assetData: '0xf47261b0000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498', }); </script> </body> diff --git a/packages/instant/src/components/amount_input.tsx b/packages/instant/src/components/amount_input.tsx index 7644f5f67..c89fb05ad 100644 --- a/packages/instant/src/components/amount_input.tsx +++ b/packages/instant/src/components/amount_input.tsx @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; diff --git a/packages/instant/src/components/amount_placeholder.tsx b/packages/instant/src/components/amount_placeholder.tsx new file mode 100644 index 000000000..6ef8f0ac3 --- /dev/null +++ b/packages/instant/src/components/amount_placeholder.tsx @@ -0,0 +1,32 @@ +import * as React from 'react'; + +import { ColorOption } from '../style/theme'; + +import { Pulse } from './animations/pulse'; + +import { Text } from './ui'; + +interface PlainPlaceholder { + color: ColorOption; +} +const PlainPlaceholder: React.StatelessComponent<PlainPlaceholder> = props => ( + <Text fontWeight="bold" fontColor={props.color}> + — + </Text> +); + +export interface AmountPlaceholderProps { + color: ColorOption; + isPulsating: boolean; +} +export const AmountPlaceholder: React.StatelessComponent<AmountPlaceholderProps> = props => { + if (props.isPulsating) { + return ( + <Pulse> + <PlainPlaceholder color={props.color} /> + </Pulse> + ); + } else { + return <PlainPlaceholder color={props.color} />; + } +}; diff --git a/packages/instant/src/components/animations/full_rotation.tsx b/packages/instant/src/components/animations/full_rotation.tsx new file mode 100644 index 000000000..9adb565f9 --- /dev/null +++ b/packages/instant/src/components/animations/full_rotation.tsx @@ -0,0 +1,24 @@ +import { keyframes, styled } from '../../style/theme'; + +interface FullRotationProps { + height: string; + width: string; +} +const rotatingKeyframes = keyframes` +from { + transform: rotate(0deg); +} + +to { + transform: rotate(360deg); +} +`; + +export const FullRotation = + styled.div < + FullRotationProps > + ` + animation: ${rotatingKeyframes} 2s linear infinite; + height: ${props => props.height}; + width: ${props => props.width}; +`; diff --git a/packages/instant/src/components/animations/pulse.tsx b/packages/instant/src/components/animations/pulse.tsx new file mode 100644 index 000000000..01d6ea070 --- /dev/null +++ b/packages/instant/src/components/animations/pulse.tsx @@ -0,0 +1,15 @@ +import { keyframes, styled } from '../../style/theme'; + +const pulsingKeyframes = keyframes` + 0%, 100% { + opacity: 0.2; + } + 50% { + opacity: 100; + } +`; +export const Pulse = styled.div` + animation-name: ${pulsingKeyframes} + animation-duration: 2s; + animation-iteration-count: infinite; +`; diff --git a/packages/instant/src/components/animations/slide_animations.tsx b/packages/instant/src/components/animations/slide_animations.tsx new file mode 100644 index 000000000..1f10a2ed6 --- /dev/null +++ b/packages/instant/src/components/animations/slide_animations.tsx @@ -0,0 +1,54 @@ +import * as React from 'react'; + +import { keyframes, styled } from '../../style/theme'; + +const slideKeyframeGenerator = (fromY: string, toY: string) => keyframes` + from { + position: relative; + top: ${fromY}; + } + + to { + position: relative; + top: ${toY}; + } +`; + +export interface SlideAnimationProps { + keyframes: string; + animationType: string; + animationDirection?: string; +} + +export const SlideAnimation = + styled.div < + SlideAnimationProps > + ` + animation-name: ${props => props.keyframes}; + animation-duration: 0.3s; + animation-timing-function: ${props => props.animationType}; + animation-delay: 0s; + animation-iteration-count: 1; + animation-fill-mode: ${props => props.animationDirection || 'none'}; + position: relative; +`; + +export interface SlideAnimationComponentProps { + downY: string; +} + +export const SlideUpAnimation: React.StatelessComponent<SlideAnimationComponentProps> = props => ( + <SlideAnimation animationType="ease-in" keyframes={slideKeyframeGenerator(props.downY, '0px')}> + {props.children} + </SlideAnimation> +); + +export const SlideDownAnimation: React.StatelessComponent<SlideAnimationComponentProps> = props => ( + <SlideAnimation + animationDirection="forwards" + animationType="cubic-bezier(0.25, 0.1, 0.25, 1)" + keyframes={slideKeyframeGenerator('0px', props.downY)} + > + {props.children} + </SlideAnimation> +); diff --git a/packages/instant/src/components/animations/slide_up_and_down_animation.tsx b/packages/instant/src/components/animations/slide_up_and_down_animation.tsx deleted file mode 100644 index 9c18e0933..000000000 --- a/packages/instant/src/components/animations/slide_up_and_down_animation.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import * as React from 'react'; - -import { keyframes, styled } from '../../style/theme'; - -const slideKeyframeGenerator = (fromY: string, toY: string) => keyframes` - from { - position: relative; - top: ${fromY}; - } - - to { - position: relative; - top: ${toY}; - } -`; - -export interface SlideAnimationProps { - keyframes: string; - animationType: string; - animationDirection?: string; -} - -export const SlideAnimation = - styled.div < - SlideAnimationProps > - ` - animation-name: ${props => props.keyframes}; - animation-duration: 0.3s; - animation-timing-function: ${props => props.animationType}; - animation-delay: 0s; - animation-iteration-count: 1; - animation-fill-mode: ${props => props.animationDirection || 'none'}; - position: relative; -`; - -export interface SlideAnimationComponentProps { - downY: string; -} - -export const SlideUpAnimationComponent: React.StatelessComponent<SlideAnimationComponentProps> = props => ( - <SlideAnimation animationType="ease-in" keyframes={slideKeyframeGenerator(props.downY, '0px')}> - {props.children} - </SlideAnimation> -); - -export const SlideDownAnimationComponent: React.StatelessComponent<SlideAnimationComponentProps> = props => ( - <SlideAnimation - animationDirection="forwards" - animationType="cubic-bezier(0.25, 0.1, 0.25, 1)" - keyframes={slideKeyframeGenerator('0px', props.downY)} - > - {props.children} - </SlideAnimation> -); - -export interface SlideUpAndDownAnimationProps extends SlideAnimationComponentProps { - delayMs: number; -} - -enum SlideState { - Up = 'up', - Down = 'down', -} -interface SlideUpAndDownState { - slideState: SlideState; -} - -export class SlideUpAndDownAnimation extends React.Component<SlideUpAndDownAnimationProps, SlideUpAndDownState> { - public state = { - slideState: SlideState.Up, - }; - - private _timeoutId?: number; - public render(): React.ReactNode { - return this._renderSlide(); - } - public componentDidMount(): void { - this._timeoutId = window.setTimeout(() => { - this.setState({ - slideState: SlideState.Down, - }); - }, this.props.delayMs); - - return; - } - public componentWillUnmount(): void { - if (this._timeoutId) { - window.clearTimeout(this._timeoutId); - } - } - private _renderSlide(): React.ReactNode { - const SlideComponent = this.state.slideState === 'up' ? SlideUpAnimationComponent : SlideDownAnimationComponent; - - return <SlideComponent downY={this.props.downY}>{this.props.children}</SlideComponent>; - } -} diff --git a/packages/instant/src/components/asset_amount_input.tsx b/packages/instant/src/components/asset_amount_input.tsx index 7c6b03ee9..c03ef1cf3 100644 --- a/packages/instant/src/components/asset_amount_input.tsx +++ b/packages/instant/src/components/asset_amount_input.tsx @@ -1,18 +1,19 @@ -import { AssetProxyId } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; -import { assetMetaData } from '../data/asset_meta_data'; import { ColorOption } from '../style/theme'; +import { ERC20Asset } from '../types'; +import { assetUtils } from '../util/asset'; import { util } from '../util/util'; import { AmountInput, AmountInputProps } from './amount_input'; import { Container, Text } from './ui'; +// Asset amounts only apply to ERC20 assets export interface AssetAmountInputProps extends AmountInputProps { - assetData?: string; - onChange: (value?: BigNumber, assetData?: string) => void; + asset?: ERC20Asset; + onChange: (value?: BigNumber, asset?: ERC20Asset) => void; } export class AssetAmountInput extends React.Component<AssetAmountInputProps> { @@ -20,33 +21,19 @@ export class AssetAmountInput extends React.Component<AssetAmountInputProps> { onChange: util.boundNoop, }; public render(): React.ReactNode { - const { assetData, onChange, ...rest } = this.props; + const { asset, onChange, ...rest } = this.props; return ( <Container> <AmountInput {...rest} onChange={this._handleChange} /> <Container display="inline-block" marginLeft="10px"> <Text fontSize={rest.fontSize} fontColor={ColorOption.white} textTransform="uppercase"> - {this._getAssetSymbolLabel()} + {assetUtils.bestNameForAsset(asset)} </Text> </Container> </Container> ); } - private readonly _getAssetSymbolLabel = (): string => { - const unknownLabel = '???'; - if (_.isUndefined(this.props.assetData)) { - return unknownLabel; - } - const metaData = assetMetaData[this.props.assetData]; - if (_.isUndefined(metaData)) { - return unknownLabel; - } - if (metaData.assetProxyId === AssetProxyId.ERC20) { - return metaData.symbol; - } - return unknownLabel; - }; private readonly _handleChange = (value?: BigNumber): void => { - this.props.onChange(value, this.props.assetData); + this.props.onChange(value, this.props.asset); }; } diff --git a/packages/instant/src/components/buy_button.tsx b/packages/instant/src/components/buy_button.tsx index 0706817c9..0d35d36ca 100644 --- a/packages/instant/src/components/buy_button.tsx +++ b/packages/instant/src/components/buy_button.tsx @@ -1,20 +1,20 @@ -import { BuyQuote } from '@0xproject/asset-buyer'; +import { AssetBuyer, AssetBuyerError, BuyQuote } from '@0x/asset-buyer'; import * as _ from 'lodash'; import * as React from 'react'; import { ColorOption } from '../style/theme'; -import { assetBuyer } from '../util/asset_buyer'; import { util } from '../util/util'; import { web3Wrapper } from '../util/web3_wrapper'; -import { Button, Container, Text } from './ui'; +import { Button, Text } from './ui'; export interface BuyButtonProps { buyQuote?: BuyQuote; + assetBuyer?: AssetBuyer; onClick: (buyQuote: BuyQuote) => void; onBuySuccess: (buyQuote: BuyQuote, txnHash: string) => void; onBuyFailure: (buyQuote: BuyQuote, tnxHash?: string) => void; - text: string; + onBuyPrevented: (buyQuote: BuyQuote, preventedError: Error) => void; } export class BuyButton extends React.Component<BuyButtonProps> { @@ -24,29 +24,31 @@ export class BuyButton extends React.Component<BuyButtonProps> { onBuyFailure: util.boundNoop, }; public render(): React.ReactNode { - const shouldDisableButton = _.isUndefined(this.props.buyQuote); + const shouldDisableButton = _.isUndefined(this.props.buyQuote) || _.isUndefined(this.props.assetBuyer); return ( - <Container padding="20px" width="100%"> - <Button width="100%" onClick={this._handleClick} isDisabled={shouldDisableButton}> - <Text fontColor={ColorOption.white} fontWeight={600} fontSize="20px"> - {this.props.text} - </Text> - </Button> - </Container> + <Button width="100%" onClick={this._handleClick} isDisabled={shouldDisableButton}> + <Text fontColor={ColorOption.white} fontWeight={600} fontSize="20px"> + Buy + </Text> + </Button> ); } private readonly _handleClick = async () => { // The button is disabled when there is no buy quote anyway. - if (_.isUndefined(this.props.buyQuote)) { + if (_.isUndefined(this.props.buyQuote) || _.isUndefined(this.props.assetBuyer)) { return; } this.props.onClick(this.props.buyQuote); let txnHash; try { - txnHash = await assetBuyer.executeBuyQuoteAsync(this.props.buyQuote); - await web3Wrapper.awaitTransactionSuccessAsync(txnHash); - this.props.onBuySuccess(this.props.buyQuote, txnHash); - } catch { + txnHash = await this.props.assetBuyer.executeBuyQuoteAsync(this.props.buyQuote); + const txnReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txnHash); + this.props.onBuySuccess(this.props.buyQuote, txnReceipt.transactionHash); + } catch (e) { + if (e instanceof Error && e.message === AssetBuyerError.SignatureRequestDenied) { + this.props.onBuyPrevented(this.props.buyQuote, e); + return; + } this.props.onBuyFailure(this.props.buyQuote, txnHash); } }; diff --git a/packages/instant/src/components/buy_order_state_button.tsx b/packages/instant/src/components/buy_order_state_button.tsx new file mode 100644 index 000000000..5bc965c7d --- /dev/null +++ b/packages/instant/src/components/buy_order_state_button.tsx @@ -0,0 +1,23 @@ +import * as React from 'react'; + +import { PlacingOrderButton } from '../components/placing_order_button'; +import { SelectedAssetBuyButton } from '../containers/selected_asset_buy_button'; +import { SelectedAssetRetryButton } from '../containers/selected_asset_retry_button'; +import { SelectedAssetViewTransactionButton } from '../containers/selected_asset_view_transaction_button'; +import { AsyncProcessState } from '../types'; + +export interface BuyOrderStateButtonProps { + buyOrderProcessingState: AsyncProcessState; +} + +export const BuyOrderStateButton: React.StatelessComponent<BuyOrderStateButtonProps> = props => { + if (props.buyOrderProcessingState === AsyncProcessState.FAILURE) { + return <SelectedAssetRetryButton />; + } else if (props.buyOrderProcessingState === AsyncProcessState.SUCCESS) { + return <SelectedAssetViewTransactionButton />; + } else if (props.buyOrderProcessingState === AsyncProcessState.PENDING) { + return <PlacingOrderButton />; + } + + return <SelectedAssetBuyButton />; +}; diff --git a/packages/instant/src/components/instant_heading.tsx b/packages/instant/src/components/instant_heading.tsx index 492c1b2c0..ed753a3bd 100644 --- a/packages/instant/src/components/instant_heading.tsx +++ b/packages/instant/src/components/instant_heading.tsx @@ -1,59 +1,124 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import { SelectedAssetAmountInput } from '../containers/selected_asset_amount_input'; import { ColorOption } from '../style/theme'; +import { AsyncProcessState, OrderState } from '../types'; import { format } from '../util/format'; +import { AmountPlaceholder } from './amount_placeholder'; import { Container, Flex, Text } from './ui'; +import { Icon } from './ui/icon'; export interface InstantHeadingProps { selectedAssetAmount?: BigNumber; totalEthBaseAmount?: BigNumber; ethUsdPrice?: BigNumber; + quoteRequestState: AsyncProcessState; + buyOrderState: OrderState; } -const displaytotalEthBaseAmount = ({ selectedAssetAmount, totalEthBaseAmount }: InstantHeadingProps): string => { - if (_.isUndefined(selectedAssetAmount)) { - return '0 ETH'; - } - return format.ethBaseAmount(totalEthBaseAmount, 4, '...loading'); -}; +const PLACEHOLDER_COLOR = ColorOption.white; +const ICON_WIDTH = 34; +const ICON_HEIGHT = 34; +const ICON_COLOR = ColorOption.white; -const displayUsdAmount = ({ totalEthBaseAmount, selectedAssetAmount, ethUsdPrice }: InstantHeadingProps): string => { - if (_.isUndefined(selectedAssetAmount)) { - return '$0.00'; - } - return format.ethBaseAmountInUsd(totalEthBaseAmount, ethUsdPrice, 2, '...loading'); -}; - -export const InstantHeading: React.StatelessComponent<InstantHeadingProps> = props => ( - <Container backgroundColor={ColorOption.primaryColor} padding="20px" width="100%" borderRadius="3px 3px 0px 0px"> - <Container marginBottom="5px"> - <Text - letterSpacing="1px" - fontColor={ColorOption.white} - opacity={0.7} - fontWeight={500} - textTransform="uppercase" - fontSize="12px" +export class InstantHeading extends React.Component<InstantHeadingProps, {}> { + public render(): React.ReactNode { + const iconOrAmounts = this._renderIcon() || this._renderAmountsSection(); + return ( + <Container + backgroundColor={ColorOption.primaryColor} + padding="20px" + width="100%" + borderRadius="3px 3px 0px 0px" > - I want to buy - </Text> - </Container> - <Flex direction="row" justify="space-between"> - <SelectedAssetAmountInput fontSize="45px" /> - <Flex direction="column" justify="space-between"> <Container marginBottom="5px"> - <Text fontSize="16px" fontColor={ColorOption.white} fontWeight={500}> - {displaytotalEthBaseAmount(props)} + <Text + letterSpacing="1px" + fontColor={ColorOption.white} + opacity={0.7} + fontWeight={500} + textTransform="uppercase" + fontSize="12px" + > + {this._renderTopText()} </Text> </Container> - <Text fontSize="16px" fontColor={ColorOption.white} opacity={0.7}> - {displayUsdAmount(props)} - </Text> - </Flex> - </Flex> - </Container> -); + <Flex direction="row" justify="space-between"> + <SelectedAssetAmountInput fontSize="45px" /> + <Flex direction="column" justify="space-between"> + {iconOrAmounts} + </Flex> + </Flex> + </Container> + ); + } + + private _renderAmountsSection(): React.ReactNode { + return ( + <Container> + <Container marginBottom="5px">{this._placeholderOrAmount(this._ethAmount)}</Container> + <Container opacity={0.7}>{this._placeholderOrAmount(this._dollarAmount)}</Container> + </Container> + ); + } + + private _renderIcon(): React.ReactNode { + const processState = this.props.buyOrderState.processState; + + if (processState === AsyncProcessState.FAILURE) { + return <Icon icon={'failed'} width={ICON_WIDTH} height={ICON_HEIGHT} color={ICON_COLOR} />; + } else if (processState === AsyncProcessState.SUCCESS) { + return <Icon icon={'success'} width={ICON_WIDTH} height={ICON_HEIGHT} color={ICON_COLOR} />; + } + return undefined; + } + + private _renderTopText(): React.ReactNode { + const processState = this.props.buyOrderState.processState; + if (processState === AsyncProcessState.FAILURE) { + return 'Order failed'; + } else if (processState === AsyncProcessState.SUCCESS) { + return 'Tokens received!'; + } + + return 'I want to buy'; + } + + private _placeholderOrAmount(amountFunction: () => React.ReactNode): React.ReactNode { + if (this.props.quoteRequestState === AsyncProcessState.PENDING) { + return <AmountPlaceholder isPulsating={true} color={PLACEHOLDER_COLOR} />; + } + if (_.isUndefined(this.props.selectedAssetAmount)) { + return <AmountPlaceholder isPulsating={false} color={PLACEHOLDER_COLOR} />; + } + return amountFunction(); + } + + private readonly _ethAmount = (): React.ReactNode => { + return ( + <Text fontSize="16px" fontColor={ColorOption.white} fontWeight={500}> + {format.ethBaseAmount( + this.props.totalEthBaseAmount, + 4, + <AmountPlaceholder isPulsating={false} color={PLACEHOLDER_COLOR} />, + )} + </Text> + ); + }; + + private readonly _dollarAmount = (): React.ReactNode => { + return ( + <Text fontSize="16px" fontColor={ColorOption.white}> + {format.ethBaseAmountInUsd( + this.props.totalEthBaseAmount, + this.props.ethUsdPrice, + 2, + <AmountPlaceholder isPulsating={false} color={ColorOption.white} />, + )} + </Text> + ); + }; +} diff --git a/packages/instant/src/components/order_details.tsx b/packages/instant/src/components/order_details.tsx index a15ff411b..704009d89 100644 --- a/packages/instant/src/components/order_details.tsx +++ b/packages/instant/src/components/order_details.tsx @@ -1,5 +1,5 @@ -import { BuyQuoteInfo } from '@0xproject/asset-buyer'; -import { BigNumber } from '@0xproject/utils'; +import { BuyQuoteInfo } from '@0x/asset-buyer'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import { oc } from 'ts-optchain'; @@ -7,13 +7,14 @@ import { oc } from 'ts-optchain'; import { ColorOption } from '../style/theme'; import { format } from '../util/format'; +import { AmountPlaceholder } from './amount_placeholder'; import { Container, Flex, Text } from './ui'; export interface OrderDetailsProps { buyQuoteInfo?: BuyQuoteInfo; ethUsdPrice?: BigNumber; + isLoading: boolean; } - export class OrderDetails extends React.Component<OrderDetailsProps> { public render(): React.ReactNode { const { buyQuoteInfo, ethUsdPrice } = this.props; @@ -39,13 +40,20 @@ export class OrderDetails extends React.Component<OrderDetailsProps> { ethAmount={ethAssetPrice} ethUsdPrice={ethUsdPrice} isEthAmountInBaseUnits={false} + isLoading={this.props.isLoading} + /> + <EthAmountRow + rowLabel="Fee" + ethAmount={ethTokenFee} + ethUsdPrice={ethUsdPrice} + isLoading={this.props.isLoading} /> - <EthAmountRow rowLabel="Fee" ethAmount={ethTokenFee} ethUsdPrice={ethUsdPrice} /> <EthAmountRow rowLabel="Total Cost" ethAmount={totalEthAmount} ethUsdPrice={ethUsdPrice} shouldEmphasize={true} + isLoading={this.props.isLoading} /> </Container> ); @@ -58,43 +66,50 @@ export interface EthAmountRowProps { isEthAmountInBaseUnits?: boolean; ethUsdPrice?: BigNumber; shouldEmphasize?: boolean; + isLoading: boolean; } -export const EthAmountRow: React.StatelessComponent<EthAmountRowProps> = ({ - rowLabel, - ethAmount, - isEthAmountInBaseUnits, - ethUsdPrice, - shouldEmphasize, -}) => { - const fontWeight = shouldEmphasize ? 700 : 400; - const usdFormatter = isEthAmountInBaseUnits ? format.ethBaseAmountInUsd : format.ethUnitAmountInUsd; - const ethFormatter = isEthAmountInBaseUnits ? format.ethBaseAmount : format.ethUnitAmount; - const usdPriceSection = _.isUndefined(ethUsdPrice) ? null : ( - <Container marginRight="3px" display="inline-block"> - <Text fontColor={ColorOption.lightGrey}>({usdFormatter(ethAmount, ethUsdPrice)})</Text> - </Container> - ); - return ( - <Container padding="10px 0px" borderTop="1px dashed" borderColor={ColorOption.feintGrey}> - <Flex justify="space-between"> - <Text fontWeight={fontWeight} fontColor={ColorOption.grey}> - {rowLabel} - </Text> - <Container> - {usdPriceSection} +export class EthAmountRow extends React.Component<EthAmountRowProps> { + public static defaultProps = { + shouldEmphasize: false, + isEthAmountInBaseUnits: true, + }; + public render(): React.ReactNode { + const { rowLabel, ethAmount, isEthAmountInBaseUnits, shouldEmphasize, isLoading } = this.props; + + const fontWeight = shouldEmphasize ? 700 : 400; + const ethFormatter = isEthAmountInBaseUnits ? format.ethBaseAmount : format.ethUnitAmount; + return ( + <Container padding="10px 0px" borderTop="1px dashed" borderColor={ColorOption.feintGrey}> + <Flex justify="space-between"> <Text fontWeight={fontWeight} fontColor={ColorOption.grey}> - {ethFormatter(ethAmount)} + {rowLabel} </Text> - </Container> - </Flex> - </Container> - ); -}; - -EthAmountRow.defaultProps = { - shouldEmphasize: false, - isEthAmountInBaseUnits: true, -}; - -EthAmountRow.displayName = 'EthAmountRow'; + <Container> + {this._renderUsdSection()} + <Text fontWeight={fontWeight} fontColor={ColorOption.grey}> + {ethFormatter( + ethAmount, + 4, + <Container opacity={0.5}> + <AmountPlaceholder color={ColorOption.lightGrey} isPulsating={isLoading} /> + </Container>, + )} + </Text> + </Container> + </Flex> + </Container> + ); + } + private _renderUsdSection(): React.ReactNode { + const usdFormatter = this.props.isEthAmountInBaseUnits ? format.ethBaseAmountInUsd : format.ethUnitAmountInUsd; + const shouldHideUsdPriceSection = _.isUndefined(this.props.ethUsdPrice) || _.isUndefined(this.props.ethAmount); + return shouldHideUsdPriceSection ? null : ( + <Container marginRight="3px" display="inline-block"> + <Text fontColor={ColorOption.lightGrey}> + ({usdFormatter(this.props.ethAmount, this.props.ethUsdPrice)}) + </Text> + </Container> + ); + } +} diff --git a/packages/instant/src/components/placing_order_button.tsx b/packages/instant/src/components/placing_order_button.tsx new file mode 100644 index 000000000..4232e6c22 --- /dev/null +++ b/packages/instant/src/components/placing_order_button.tsx @@ -0,0 +1,19 @@ +import * as React from 'react'; + +import { ColorOption } from '../style/theme'; + +import { Button } from './ui/button'; +import { Container } from './ui/container'; +import { Spinner } from './ui/spinner'; +import { Text } from './ui/text'; + +export const PlacingOrderButton: React.StatelessComponent<{}> = props => ( + <Button isDisabled={true} width="100%"> + <Container display="inline-block" position="relative" top="3px" marginRight="8px"> + <Spinner widthPx={20} heightPx={20} /> + </Container> + <Text fontColor={ColorOption.white} fontWeight={600} fontSize="20px"> + Placing Order… + </Text> + </Button> +); diff --git a/packages/instant/src/components/retry_button.tsx b/packages/instant/src/components/retry_button.tsx new file mode 100644 index 000000000..0d6188e6a --- /dev/null +++ b/packages/instant/src/components/retry_button.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; + +import { SecondaryButton } from './secondary_button'; + +export interface RetryButtonProps { + onClick: () => void; +} + +export const RetryButton: React.StatelessComponent<RetryButtonProps> = props => { + return <SecondaryButton onClick={props.onClick}>Try Again</SecondaryButton>; +}; diff --git a/packages/instant/src/components/secondary_button.tsx b/packages/instant/src/components/secondary_button.tsx new file mode 100644 index 000000000..3c139a233 --- /dev/null +++ b/packages/instant/src/components/secondary_button.tsx @@ -0,0 +1,26 @@ +import * as _ from 'lodash'; +import * as React from 'react'; + +import { ColorOption } from '../style/theme'; + +import { Button, ButtonProps } from './ui/button'; +import { Text } from './ui/text'; + +export interface SecondaryButtonProps extends ButtonProps {} + +export const SecondaryButton: React.StatelessComponent<SecondaryButtonProps> = props => { + const buttonProps = _.omit(props, 'text'); + return ( + <Button + backgroundColor={ColorOption.white} + borderColor={ColorOption.lightGrey} + width="100%" + onClick={props.onClick} + {...buttonProps} + > + <Text fontColor={ColorOption.primaryColor} fontWeight={600} fontSize="16px"> + {props.children} + </Text> + </Button> + ); +}; diff --git a/packages/instant/src/components/sliding_error.tsx b/packages/instant/src/components/sliding_error.tsx index 0237fb7e9..3865a8797 100644 --- a/packages/instant/src/components/sliding_error.tsx +++ b/packages/instant/src/components/sliding_error.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { ColorOption } from '../style/theme'; -import { SlideUpAndDownAnimation } from './animations/slide_up_and_down_animation'; +import { SlideDownAnimation, SlideUpAnimation } from './animations/slide_animations'; import { Container, Text } from './ui'; @@ -20,8 +20,8 @@ export const Error: React.StatelessComponent<ErrorProps> = props => ( borderRadius="6px" marginBottom="10px" > - <Container marginRight="5px" display="inline"> - {props.icon} + <Container marginRight="5px" display="inline" top="3px" position="relative"> + <Text fontSize="20px">{props.icon}</Text> </Container> <Text fontWeight="500" fontColor={ColorOption.darkOrange}> {props.message} @@ -29,8 +29,16 @@ export const Error: React.StatelessComponent<ErrorProps> = props => ( </Container> ); -export const SlidingError: React.StatelessComponent<ErrorProps> = props => ( - <SlideUpAndDownAnimation downY="120px" delayMs={5000}> - <Error icon={props.icon} message={props.message} /> - </SlideUpAndDownAnimation> -); +export type SlidingDirection = 'up' | 'down'; +export interface SlidingErrorProps extends ErrorProps { + direction: SlidingDirection; +} +export const SlidingError: React.StatelessComponent<SlidingErrorProps> = props => { + const AnimationComponent = props.direction === 'up' ? SlideUpAnimation : SlideDownAnimation; + + return ( + <AnimationComponent downY="120px"> + <Error icon={props.icon} message={props.message} /> + </AnimationComponent> + ); +}; diff --git a/packages/instant/src/components/ui/container.tsx b/packages/instant/src/components/ui/container.tsx index 02b16e39f..5e2218c68 100644 --- a/packages/instant/src/components/ui/container.tsx +++ b/packages/instant/src/components/ui/container.tsx @@ -27,6 +27,7 @@ export interface ContainerProps { backgroundColor?: ColorOption; hasBoxShadow?: boolean; zIndex?: number; + opacity?: number; } const PlainContainer: React.StatelessComponent<ContainerProps> = ({ children, className }) => ( @@ -54,6 +55,7 @@ export const Container = styled(PlainContainer)` ${props => cssRuleIfExists(props, 'border-top')} ${props => cssRuleIfExists(props, 'border-bottom')} ${props => cssRuleIfExists(props, 'z-index')} + ${props => cssRuleIfExists(props, 'opacity')} ${props => (props.hasBoxShadow ? `box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1)` : '')}; background-color: ${props => (props.backgroundColor ? props.theme[props.backgroundColor] : 'none')}; border-color: ${props => (props.borderColor ? props.theme[props.borderColor] : 'none')}; diff --git a/packages/instant/src/components/ui/icon.tsx b/packages/instant/src/components/ui/icon.tsx new file mode 100644 index 000000000..7373c3acd --- /dev/null +++ b/packages/instant/src/components/ui/icon.tsx @@ -0,0 +1,58 @@ +import * as React from 'react'; + +import { ColorOption } from '../../style/theme'; + +type svgRule = 'evenodd' | 'nonzero' | 'inherit'; +interface IconInfo { + viewBox: string; + fillRule?: svgRule; + clipRule?: svgRule; + path: string; +} +interface IconInfoMapping { + failed: IconInfo; + success: IconInfo; +} +const ICONS: IconInfoMapping = { + failed: { + viewBox: '0 0 34 34', + fillRule: 'evenodd', + clipRule: 'evenodd', + path: + 'M6.65771 26.4362C9.21777 29.2406 12.9033 31 17 31C24.7319 31 31 24.7319 31 17C31 14.4468 30.3164 12.0531 29.1226 9.99219L6.65771 26.4362ZM4.88281 24.0173C3.68555 21.9542 3 19.5571 3 17C3 9.26807 9.26807 3 17 3C21.1006 3 24.7891 4.76294 27.3496 7.57214L4.88281 24.0173ZM0 17C0 26.3888 7.61133 34 17 34C26.3887 34 34 26.3888 34 17C34 7.61121 26.3887 0 17 0C7.61133 0 0 7.61121 0 17Z', + }, + success: { + viewBox: '0 0 34 34', + fillRule: 'evenodd', + clipRule: 'evenodd', + path: + 'M17 34C26.3887 34 34 26.3888 34 17C34 7.61121 26.3887 0 17 0C7.61133 0 0 7.61121 0 17C0 26.3888 7.61133 34 17 34ZM25.7539 13.0977C26.2969 12.4718 26.2295 11.5244 25.6035 10.9817C24.9775 10.439 24.0303 10.5063 23.4878 11.1323L15.731 20.0771L12.3936 16.7438C11.8071 16.1583 10.8574 16.1589 10.272 16.7451C9.68652 17.3313 9.6875 18.281 10.2734 18.8665L14.75 23.3373L15.8887 24.4746L16.9434 23.2587L25.7539 13.0977Z', + }, +}; + +export interface IconProps { + width: number; + height: number; + color: ColorOption; + icon: keyof IconInfoMapping; +} +export const Icon: React.SFC<IconProps> = props => { + const iconInfo = ICONS[props.icon]; + + return ( + <svg + width={props.width} + height={props.height} + viewBox={iconInfo.viewBox} + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path + d={iconInfo.path} + fill={props.color} + fillRule={iconInfo.fillRule || 'nonzero'} + clipRule={iconInfo.clipRule || 'nonzero'} + /> + </svg> + ); +}; diff --git a/packages/instant/src/components/ui/spinner.tsx b/packages/instant/src/components/ui/spinner.tsx new file mode 100644 index 000000000..28ebc2598 --- /dev/null +++ b/packages/instant/src/components/ui/spinner.tsx @@ -0,0 +1,30 @@ +import * as React from 'react'; + +import { FullRotation } from '../animations/full_rotation'; + +export interface SpinnerProps { + widthPx: number; + heightPx: number; +} +export const Spinner: React.StatelessComponent<SpinnerProps> = props => { + return ( + <FullRotation width={`${props.widthPx}px`} height={`${props.heightPx}px`}> + <svg + width={props.widthPx} + height={props.heightPx} + viewBox="0 0 34 34" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <circle cx="17" cy="17" r="15" stroke="white" strokeOpacity="0.2" strokeWidth="4" /> + <path + d="M17 32C25.2843 32 32 25.2843 32 17C32 8.71573 25.2843 2 17 2" + stroke="white" + strokeWidth="4" + strokeLinecap="round" + strokeLinejoin="round" + /> + </svg> + </FullRotation> + ); +}; diff --git a/packages/instant/src/components/view_transaction_button.tsx b/packages/instant/src/components/view_transaction_button.tsx new file mode 100644 index 000000000..7aa44e657 --- /dev/null +++ b/packages/instant/src/components/view_transaction_button.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; + +import { SecondaryButton } from './secondary_button'; + +export interface ViewTransactionButtonProps { + onClick: () => void; +} + +export const ViewTransactionButton: React.StatelessComponent<ViewTransactionButtonProps> = props => { + return <SecondaryButton onClick={props.onClick}>View Transaction</SecondaryButton>; +}; diff --git a/packages/instant/src/components/zero_ex_instant.tsx b/packages/instant/src/components/zero_ex_instant.tsx index f6472e811..ffa5a8250 100644 --- a/packages/instant/src/components/zero_ex_instant.tsx +++ b/packages/instant/src/components/zero_ex_instant.tsx @@ -1,23 +1,75 @@ +import { AssetBuyer } from '@0x/asset-buyer'; +import { ObjectMap } from '@0x/types'; import * as React from 'react'; import { Provider } from 'react-redux'; +import { SelectedAssetThemeProvider } from '../containers/selected_asset_theme_provider'; import { asyncData } from '../redux/async_data'; -import { store } from '../redux/store'; +import { INITIAL_STATE, State } from '../redux/reducer'; +import { store, Store } from '../redux/store'; import { fonts } from '../style/fonts'; -import { theme, ThemeProvider } from '../style/theme'; +import { AssetMetaData, Network } from '../types'; +import { assetUtils } from '../util/asset'; +import { getProvider } from '../util/provider'; import { ZeroExInstantContainer } from './zero_ex_instant_container'; fonts.include(); -// tslint:disable-next-line:no-floating-promises -asyncData.fetchAndDispatchToStore(); - -export interface ZeroExInstantProps {} - -export const ZeroExInstant: React.StatelessComponent<ZeroExInstantProps> = () => ( - <Provider store={store}> - <ThemeProvider theme={theme}> - <ZeroExInstantContainer /> - </ThemeProvider> - </Provider> -); + +export type ZeroExInstantProps = ZeroExInstantRequiredProps & Partial<ZeroExInstantOptionalProps>; + +export interface ZeroExInstantRequiredProps { + // TODO: Change API when we allow the selection of different assetDatas + assetData: string; + // TODO: Allow for a function that returns orders + liquiditySource: string; +} + +export interface ZeroExInstantOptionalProps { + additionalAssetMetaDataMap: ObjectMap<AssetMetaData>; + network: Network; +} + +export class ZeroExInstant extends React.Component<ZeroExInstantProps> { + private readonly _store: Store; + private static _mergeInitialStateWithProps(props: ZeroExInstantProps, state: State = INITIAL_STATE): State { + // Create merged object such that properties in props override default settings + const optionalPropsWithDefaults: ZeroExInstantOptionalProps = { + additionalAssetMetaDataMap: props.additionalAssetMetaDataMap || {}, + network: props.network || state.network, + }; + const { network } = optionalPropsWithDefaults; + // TODO: Provider needs to not be hard-coded to injected web3. + const assetBuyer = AssetBuyer.getAssetBuyerForStandardRelayerAPIUrl(getProvider(), props.liquiditySource, { + networkId: network, + }); + const completeAssetMetaDataMap = { + ...props.additionalAssetMetaDataMap, + ...state.assetMetaDataMap, + }; + const storeStateFromProps: State = { + ...state, + assetBuyer, + network, + selectedAsset: assetUtils.createAssetFromAssetData(props.assetData, completeAssetMetaDataMap, network), + assetMetaDataMap: completeAssetMetaDataMap, + }; + return storeStateFromProps; + } + constructor(props: ZeroExInstantProps) { + super(props); + this._store = store.create(ZeroExInstant._mergeInitialStateWithProps(this.props, INITIAL_STATE)); + // tslint:disable-next-line:no-floating-promises + asyncData.fetchAndDispatchToStore(this._store); + } + + public render(): React.ReactNode { + return ( + <Provider store={this._store}> + <SelectedAssetThemeProvider> + <ZeroExInstantContainer /> + </SelectedAssetThemeProvider> + </Provider> + ); + } +} diff --git a/packages/instant/src/components/zero_ex_instant_container.tsx b/packages/instant/src/components/zero_ex_instant_container.tsx index 51f9dc63e..1d17ed12a 100644 --- a/packages/instant/src/components/zero_ex_instant_container.tsx +++ b/packages/instant/src/components/zero_ex_instant_container.tsx @@ -1,7 +1,8 @@ import * as React from 'react'; import { LatestBuyQuoteOrderDetails } from '../containers/latest_buy_quote_order_details'; -import { SelectedAssetBuyButton } from '../containers/selected_asset_buy_button'; +import { LatestError } from '../containers/latest_error'; +import { SelectedAssetBuyOrderStateButton } from '../containers/selected_asset_buy_order_state_button'; import { SelectedAssetInstantHeading } from '../containers/selected_asset_instant_heading'; import { ColorOption } from '../style/theme'; @@ -12,6 +13,9 @@ export interface ZeroExInstantContainerProps {} export const ZeroExInstantContainer: React.StatelessComponent<ZeroExInstantContainerProps> = props => ( <Container width="350px"> + <Container zIndex={1} position="relative"> + <LatestError /> + </Container> <Container zIndex={2} position="relative" @@ -22,7 +26,9 @@ export const ZeroExInstantContainer: React.StatelessComponent<ZeroExInstantConta <Flex direction="column" justify="flex-start"> <SelectedAssetInstantHeading /> <LatestBuyQuoteOrderDetails /> - <SelectedAssetBuyButton /> + <Container padding="20px" width="100%"> + <SelectedAssetBuyOrderStateButton /> + </Container> </Flex> </Container> </Container> diff --git a/packages/instant/src/constants.ts b/packages/instant/src/constants.ts index 1fd321c5a..31491c80a 100644 --- a/packages/instant/src/constants.ts +++ b/packages/instant/src/constants.ts @@ -1,6 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const BIG_NUMBER_ZERO = new BigNumber(0); -export const sraApiUrl = 'https://api.radarrelay.com/0x/v2/'; -export const zrxAssetData = '0xf47261b0000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498'; -export const zrxDecimals = 18; export const ethDecimals = 18; +export const DEFAULT_ZERO_EX_CONTAINER_SELECTOR = '#zeroExInstantContainer'; diff --git a/packages/instant/src/containers/latest_buy_quote_order_details.ts b/packages/instant/src/containers/latest_buy_quote_order_details.ts index b354c78fa..092aaaf20 100644 --- a/packages/instant/src/containers/latest_buy_quote_order_details.ts +++ b/packages/instant/src/containers/latest_buy_quote_order_details.ts @@ -1,5 +1,5 @@ -import { BuyQuoteInfo } from '@0xproject/asset-buyer'; -import { BigNumber } from '@0xproject/utils'; +import { BuyQuoteInfo } from '@0x/asset-buyer'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import { connect } from 'react-redux'; @@ -8,18 +8,21 @@ import { oc } from 'ts-optchain'; import { State } from '../redux/reducer'; import { OrderDetails } from '../components/order_details'; +import { AsyncProcessState } from '../types'; export interface LatestBuyQuoteOrderDetailsProps {} interface ConnectedState { buyQuoteInfo?: BuyQuoteInfo; ethUsdPrice?: BigNumber; + isLoading: boolean; } const mapStateToProps = (state: State, _ownProps: LatestBuyQuoteOrderDetailsProps): ConnectedState => ({ // use the worst case quote info buyQuoteInfo: oc(state).latestBuyQuote.worstCaseQuoteInfo(), ethUsdPrice: state.ethUsdPrice, + isLoading: state.quoteRequestState === AsyncProcessState.PENDING, }); export const LatestBuyQuoteOrderDetails: React.ComponentClass<LatestBuyQuoteOrderDetailsProps> = connect( diff --git a/packages/instant/src/containers/latest_error.tsx b/packages/instant/src/containers/latest_error.tsx new file mode 100644 index 000000000..b75ec00aa --- /dev/null +++ b/packages/instant/src/containers/latest_error.tsx @@ -0,0 +1,36 @@ +import * as React from 'react'; + +import { connect } from 'react-redux'; + +import { SlidingError } from '../components/sliding_error'; +import { State } from '../redux/reducer'; +import { Asset, DisplayStatus } from '../types'; +import { errorUtil } from '../util/error'; + +export interface LatestErrorComponentProps { + asset?: Asset; + latestError?: any; + slidingDirection: 'down' | 'up'; +} + +export const LatestErrorComponent: React.StatelessComponent<LatestErrorComponentProps> = props => { + if (!props.latestError) { + return <div />; + } + const { icon, message } = errorUtil.errorDescription(props.latestError, props.asset); + return <SlidingError direction={props.slidingDirection} icon={icon} message={message} />; +}; + +interface ConnectedState { + asset?: Asset; + latestError?: any; + slidingDirection: 'down' | 'up'; +} +export interface LatestErrorProps {} +const mapStateToProps = (state: State, _ownProps: LatestErrorProps): ConnectedState => ({ + asset: state.selectedAsset, + latestError: state.latestError, + slidingDirection: state.latestErrorDisplay === DisplayStatus.Present ? 'up' : 'down', +}); + +export const LatestError = connect(mapStateToProps)(LatestErrorComponent); diff --git a/packages/instant/src/containers/selected_asset_amount_input.ts b/packages/instant/src/containers/selected_asset_amount_input.ts index f2ca96ae4..f23b2010e 100644 --- a/packages/instant/src/containers/selected_asset_amount_input.ts +++ b/packages/instant/src/containers/selected_asset_amount_input.ts @@ -1,16 +1,17 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { AssetBuyer, BuyQuote } from '@0x/asset-buyer'; +import { AssetProxyId } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; -import { zrxDecimals } from '../constants'; import { Action, actions } from '../redux/actions'; import { State } from '../redux/reducer'; import { ColorOption } from '../style/theme'; -import { AsyncProcessState } from '../types'; -import { assetBuyer } from '../util/asset_buyer'; +import { AsyncProcessState, ERC20Asset } from '../types'; +import { errorUtil } from '../util/error'; import { AssetAmountInput } from '../components/asset_amount_input'; @@ -20,30 +21,59 @@ export interface SelectedAssetAmountInputProps { } interface ConnectedState { + assetBuyer?: AssetBuyer; value?: BigNumber; - assetData?: string; + asset?: ERC20Asset; } interface ConnectedDispatch { - onChange: (value?: BigNumber, assetData?: string) => void; + updateBuyQuote: (assetBuyer?: AssetBuyer, value?: BigNumber, asset?: ERC20Asset) => void; } -const mapStateToProps = (state: State, _ownProps: SelectedAssetAmountInputProps): ConnectedState => ({ - value: state.selectedAssetAmount, - assetData: state.selectedAssetData, -}); +interface ConnectedProps { + value?: BigNumber; + asset?: ERC20Asset; + onChange: (value?: BigNumber, asset?: ERC20Asset) => void; +} + +type FinalProps = ConnectedProps & SelectedAssetAmountInputProps; + +const mapStateToProps = (state: State, _ownProps: SelectedAssetAmountInputProps): ConnectedState => { + const selectedAsset = state.selectedAsset; + if (_.isUndefined(selectedAsset) || selectedAsset.metaData.assetProxyId !== AssetProxyId.ERC20) { + return { + value: state.selectedAssetAmount, + }; + } + return { + assetBuyer: state.assetBuyer, + value: state.selectedAssetAmount, + asset: selectedAsset as ERC20Asset, + }; +}; const updateBuyQuoteAsync = async ( + assetBuyer: AssetBuyer, dispatch: Dispatch<Action>, - assetData?: string, - assetAmount?: BigNumber, + asset: ERC20Asset, + assetAmount: BigNumber, ): Promise<void> => { - if (_.isUndefined(assetAmount) || _.isUndefined(assetData)) { + // get a new buy quote. + const baseUnitValue = Web3Wrapper.toBaseUnitAmount(assetAmount, asset.metaData.decimals); + + // mark quote as pending + dispatch(actions.setQuoteRequestStatePending()); + + let newBuyQuote: BuyQuote | undefined; + try { + newBuyQuote = await assetBuyer.getBuyQuoteAsync(asset.assetData, baseUnitValue); + } catch (error) { + dispatch(actions.setQuoteRequestStateFailure()); + errorUtil.errorFlasher.flashNewError(dispatch, error); return; } - // get a new buy quote. - const baseUnitValue = Web3Wrapper.toBaseUnitAmount(assetAmount, zrxDecimals); - const newBuyQuote = await assetBuyer.getBuyQuoteAsync(assetData, baseUnitValue); + // We have a successful new buy quote + errorUtil.errorFlasher.clearError(dispatch); // invalidate the last buy quote. dispatch(actions.updateLatestBuyQuote(newBuyQuote)); }; @@ -54,19 +84,40 @@ const mapDispatchToProps = ( dispatch: Dispatch<Action>, _ownProps: SelectedAssetAmountInputProps, ): ConnectedDispatch => ({ - onChange: (value, assetData) => { + updateBuyQuote: (assetBuyer, value, asset) => { // Update the input dispatch(actions.updateSelectedAssetAmount(value)); // invalidate the last buy quote. dispatch(actions.updateLatestBuyQuote(undefined)); // reset our buy state - dispatch(actions.updateSelectedAssetBuyState(AsyncProcessState.NONE)); - // tslint:disable-next-line:no-floating-promises - debouncedUpdateBuyQuoteAsync(dispatch, assetData, value); + dispatch(actions.updateBuyOrderState({ processState: AsyncProcessState.NONE })); + + if (!_.isUndefined(value) && !_.isUndefined(asset) && !_.isUndefined(assetBuyer)) { + // even if it's debounced, give them the illusion it's loading + dispatch(actions.setQuoteRequestStatePending()); + // tslint:disable-next-line:no-floating-promises + debouncedUpdateBuyQuoteAsync(assetBuyer, dispatch, asset, value); + } }, }); +const mergeProps = ( + connectedState: ConnectedState, + connectedDispatch: ConnectedDispatch, + ownProps: SelectedAssetAmountInputProps, +): FinalProps => { + return { + ...ownProps, + asset: connectedState.asset, + value: connectedState.value, + onChange: (value, asset) => { + connectedDispatch.updateBuyQuote(connectedState.assetBuyer, value, asset); + }, + }; +}; + export const SelectedAssetAmountInput: React.ComponentClass<SelectedAssetAmountInputProps> = connect( mapStateToProps, mapDispatchToProps, + mergeProps, )(AssetAmountInput); diff --git a/packages/instant/src/containers/selected_asset_buy_button.ts b/packages/instant/src/containers/selected_asset_buy_button.ts index 4cbaf5537..428939e79 100644 --- a/packages/instant/src/containers/selected_asset_buy_button.ts +++ b/packages/instant/src/containers/selected_asset_buy_button.ts @@ -1,4 +1,4 @@ -import { BuyQuote } from '@0xproject/asset-buyer'; +import { AssetBuyer, BuyQuote } from '@0x/asset-buyer'; import * as _ from 'lodash'; import * as React from 'react'; import { connect } from 'react-redux'; @@ -13,40 +13,31 @@ import { BuyButton } from '../components/buy_button'; export interface SelectedAssetBuyButtonProps {} interface ConnectedState { - text: string; + assetBuyer?: AssetBuyer; buyQuote?: BuyQuote; } interface ConnectedDispatch { onClick: (buyQuote: BuyQuote) => void; - onBuySuccess: (buyQuote: BuyQuote) => void; + onBuySuccess: (buyQuote: BuyQuote, txnHash: string) => void; onBuyFailure: (buyQuote: BuyQuote) => void; + onBuyPrevented: (buyQuote: BuyQuote, error: Error) => void; } -const textForState = (state: AsyncProcessState): string => { - switch (state) { - case AsyncProcessState.NONE: - return 'Buy'; - case AsyncProcessState.PENDING: - return '...Loading'; - case AsyncProcessState.SUCCESS: - return 'Success!'; - case AsyncProcessState.FAILURE: - return 'Failed'; - default: - return 'Buy'; - } -}; - const mapStateToProps = (state: State, _ownProps: SelectedAssetBuyButtonProps): ConnectedState => ({ - text: textForState(state.selectedAssetBuyState), + assetBuyer: state.assetBuyer, buyQuote: state.latestBuyQuote, }); const mapDispatchToProps = (dispatch: Dispatch<Action>, ownProps: SelectedAssetBuyButtonProps): ConnectedDispatch => ({ - onClick: buyQuote => dispatch(actions.updateSelectedAssetBuyState(AsyncProcessState.PENDING)), - onBuySuccess: buyQuote => dispatch(actions.updateSelectedAssetBuyState(AsyncProcessState.SUCCESS)), - onBuyFailure: buyQuote => dispatch(actions.updateSelectedAssetBuyState(AsyncProcessState.FAILURE)), + onClick: buyQuote => dispatch(actions.updateBuyOrderState({ processState: AsyncProcessState.PENDING })), + onBuySuccess: (buyQuote: BuyQuote, txnHash: string) => + dispatch(actions.updateBuyOrderState({ processState: AsyncProcessState.SUCCESS, txnHash })), + onBuyFailure: buyQuote => dispatch(actions.updateBuyOrderState({ processState: AsyncProcessState.FAILURE })), + onBuyPrevented: (buyQuote, error) => { + dispatch(actions.resetAmount()); + dispatch(actions.setError(error)); + }, }); export const SelectedAssetBuyButton: React.ComponentClass<SelectedAssetBuyButtonProps> = connect( diff --git a/packages/instant/src/containers/selected_asset_buy_order_state_button.tsx b/packages/instant/src/containers/selected_asset_buy_order_state_button.tsx new file mode 100644 index 000000000..f3efbb5d2 --- /dev/null +++ b/packages/instant/src/containers/selected_asset_buy_order_state_button.tsx @@ -0,0 +1,20 @@ +import * as _ from 'lodash'; +import * as React from 'react'; +import { connect } from 'react-redux'; + +import { State } from '../redux/reducer'; +import { AsyncProcessState } from '../types'; + +import { BuyOrderStateButton } from '../components/buy_order_state_button'; + +interface ConnectedState { + buyOrderProcessingState: AsyncProcessState; +} +export interface SelectedAssetButtonProps {} +const mapStateToProps = (state: State, _ownProps: SelectedAssetButtonProps): ConnectedState => ({ + buyOrderProcessingState: state.buyOrderState.processState, +}); + +export const SelectedAssetBuyOrderStateButton: React.ComponentClass<SelectedAssetButtonProps> = connect( + mapStateToProps, +)(BuyOrderStateButton); diff --git a/packages/instant/src/containers/selected_asset_instant_heading.ts b/packages/instant/src/containers/selected_asset_instant_heading.ts index c97cfe11a..6b2a29b07 100644 --- a/packages/instant/src/containers/selected_asset_instant_heading.ts +++ b/packages/instant/src/containers/selected_asset_instant_heading.ts @@ -1,10 +1,11 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import { connect } from 'react-redux'; import { oc } from 'ts-optchain'; import { State } from '../redux/reducer'; +import { AsyncProcessState, OrderState } from '../types'; import { InstantHeading } from '../components/instant_heading'; @@ -14,12 +15,16 @@ interface ConnectedState { selectedAssetAmount?: BigNumber; totalEthBaseAmount?: BigNumber; ethUsdPrice?: BigNumber; + quoteRequestState: AsyncProcessState; + buyOrderState: OrderState; } const mapStateToProps = (state: State, _ownProps: InstantHeadingProps): ConnectedState => ({ selectedAssetAmount: state.selectedAssetAmount, totalEthBaseAmount: oc(state).latestBuyQuote.worstCaseQuoteInfo.totalEthAmount(), ethUsdPrice: state.ethUsdPrice, + quoteRequestState: state.quoteRequestState, + buyOrderState: state.buyOrderState, }); export const SelectedAssetInstantHeading: React.ComponentClass<InstantHeadingProps> = connect(mapStateToProps)( diff --git a/packages/instant/src/containers/selected_asset_retry_button.tsx b/packages/instant/src/containers/selected_asset_retry_button.tsx new file mode 100644 index 000000000..b2b140be6 --- /dev/null +++ b/packages/instant/src/containers/selected_asset_retry_button.tsx @@ -0,0 +1,26 @@ +import * as _ from 'lodash'; +import * as React from 'react'; +import { connect } from 'react-redux'; +import { Dispatch } from 'redux'; + +import { Action, actions } from '../redux/actions'; + +import { RetryButton } from '../components/retry_button'; + +export interface SelectedAssetRetryButtonProps {} + +interface ConnectedDispatch { + onClick: () => void; +} + +const mapDispatchToProps = ( + dispatch: Dispatch<Action>, + _ownProps: SelectedAssetRetryButtonProps, +): ConnectedDispatch => ({ + onClick: () => dispatch(actions.resetAmount()), +}); + +export const SelectedAssetRetryButton: React.ComponentClass<SelectedAssetRetryButtonProps> = connect( + undefined, + mapDispatchToProps, +)(RetryButton); diff --git a/packages/instant/src/containers/selected_asset_theme_provider.ts b/packages/instant/src/containers/selected_asset_theme_provider.ts new file mode 100644 index 000000000..6e6b83d73 --- /dev/null +++ b/packages/instant/src/containers/selected_asset_theme_provider.ts @@ -0,0 +1,32 @@ +import * as _ from 'lodash'; +import * as React from 'react'; +import { connect } from 'react-redux'; + +import { State } from '../redux/reducer'; +import { Theme, theme as defaultTheme, ThemeProvider } from '../style/theme'; +import { Asset } from '../types'; + +export interface SelectedAssetThemeProviderProps {} + +interface ConnectedState { + theme: Theme; +} + +const getTheme = (asset?: Asset): Theme => { + if (!_.isUndefined(asset) && !_.isUndefined(asset.metaData.primaryColor)) { + return { + ...defaultTheme, + primaryColor: asset.metaData.primaryColor, + }; + } + return defaultTheme; +}; + +const mapStateToProps = (state: State, _ownProps: SelectedAssetThemeProviderProps): ConnectedState => { + const theme = getTheme(state.selectedAsset); + return { theme }; +}; + +export const SelectedAssetThemeProvider: React.ComponentClass<SelectedAssetThemeProviderProps> = connect( + mapStateToProps, +)(ThemeProvider); diff --git a/packages/instant/src/containers/selected_asset_view_transaction_button.tsx b/packages/instant/src/containers/selected_asset_view_transaction_button.tsx new file mode 100644 index 000000000..6f42b9f85 --- /dev/null +++ b/packages/instant/src/containers/selected_asset_view_transaction_button.tsx @@ -0,0 +1,34 @@ +import * as _ from 'lodash'; +import * as React from 'react'; +import { connect } from 'react-redux'; + +import { State } from '../redux/reducer'; + +import { ViewTransactionButton } from '../components/view_transaction_button'; +import { AsyncProcessState } from '../types'; +import { etherscanUtil } from '../util/etherscan'; + +export interface SelectedAssetViewTransactionButtonProps {} + +interface ConnectedState { + onClick: () => void; +} + +const mapStateToProps = (state: State, _ownProps: {}): ConnectedState => ({ + onClick: () => { + if (state.assetBuyer && state.buyOrderState.processState === AsyncProcessState.SUCCESS) { + const etherscanUrl = etherscanUtil.getEtherScanTxnAddressIfExists( + state.buyOrderState.txnHash, + state.assetBuyer.networkId, + ); + if (etherscanUrl) { + window.open(etherscanUrl, '_blank'); + return; + } + } + }, +}); + +export const SelectedAssetViewTransactionButton: React.ComponentClass< + SelectedAssetViewTransactionButtonProps +> = connect(mapStateToProps)(ViewTransactionButton); diff --git a/packages/instant/src/data/asset_data_network_mapping.ts b/packages/instant/src/data/asset_data_network_mapping.ts new file mode 100644 index 000000000..e8ccbf011 --- /dev/null +++ b/packages/instant/src/data/asset_data_network_mapping.ts @@ -0,0 +1,15 @@ +import * as _ from 'lodash'; + +import { Network } from '../types'; + +interface AssetDataByNetwork { + [Network.Kovan]?: string; + [Network.Mainnet]?: string; +} + +export const assetDataNetworkMapping: AssetDataByNetwork[] = [ + { + [Network.Mainnet]: '0xf47261b0000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498', + [Network.Kovan]: '0xf47261b00000000000000000000000002002d3812f58e35f0ea1ffbf80a75a38c32175fa', + }, +]; diff --git a/packages/instant/src/data/asset_meta_data.ts b/packages/instant/src/data/asset_meta_data_map.ts index e4d3e8f73..3a820a0c4 100644 --- a/packages/instant/src/data/asset_meta_data.ts +++ b/packages/instant/src/data/asset_meta_data_map.ts @@ -1,12 +1,11 @@ -import { AssetProxyId, ObjectMap } from '@0xproject/types'; +import { AssetProxyId, ObjectMap } from '@0x/types'; -import { zrxAssetData } from '../constants'; import { AssetMetaData } from '../types'; // Map from assetData string to AssetMetaData object // TODO: import this from somewhere else. -export const assetMetaData: ObjectMap<AssetMetaData> = { - [zrxAssetData]: { +export const assetMetaDataMap: ObjectMap<AssetMetaData> = { + '0xf47261b0000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498': { assetProxyId: AssetProxyId.ERC20, decimals: 18, primaryColor: 'rgb(54, 50, 60)', diff --git a/packages/instant/src/index.umd.ts b/packages/instant/src/index.umd.ts index d4eca177d..f648b37f2 100644 --- a/packages/instant/src/index.umd.ts +++ b/packages/instant/src/index.umd.ts @@ -1,10 +1,9 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import { ZeroExInstant } from './index'; +import { DEFAULT_ZERO_EX_CONTAINER_SELECTOR } from './constants'; +import { ZeroExInstant, ZeroExInstantProps } from './index'; -export interface ZeroExInstantOptions {} - -export const render = (props: ZeroExInstantOptions, selector: string = '#zeroExInstantContainer') => { +export const render = (props: ZeroExInstantProps, selector: string = DEFAULT_ZERO_EX_CONTAINER_SELECTOR) => { ReactDOM.render(React.createElement(ZeroExInstant, props), document.querySelector(selector)); }; diff --git a/packages/instant/src/redux/actions.ts b/packages/instant/src/redux/actions.ts index 7d07b4950..5a4099f15 100644 --- a/packages/instant/src/redux/actions.ts +++ b/packages/instant/src/redux/actions.ts @@ -1,8 +1,8 @@ -import { BuyQuote } from '@0xproject/asset-buyer'; -import { BigNumber } from '@0xproject/utils'; +import { BuyQuote } from '@0x/asset-buyer'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; -import { ActionsUnion, AsyncProcessState } from '../types'; +import { ActionsUnion, OrderState } from '../types'; export interface PlainAction<T extends string> { type: T; @@ -23,14 +23,27 @@ function createAction<T extends string, P>(type: T, data?: P): PlainAction<T> | export enum ActionTypes { UPDATE_ETH_USD_PRICE = 'UPDATE_ETH_USD_PRICE', UPDATE_SELECTED_ASSET_AMOUNT = 'UPDATE_SELECTED_ASSET_AMOUNT', - UPDATE_SELECTED_ASSET_BUY_STATE = 'UPDATE_SELECTED_ASSET_BUY_STATE', + UPDATE_BUY_ORDER_STATE = 'UPDATE_BUY_ORDER_STATE', UPDATE_LATEST_BUY_QUOTE = 'UPDATE_LATEST_BUY_QUOTE', + UPDATE_SELECTED_ASSET = 'UPDATE_SELECTED_ASSET', + SET_QUOTE_REQUEST_STATE_PENDING = 'SET_QUOTE_REQUEST_STATE_PENDING', + SET_QUOTE_REQUEST_STATE_FAILURE = 'SET_QUOTE_REQUEST_STATE_FAILURE', + SET_ERROR = 'SET_ERROR', + HIDE_ERROR = 'HIDE_ERROR', + CLEAR_ERROR = 'CLEAR_ERROR', + RESET_AMOUNT = 'RESET_AMOUNT', } export const actions = { updateEthUsdPrice: (price?: BigNumber) => createAction(ActionTypes.UPDATE_ETH_USD_PRICE, price), updateSelectedAssetAmount: (amount?: BigNumber) => createAction(ActionTypes.UPDATE_SELECTED_ASSET_AMOUNT, amount), - updateSelectedAssetBuyState: (buyState: AsyncProcessState) => - createAction(ActionTypes.UPDATE_SELECTED_ASSET_BUY_STATE, buyState), + updateBuyOrderState: (orderState: OrderState) => createAction(ActionTypes.UPDATE_BUY_ORDER_STATE, orderState), updateLatestBuyQuote: (buyQuote?: BuyQuote) => createAction(ActionTypes.UPDATE_LATEST_BUY_QUOTE, buyQuote), + updateSelectedAsset: (assetData?: string) => createAction(ActionTypes.UPDATE_SELECTED_ASSET, assetData), + setQuoteRequestStatePending: () => createAction(ActionTypes.SET_QUOTE_REQUEST_STATE_PENDING), + setQuoteRequestStateFailure: () => createAction(ActionTypes.SET_QUOTE_REQUEST_STATE_FAILURE), + setError: (error?: any) => createAction(ActionTypes.SET_ERROR, error), + hideError: () => createAction(ActionTypes.HIDE_ERROR), + clearError: () => createAction(ActionTypes.CLEAR_ERROR), + resetAmount: () => createAction(ActionTypes.RESET_AMOUNT), }; diff --git a/packages/instant/src/redux/async_data.ts b/packages/instant/src/redux/async_data.ts index 348838307..4ed89bdc3 100644 --- a/packages/instant/src/redux/async_data.ts +++ b/packages/instant/src/redux/async_data.ts @@ -3,10 +3,10 @@ import { coinbaseApi } from '../util/coinbase_api'; import { ActionTypes } from './actions'; -import { store } from './store'; +import { Store } from './store'; export const asyncData = { - fetchAndDispatchToStore: async () => { + fetchAndDispatchToStore: async (store: Store) => { let ethUsdPrice = BIG_NUMBER_ZERO; try { ethUsdPrice = await coinbaseApi.getEthUsdPrice(); diff --git a/packages/instant/src/redux/reducer.ts b/packages/instant/src/redux/reducer.ts index adecf2ab7..c6a05ac52 100644 --- a/packages/instant/src/redux/reducer.ts +++ b/packages/instant/src/redux/reducer.ts @@ -1,27 +1,38 @@ -import { BuyQuote } from '@0xproject/asset-buyer'; -import { BigNumber } from '@0xproject/utils'; +import { AssetBuyer, BuyQuote } from '@0x/asset-buyer'; +import { ObjectMap } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; -import { zrxAssetData } from '../constants'; -import { AsyncProcessState } from '../types'; +import { assetMetaDataMap } from '../data/asset_meta_data_map'; +import { Asset, AssetMetaData, AsyncProcessState, DisplayStatus, Network, OrderState } from '../types'; +import { assetUtils } from '../util/asset'; import { Action, ActionTypes } from './actions'; export interface State { - selectedAssetData?: string; + network: Network; + assetBuyer?: AssetBuyer; + assetMetaDataMap: ObjectMap<AssetMetaData>; + selectedAsset?: Asset; selectedAssetAmount?: BigNumber; - selectedAssetBuyState: AsyncProcessState; + buyOrderState: OrderState; ethUsdPrice?: BigNumber; latestBuyQuote?: BuyQuote; + quoteRequestState: AsyncProcessState; + latestError?: any; + latestErrorDisplay: DisplayStatus; } export const INITIAL_STATE: State = { - // TODO: Remove hardcoded zrxAssetData - selectedAssetData: zrxAssetData, + network: Network.Mainnet, selectedAssetAmount: undefined, - selectedAssetBuyState: AsyncProcessState.NONE, + assetMetaDataMap, + buyOrderState: { processState: AsyncProcessState.NONE }, ethUsdPrice: undefined, latestBuyQuote: undefined, + latestError: undefined, + latestErrorDisplay: DisplayStatus.Hidden, + quoteRequestState: AsyncProcessState.NONE, }; export const reducer = (state: State = INITIAL_STATE, action: Action): State => { @@ -40,11 +51,63 @@ export const reducer = (state: State = INITIAL_STATE, action: Action): State => return { ...state, latestBuyQuote: action.data, + quoteRequestState: AsyncProcessState.SUCCESS, }; - case ActionTypes.UPDATE_SELECTED_ASSET_BUY_STATE: + case ActionTypes.SET_QUOTE_REQUEST_STATE_PENDING: return { ...state, - selectedAssetBuyState: action.data, + latestBuyQuote: undefined, + quoteRequestState: AsyncProcessState.PENDING, + }; + case ActionTypes.SET_QUOTE_REQUEST_STATE_FAILURE: + return { + ...state, + latestBuyQuote: undefined, + quoteRequestState: AsyncProcessState.FAILURE, + }; + case ActionTypes.UPDATE_BUY_ORDER_STATE: + return { + ...state, + buyOrderState: action.data, + }; + case ActionTypes.SET_ERROR: + return { + ...state, + latestError: action.data, + latestErrorDisplay: DisplayStatus.Present, + }; + case ActionTypes.HIDE_ERROR: + return { + ...state, + latestErrorDisplay: DisplayStatus.Hidden, + }; + case ActionTypes.CLEAR_ERROR: + return { + ...state, + latestError: undefined, + latestErrorDisplay: DisplayStatus.Hidden, + }; + case ActionTypes.UPDATE_SELECTED_ASSET: + const newSelectedAssetData = action.data; + let newSelectedAsset: Asset | undefined; + if (!_.isUndefined(newSelectedAssetData)) { + newSelectedAsset = assetUtils.createAssetFromAssetData( + newSelectedAssetData, + state.assetMetaDataMap, + state.network, + ); + } + return { + ...state, + selectedAsset: newSelectedAsset, + }; + case ActionTypes.RESET_AMOUNT: + return { + ...state, + latestBuyQuote: undefined, + quoteRequestState: AsyncProcessState.NONE, + buyOrderState: { processState: AsyncProcessState.NONE }, + selectedAssetAmount: undefined, }; default: return state; diff --git a/packages/instant/src/redux/store.ts b/packages/instant/src/redux/store.ts index fcd19f9a8..01deb8690 100644 --- a/packages/instant/src/redux/store.ts +++ b/packages/instant/src/redux/store.ts @@ -1,6 +1,13 @@ import * as _ from 'lodash'; import { createStore, Store as ReduxStore } from 'redux'; +import { devToolsEnhancer } from 'redux-devtools-extension/developmentOnly'; import { reducer, State } from './reducer'; -export const store: ReduxStore<State> = createStore(reducer); +export type Store = ReduxStore<State>; + +export const store = { + create: (state: State): Store => { + return createStore(reducer, state, devToolsEnhancer({})); + }, +}; diff --git a/packages/instant/src/style/util.ts b/packages/instant/src/style/util.ts index c9df0f834..3e38c4a7d 100644 --- a/packages/instant/src/style/util.ts +++ b/packages/instant/src/style/util.ts @@ -1,4 +1,4 @@ -import { ObjectMap } from '@0xproject/types'; +import { ObjectMap } from '@0x/types'; import * as _ from 'lodash'; export const cssRuleIfExists = (props: ObjectMap<any>, rule: string): string => { diff --git a/packages/instant/src/types.ts b/packages/instant/src/types.ts index bf3ee392f..c5521c63c 100644 --- a/packages/instant/src/types.ts +++ b/packages/instant/src/types.ts @@ -1,11 +1,29 @@ -import { AssetProxyId, ObjectMap } from '@0xproject/types'; +import { AssetProxyId, ObjectMap } from '@0x/types'; // Reusable export enum AsyncProcessState { - NONE, - PENDING, - SUCCESS, - FAILURE, + NONE = 'None', + PENDING = 'Pending', + SUCCESS = 'Success', + FAILURE = 'Failure', +} + +interface RegularOrderState { + processState: AsyncProcessState.NONE | AsyncProcessState.PENDING; +} +interface SuccessfulOrderState { + processState: AsyncProcessState.SUCCESS; + txnHash: string; +} +interface FailureOrderState { + processState: AsyncProcessState.FAILURE; + txnHash?: string; +} +export type OrderState = RegularOrderState | SuccessfulOrderState | FailureOrderState; + +export enum DisplayStatus { + Present, + Hidden, } export type FunctionType = (...args: any[]) => any; @@ -22,12 +40,32 @@ export interface ERC20AssetMetaData { export interface ERC721AssetMetaData { assetProxyId: AssetProxyId.ERC721; name: string; + representationUrl?: string; primaryColor?: string; } export type AssetMetaData = ERC20AssetMetaData | ERC721AssetMetaData; +export interface ERC20Asset { + assetData: string; + metaData: ERC20AssetMetaData; +} + +export interface ERC721Asset { + assetData: string; + metaData: ERC721AssetMetaData; +} + +export interface Asset { + assetData: string; + metaData: AssetMetaData; +} + export enum Network { Kovan = 42, Mainnet = 1, } + +export enum ZeroExInstantError { + AssetMetaDataNotAvailable = 'ASSET_META_DATA_NOT_AVAILABLE', +} diff --git a/packages/instant/src/util/asset.ts b/packages/instant/src/util/asset.ts new file mode 100644 index 000000000..4e3b2b946 --- /dev/null +++ b/packages/instant/src/util/asset.ts @@ -0,0 +1,53 @@ +import { AssetProxyId, ObjectMap } from '@0x/types'; +import * as _ from 'lodash'; + +import { assetDataNetworkMapping } from '../data/asset_data_network_mapping'; +import { Asset, AssetMetaData, Network, ZeroExInstantError } from '../types'; + +export const assetUtils = { + createAssetFromAssetData: ( + assetData: string, + assetMetaDataMap: ObjectMap<AssetMetaData>, + network: Network, + ): Asset => { + return { + assetData, + metaData: assetUtils.getMetaDataOrThrow(assetData, assetMetaDataMap, network), + }; + }, + getMetaDataOrThrow: (assetData: string, metaDataMap: ObjectMap<AssetMetaData>, network: Network): AssetMetaData => { + let mainnetAssetData: string | undefined = assetData; + if (network !== Network.Mainnet) { + mainnetAssetData = assetUtils.getAssociatedAssetDataIfExists(assetData, network); + } + if (_.isUndefined(mainnetAssetData)) { + throw new Error(ZeroExInstantError.AssetMetaDataNotAvailable); + } + const metaData = metaDataMap[mainnetAssetData]; + if (_.isUndefined(metaData)) { + throw new Error(ZeroExInstantError.AssetMetaDataNotAvailable); + } + return metaData; + }, + bestNameForAsset: (asset?: Asset, defaultName: string = '???'): string => { + if (_.isUndefined(asset)) { + return defaultName; + } + const metaData = asset.metaData; + switch (metaData.assetProxyId) { + case AssetProxyId.ERC20: + return metaData.symbol.toUpperCase(); + case AssetProxyId.ERC721: + return metaData.name; + default: + return defaultName; + } + }, + getAssociatedAssetDataIfExists: (assetData: string, network: Network): string | undefined => { + const assetDataGroupIfExists = _.find(assetDataNetworkMapping, value => value[network] === assetData); + if (_.isUndefined(assetDataGroupIfExists)) { + return; + } + return assetDataGroupIfExists[Network.Mainnet]; + }, +}; diff --git a/packages/instant/src/util/asset_buyer.ts b/packages/instant/src/util/asset_buyer.ts deleted file mode 100644 index 27d66d600..000000000 --- a/packages/instant/src/util/asset_buyer.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AssetBuyer } from '@0xproject/asset-buyer'; - -import { sraApiUrl } from '../constants'; - -import { getProvider } from './provider'; - -const provider = getProvider(); - -export const assetBuyer = AssetBuyer.getAssetBuyerForStandardRelayerAPIUrl(provider, sraApiUrl); diff --git a/packages/instant/src/util/coinbase_api.ts b/packages/instant/src/util/coinbase_api.ts index 94a5d3c80..080421f98 100644 --- a/packages/instant/src/util/coinbase_api.ts +++ b/packages/instant/src/util/coinbase_api.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; const baseEndpoint = 'https://api.coinbase.com/v2'; export const coinbaseApi = { diff --git a/packages/instant/src/util/error.ts b/packages/instant/src/util/error.ts new file mode 100644 index 000000000..64c1f4885 --- /dev/null +++ b/packages/instant/src/util/error.ts @@ -0,0 +1,68 @@ +import { AssetBuyerError } from '@0x/asset-buyer'; +import { Dispatch } from 'redux'; + +import { Action, actions } from '../redux/actions'; +import { Asset } from '../types'; + +import { assetUtils } from './asset'; + +class ErrorFlasher { + private _timeoutId?: number; + public flashNewError(dispatch: Dispatch<Action>, error: any, delayMs: number = 7000): void { + this._clearTimeout(); + + // dispatch new message + dispatch(actions.setError(error)); + + this._timeoutId = window.setTimeout(() => { + dispatch(actions.hideError()); + }, delayMs); + } + public clearError(dispatch: Dispatch<Action>): void { + this._clearTimeout(); + dispatch(actions.hideError()); + } + private _clearTimeout(): void { + if (this._timeoutId) { + window.clearTimeout(this._timeoutId); + } + } +} + +const humanReadableMessageForError = (error: Error, asset?: Asset): string | undefined => { + const hasInsufficientLiquidity = + error.message === AssetBuyerError.InsufficientAssetLiquidity || + error.message === AssetBuyerError.InsufficientZrxLiquidity; + if (hasInsufficientLiquidity) { + const assetName = assetUtils.bestNameForAsset(asset, 'of this asset'); + return `Not enough ${assetName} available`; + } + + if ( + error.message === AssetBuyerError.StandardRelayerApiError || + error.message.startsWith(AssetBuyerError.AssetUnavailable) + ) { + const assetName = assetUtils.bestNameForAsset(asset, 'This asset'); + return `${assetName} is currently unavailable`; + } + + if (error.message === AssetBuyerError.SignatureRequestDenied) { + return 'You denied this transaction'; + } + + return undefined; +}; + +export const errorUtil = { + errorFlasher: new ErrorFlasher(), + errorDescription: (error?: any, asset?: Asset): { icon: string; message: string } => { + let bestMessage: string | undefined; + if (error instanceof Error) { + bestMessage = humanReadableMessageForError(error, asset); + } + return { + icon: '😢', + message: bestMessage || 'Something went wrong...', + }; + }, +}; diff --git a/packages/instant/src/util/etherscan.ts b/packages/instant/src/util/etherscan.ts new file mode 100644 index 000000000..ffb08a382 --- /dev/null +++ b/packages/instant/src/util/etherscan.ts @@ -0,0 +1,24 @@ +import * as _ from 'lodash'; + +import { Network } from '../types'; + +const etherscanPrefix = (networkId: number): string | undefined => { + switch (networkId) { + case Network.Kovan: + return 'kovan.'; + case Network.Mainnet: + return ''; + default: + return undefined; + } +}; + +export const etherscanUtil = { + getEtherScanTxnAddressIfExists: (txnHash: string, networkId: number) => { + const prefix = etherscanPrefix(networkId); + if (_.isUndefined(prefix)) { + return; + } + return `https://${prefix}etherscan.io/tx/${txnHash}`; + }, +}; diff --git a/packages/instant/src/util/format.ts b/packages/instant/src/util/format.ts index b62c968fb..8482b1526 100644 --- a/packages/instant/src/util/format.ts +++ b/packages/instant/src/util/format.ts @@ -1,18 +1,26 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import { ethDecimals } from '../constants'; export const format = { - ethBaseAmount: (ethBaseAmount?: BigNumber, decimalPlaces: number = 4, defaultText: string = '0 ETH'): string => { + ethBaseAmount: ( + ethBaseAmount?: BigNumber, + decimalPlaces: number = 4, + defaultText: React.ReactNode = '0 ETH', + ): React.ReactNode => { if (_.isUndefined(ethBaseAmount)) { return defaultText; } const ethUnitAmount = Web3Wrapper.toUnitAmount(ethBaseAmount, ethDecimals); return format.ethUnitAmount(ethUnitAmount, decimalPlaces); }, - ethUnitAmount: (ethUnitAmount?: BigNumber, decimalPlaces: number = 4, defaultText: string = '0 ETH'): string => { + ethUnitAmount: ( + ethUnitAmount?: BigNumber, + decimalPlaces: number = 4, + defaultText: React.ReactNode = '0 ETH', + ): React.ReactNode => { if (_.isUndefined(ethUnitAmount)) { return defaultText; } @@ -23,8 +31,8 @@ export const format = { ethBaseAmount?: BigNumber, ethUsdPrice?: BigNumber, decimalPlaces: number = 2, - defaultText: string = '$0.00', - ): string => { + defaultText: React.ReactNode = '$0.00', + ): React.ReactNode => { if (_.isUndefined(ethBaseAmount) || _.isUndefined(ethUsdPrice)) { return defaultText; } @@ -35,8 +43,8 @@ export const format = { ethUnitAmount?: BigNumber, ethUsdPrice?: BigNumber, decimalPlaces: number = 2, - defaultText: string = '$0.00', - ): string => { + defaultText: React.ReactNode = '$0.00', + ): React.ReactNode => { if (_.isUndefined(ethUnitAmount) || _.isUndefined(ethUsdPrice)) { return defaultText; } diff --git a/packages/instant/src/util/web3_wrapper.ts b/packages/instant/src/util/web3_wrapper.ts index d7e43521f..24dcd9076 100644 --- a/packages/instant/src/util/web3_wrapper.ts +++ b/packages/instant/src/util/web3_wrapper.ts @@ -1,4 +1,4 @@ -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { getProvider } from './provider'; diff --git a/packages/instant/test/util/asset.test.ts b/packages/instant/test/util/asset.test.ts new file mode 100644 index 000000000..c7db7eba7 --- /dev/null +++ b/packages/instant/test/util/asset.test.ts @@ -0,0 +1,47 @@ +import { AssetProxyId, ObjectMap } from '@0x/types'; + +import { Asset, AssetMetaData, ERC20AssetMetaData, Network, ZeroExInstantError } from '../../src/types'; +import { assetUtils } from '../../src/util/asset'; + +const ZRX_ASSET_DATA = '0xf47261b0000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498'; +const ZRX_ASSET_DATA_KOVAN = '0xf47261b00000000000000000000000002002d3812f58e35f0ea1ffbf80a75a38c32175fa'; +const ZRX_META_DATA: ERC20AssetMetaData = { + assetProxyId: AssetProxyId.ERC20, + symbol: 'zrx', + decimals: 18, +}; +const ZRX_ASSET: Asset = { + assetData: ZRX_ASSET_DATA, + metaData: ZRX_META_DATA, +}; +const META_DATA_MAP: ObjectMap<AssetMetaData> = { + [ZRX_ASSET_DATA]: ZRX_META_DATA, +}; + +describe('assetDataUtil', () => { + describe('bestNameForAsset', () => { + it('should return default string if assetData is undefined', () => { + expect(assetUtils.bestNameForAsset(undefined, 'xyz')).toEqual('xyz'); + }); + it('should return ZRX for ZRX assetData', () => { + expect(assetUtils.bestNameForAsset(ZRX_ASSET, 'mah default')).toEqual('ZRX'); + }); + }); + describe('getMetaDataOrThrow', () => { + it('should return the metaData for the supplied mainnet asset data', () => { + expect(assetUtils.getMetaDataOrThrow(ZRX_ASSET_DATA, META_DATA_MAP, Network.Mainnet)).toEqual( + ZRX_META_DATA, + ); + }); + it('should return the metaData for the supplied non-mainnet asset data', () => { + expect(assetUtils.getMetaDataOrThrow(ZRX_ASSET_DATA_KOVAN, META_DATA_MAP, Network.Kovan)).toEqual( + ZRX_META_DATA, + ); + }); + it('should throw if the metaData for the asset is not available', () => { + expect(() => + assetUtils.getMetaDataOrThrow('asset data we dont have', META_DATA_MAP, Network.Mainnet), + ).toThrowError(ZeroExInstantError.AssetMetaDataNotAvailable); + }); + }); +}); diff --git a/packages/instant/test/util/error.test.ts b/packages/instant/test/util/error.test.ts new file mode 100644 index 000000000..90e9c5fb4 --- /dev/null +++ b/packages/instant/test/util/error.test.ts @@ -0,0 +1,56 @@ +import { AssetBuyerError } from '@0x/asset-buyer'; +import { AssetProxyId } from '@0x/types'; + +import { Asset } from '../../src/types'; +import { errorUtil } from '../../src/util/error'; + +const ZRX_ASSET_DATA = '0xf47261b0000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498'; +const ZRX_ASSET: Asset = { + assetData: ZRX_ASSET_DATA, + metaData: { + assetProxyId: AssetProxyId.ERC20, + symbol: 'zrx', + decimals: 18, + }, +}; + +describe('errorUtil', () => { + describe('errorFlasher', () => { + it('should return error and asset name for InsufficientAssetLiquidity', () => { + const insufficientAssetError = new Error(AssetBuyerError.InsufficientAssetLiquidity); + expect(errorUtil.errorDescription(insufficientAssetError, ZRX_ASSET).message).toEqual( + 'Not enough ZRX available', + ); + }); + it('should return error default name for InsufficientAssetLiquidity', () => { + const insufficientZrxError = new Error(AssetBuyerError.InsufficientZrxLiquidity); + expect(errorUtil.errorDescription(insufficientZrxError).message).toEqual( + 'Not enough of this asset available', + ); + }); + it('should return asset name for InsufficientAssetLiquidity', () => { + const insufficientZrxError = new Error(AssetBuyerError.InsufficientZrxLiquidity); + expect(errorUtil.errorDescription(insufficientZrxError, ZRX_ASSET).message).toEqual( + 'Not enough ZRX available', + ); + }); + it('should return unavailable error and asset name for StandardRelayerApiError', () => { + const standardRelayerError = new Error(AssetBuyerError.StandardRelayerApiError); + expect(errorUtil.errorDescription(standardRelayerError, ZRX_ASSET).message).toEqual( + 'ZRX is currently unavailable', + ); + }); + it('should return error for AssetUnavailable error', () => { + const assetUnavailableError = new Error(`${AssetBuyerError.AssetUnavailable}: For assetData ${ZRX_ASSET}`); + expect(errorUtil.errorDescription(assetUnavailableError, ZRX_ASSET).message).toEqual( + 'ZRX is currently unavailable', + ); + }); + it('should return default for AssetUnavailable error', () => { + const assetUnavailableError = new Error(`${AssetBuyerError.AssetUnavailable}: For assetData xyz`); + expect(errorUtil.errorDescription(assetUnavailableError, undefined).message).toEqual( + 'This asset is currently unavailable', + ); + }); + }); +}); diff --git a/packages/instant/test/util/format.test.ts b/packages/instant/test/util/format.test.ts index 073b86b19..141df9275 100644 --- a/packages/instant/test/util/format.test.ts +++ b/packages/instant/test/util/format.test.ts @@ -1,5 +1,5 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { ethDecimals } from '../../src/constants'; import { format } from '../../src/util/format'; diff --git a/packages/instant/tslint.json b/packages/instant/tslint.json index f71532e5d..08b76be97 100644 --- a/packages/instant/tslint.json +++ b/packages/instant/tslint.json @@ -1,7 +1,8 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "custom-no-magic-numbers": false, - "semicolon": [true, "always", "ignore-bound-class-methods"] + "semicolon": [true, "always", "ignore-bound-class-methods"], + "max-classes-per-file": false } } diff --git a/packages/json-schemas/CHANGELOG.json b/packages/json-schemas/CHANGELOG.json index 08e74b6db..3bd6552e3 100644 --- a/packages/json-schemas/CHANGELOG.json +++ b/packages/json-schemas/CHANGELOG.json @@ -1,5 +1,15 @@ [ { + "version": "2.0.1", + "changes": [ + { + "note": + "Improve schemas by enforcing that amounts that must be whole numbers (e.g Order asset amounts) no longer allow decimal amounts", + "pr": 1173 + } + ] + }, + { "version": "2.0.0", "changes": [ { @@ -7,7 +17,8 @@ "Convert all schemas to JSON files so that they can be used with `json-schema` implemenations in other programming languages.", "pr": 1145 } - ] + ], + "timestamp": 1539871071 }, { "timestamp": 1538693146, diff --git a/packages/json-schemas/CHANGELOG.md b/packages/json-schemas/CHANGELOG.md index d9813053f..21efe1be0 100644 --- a/packages/json-schemas/CHANGELOG.md +++ b/packages/json-schemas/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.0.0 - _October 18, 2018_ + + * Convert all schemas to JSON files so that they can be used with `json-schema` implemenations in other programming languages. (#1145) + ## v1.0.7 - _October 4, 2018_ * Dependencies updated @@ -41,7 +45,7 @@ CHANGELOG * Update incorrect relayer api fee recipients response schema (#974) -## v1.0.1-rc.4 - _August 13, 2018_ +## v1.0.1-rc.4 - _August 14, 2018_ * Allow for additional properties in txData schema (#938) * Change hexSchema to match `0x` (#937) diff --git a/packages/json-schemas/README.md b/packages/json-schemas/README.md index ab57833be..f50382f4b 100644 --- a/packages/json-schemas/README.md +++ b/packages/json-schemas/README.md @@ -1,4 +1,4 @@ -## @0xproject/json-schemas +## @0x/json-schemas Contains 0x-related json schemas @@ -7,26 +7,26 @@ Contains 0x-related json schemas ## Installation ```bash -yarn add @0xproject/json-schemas +yarn add @0x/json-schemas ``` **Import** ```typescript -import { SchemaValidator, ValidatorResult, schemas } from '@0xproject/json-schemas'; +import { SchemaValidator, ValidatorResult, schemas } from '@0x/json-schemas'; ``` or ```javascript -var schemas = require('@0xproject/json-schemas').schemas; +var schemas = require('@0x/json-schemas').schemas; ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -55,13 +55,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/json-schemas yarn build +PKG=@0x/json-schemas yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/json-schemas yarn watch +PKG=@0x/json-schemas yarn watch ``` ### Clean diff --git a/packages/json-schemas/package.json b/packages/json-schemas/package.json index 20d2e48ce..97cf607c1 100644 --- a/packages/json-schemas/package.json +++ b/packages/json-schemas/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/json-schemas", - "version": "1.0.7", + "name": "@0x/json-schemas", + "version": "2.0.0", "engines": { "node": ">=6.12" }, @@ -39,14 +39,14 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/json-schemas/README.md", "dependencies": { - "@0xproject/typescript-typings": "^3.0.2", + "@0x/typescript-typings": "^3.0.3", "@types/node": "*", "jsonschema": "^1.2.0", "lodash.values": "^4.3.0" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", - "@0xproject/utils": "^2.0.2", + "@0x/tslint-config": "^1.0.9", + "@0x/utils": "^2.0.3", "@types/lodash.foreach": "^4.5.3", "@types/lodash.values": "^4.3.3", "@types/mocha": "^2.2.42", diff --git a/packages/json-schemas/schemas/order_cancel_schema.json b/packages/json-schemas/schemas/order_cancel_schema.json index 09d4068c6..8d0999941 100644 --- a/packages/json-schemas/schemas/order_cancel_schema.json +++ b/packages/json-schemas/schemas/order_cancel_schema.json @@ -4,7 +4,7 @@ "items": { "properties": { "order": { "$ref": "/orderSchema" }, - "takerTokenCancelAmount": { "$ref": "/numberSchema" } + "takerTokenCancelAmount": { "$ref": "/wholeNumberSchema" } }, "required": ["order", "takerTokenCancelAmount"], "type": "object" diff --git a/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json b/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json index c9549c72e..73bbf20bb 100644 --- a/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json +++ b/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json @@ -4,7 +4,7 @@ "items": { "properties": { "signedOrder": { "$ref": "/signedOrderSchema" }, - "fillTakerAmount": { "$ref": "/numberSchema" } + "fillTakerAmount": { "$ref": "/wholeNumberSchema" } }, "required": ["signedOrder", "fillTakerAmount"], "type": "object" diff --git a/packages/json-schemas/schemas/order_fill_requests_schema.json b/packages/json-schemas/schemas/order_fill_requests_schema.json index 98325653b..d06fb19a2 100644 --- a/packages/json-schemas/schemas/order_fill_requests_schema.json +++ b/packages/json-schemas/schemas/order_fill_requests_schema.json @@ -4,7 +4,7 @@ "items": { "properties": { "signedOrder": { "$ref": "/signedOrderSchema" }, - "takerTokenFillAmount": { "$ref": "/numberSchema" } + "takerTokenFillAmount": { "$ref": "/wholeNumberSchema" } }, "required": ["signedOrder", "takerTokenFillAmount"], "type": "object" diff --git a/packages/json-schemas/schemas/order_schema.json b/packages/json-schemas/schemas/order_schema.json index de2c8c7c2..c70b9e2dd 100644 --- a/packages/json-schemas/schemas/order_schema.json +++ b/packages/json-schemas/schemas/order_schema.json @@ -3,17 +3,17 @@ "properties": { "makerAddress": { "$ref": "/addressSchema" }, "takerAddress": { "$ref": "/addressSchema" }, - "makerFee": { "$ref": "/numberSchema" }, - "takerFee": { "$ref": "/numberSchema" }, + "makerFee": { "$ref": "/wholeNumberSchema" }, + "takerFee": { "$ref": "/wholeNumberSchema" }, "senderAddress": { "$ref": "/addressSchema" }, - "makerAssetAmount": { "$ref": "/numberSchema" }, - "takerAssetAmount": { "$ref": "/numberSchema" }, + "makerAssetAmount": { "$ref": "/wholeNumberSchema" }, + "takerAssetAmount": { "$ref": "/wholeNumberSchema" }, "makerAssetData": { "$ref": "/hexSchema" }, "takerAssetData": { "$ref": "/hexSchema" }, - "salt": { "$ref": "/numberSchema" }, + "salt": { "$ref": "/wholeNumberSchema" }, "exchangeAddress": { "$ref": "/addressSchema" }, "feeRecipientAddress": { "$ref": "/addressSchema" }, - "expirationTimeSeconds": { "$ref": "/numberSchema" } + "expirationTimeSeconds": { "$ref": "/wholeNumberSchema" } }, "required": [ "makerAddress", diff --git a/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json b/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json index 0ab9b444f..e0f274c5d 100644 --- a/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json +++ b/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json @@ -3,8 +3,8 @@ "type": "object", "properties": { "assetData": { "$ref": "/hexSchema" }, - "minAmount": { "$ref": "/numberSchema" }, - "maxAmount": { "$ref": "/numberSchema" }, + "minAmount": { "$ref": "/wholeNumberSchema" }, + "maxAmount": { "$ref": "/wholeNumberSchema" }, "precision": { "type": "number" } }, "required": ["assetData"] diff --git a/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json b/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json index bc95b61ef..f4583fc62 100644 --- a/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json +++ b/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json @@ -4,12 +4,12 @@ "properties": { "makerAddress": { "$ref": "/addressSchema" }, "takerAddress": { "$ref": "/addressSchema" }, - "makerAssetAmount": { "$ref": "/numberSchema" }, - "takerAssetAmount": { "$ref": "/numberSchema" }, + "makerAssetAmount": { "$ref": "/wholeNumberSchema" }, + "takerAssetAmount": { "$ref": "/wholeNumberSchema" }, "makerAssetData": { "$ref": "/hexSchema" }, "takerAssetData": { "$ref": "/hexSchema" }, "exchangeAddress": { "$ref": "/addressSchema" }, - "expirationTimeSeconds": { "$ref": "/numberSchema" } + "expirationTimeSeconds": { "$ref": "/wholeNumberSchema" } }, "required": [ "makerAddress", diff --git a/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json b/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json index 0742febdf..8193861e1 100644 --- a/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json +++ b/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json @@ -2,8 +2,8 @@ "id": "/relayerApiOrderConfigResponseSchema", "type": "object", "properties": { - "makerFee": { "$ref": "/numberSchema" }, - "takerFee": { "$ref": "/numberSchema" }, + "makerFee": { "$ref": "/wholeNumberSchema" }, + "takerFee": { "$ref": "/wholeNumberSchema" }, "feeRecipientAddress": { "$ref": "/addressSchema" }, "senderAddress": { "$ref": "/addressSchema" } }, diff --git a/packages/json-schemas/schemas/whole_number_schema.json b/packages/json-schemas/schemas/whole_number_schema.json new file mode 100644 index 000000000..944ce820e --- /dev/null +++ b/packages/json-schemas/schemas/whole_number_schema.json @@ -0,0 +1,5 @@ +{ + "id": "/wholeNumberSchema", + "type": "string", + "pattern": "^\\d+$" +} diff --git a/packages/json-schemas/schemas/zero_ex_transaction_schema.json b/packages/json-schemas/schemas/zero_ex_transaction_schema.json index ad3b11583..0c714f14d 100644 --- a/packages/json-schemas/schemas/zero_ex_transaction_schema.json +++ b/packages/json-schemas/schemas/zero_ex_transaction_schema.json @@ -3,7 +3,7 @@ "properties": { "data": { "$ref": "/hexSchema" }, "signerAddress": { "$ref": "/addressSchema" }, - "salt": { "$ref": "/numberSchema" } + "salt": { "$ref": "/wholeNumberSchema" } }, "required": ["data", "salt", "signerAddress"], "type": "object" diff --git a/packages/json-schemas/src/schemas.ts b/packages/json-schemas/src/schemas.ts index 8318df617..8ece5de75 100644 --- a/packages/json-schemas/src/schemas.ts +++ b/packages/json-schemas/src/schemas.ts @@ -34,6 +34,7 @@ import * as signedOrderSchema from '../schemas/signed_order_schema.json'; import * as signedOrdersSchema from '../schemas/signed_orders_schema.json'; import * as tokenSchema from '../schemas/token_schema.json'; import * as txDataSchema from '../schemas/tx_data_schema.json'; +import * as wholeNumberSchema from '../schemas/whole_number_schema.json'; import * as zeroExTransactionSchema from '../schemas/zero_ex_transaction_schema.json'; export const schemas = { @@ -74,4 +75,5 @@ export const schemas = { relayerApiOrdersResponseSchema, relayerApiAssetDataPairsSchema, zeroExTransactionSchema, + wholeNumberSchema, }; diff --git a/packages/json-schemas/test/schema_test.ts b/packages/json-schemas/test/schema_test.ts index 4e0f66ef5..bfa2c5668 100644 --- a/packages/json-schemas/test/schema_test.ts +++ b/packages/json-schemas/test/schema_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as dirtyChai from 'dirty-chai'; import forEach = require('lodash.foreach'); @@ -36,6 +36,7 @@ const { relayerApiOrdersChannelUpdateSchema, relayerApiOrdersResponseSchema, relayerApiOrderSchema, + wholeNumberSchema, } = schemas; describe('Schema', () => { @@ -73,6 +74,17 @@ describe('Schema', () => { validateAgainstSchema(testCases, numberSchema, shouldFail); }); }); + describe('#wholeNumberSchema', () => { + it('should validate valid numbers', () => { + const testCases = ['5', '42', '0']; + validateAgainstSchema(testCases, wholeNumberSchema); + }); + it('should fail for invalid numbers', () => { + const testCases = ['1.3', '0.2', '00.00', '.3', '1.', 'abacaba', 'и', '1..0']; + const shouldFail = true; + validateAgainstSchema(testCases, wholeNumberSchema, shouldFail); + }); + }); describe('#addressSchema', () => { it('should validate valid addresses', () => { const testCases = ['0x8b0292b11a196601ed2ce54b665cafeca0347d42', NULL_ADDRESS]; diff --git a/packages/json-schemas/tsconfig.json b/packages/json-schemas/tsconfig.json index 425dfcfe1..7b14166c0 100644 --- a/packages/json-schemas/tsconfig.json +++ b/packages/json-schemas/tsconfig.json @@ -43,6 +43,7 @@ "./schemas/js_number.json", "./schemas/zero_ex_transaction_schema.json", "./schemas/tx_data_schema.json", - "./schemas/index_filter_values_schema.json" + "./schemas/index_filter_values_schema.json", + "./schemas/whole_number_schema.json" ] } diff --git a/packages/json-schemas/tslint.json b/packages/json-schemas/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/json-schemas/tslint.json +++ b/packages/json-schemas/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/metacoin/README.md b/packages/metacoin/README.md index 15816cc67..4f9609dde 100644 --- a/packages/metacoin/README.md +++ b/packages/metacoin/README.md @@ -1,4 +1,4 @@ -## @0xproject/metacoin +## @0x/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: @@ -35,13 +35,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/metacoin yarn build +PKG=@0x/metacoin yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/metacoin yarn watch +PKG=@0x/metacoin yarn watch ``` ### Clean diff --git a/packages/metacoin/package.json b/packages/metacoin/package.json index 58fc0b848..04bdeba4c 100644 --- a/packages/metacoin/package.json +++ b/packages/metacoin/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/metacoin", - "version": "0.0.23", + "name": "@0x/metacoin", + "version": "0.0.24", "engines": { "node": ">=6.12" }, @@ -29,25 +29,25 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "@0xproject/abi-gen": "^1.0.13", - "@0xproject/base-contract": "^3.0.1", - "@0xproject/sol-cov": "^2.1.7", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/tslint-config": "^1.0.8", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/abi-gen": "^1.0.14", + "@0x/base-contract": "^3.0.2", + "@0x/sol-cov": "^2.1.8", + "@0x/subproviders": "^2.1.0", + "@0x/tslint-config": "^1.0.9", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@types/mocha": "^5.2.2", "copyfiles": "^2.0.0", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethers": "~4.0.4", "lodash": "^4.17.5", "run-s": "^0.0.0" }, "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/sol-compiler": "^1.1.7", + "@0x/dev-utils": "^1.0.13", + "@0x/sol-compiler": "^1.1.8", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", "chai-bignumber": "^2.0.1", diff --git a/packages/metacoin/test/global_hooks.ts b/packages/metacoin/test/global_hooks.ts index 7328531e4..437061b46 100644 --- a/packages/metacoin/test/global_hooks.ts +++ b/packages/metacoin/test/global_hooks.ts @@ -1,4 +1,4 @@ -import { env, EnvVars } from '@0xproject/dev-utils'; +import { env, EnvVars } from '@0x/dev-utils'; import { coverage } from './utils/coverage'; import { profiler } from './utils/profiler'; diff --git a/packages/metacoin/test/metacoin_test.ts b/packages/metacoin/test/metacoin_test.ts index 6c16a2d39..a8ba85814 100644 --- a/packages/metacoin/test/metacoin_test.ts +++ b/packages/metacoin/test/metacoin_test.ts @@ -1,5 +1,5 @@ -import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils'; -import { BigNumber } from '@0xproject/utils'; +import { BlockchainLifecycle, devConstants } from '@0x/dev-utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { ContractArtifact, LogWithDecodedArgs } from 'ethereum-types'; diff --git a/packages/metacoin/test/utils/config.ts b/packages/metacoin/test/utils/config.ts index c26fe5f25..05f524d52 100644 --- a/packages/metacoin/test/utils/config.ts +++ b/packages/metacoin/test/utils/config.ts @@ -1,4 +1,4 @@ -import { devConstants } from '@0xproject/dev-utils'; +import { devConstants } from '@0x/dev-utils'; export const config = { networkId: 50, diff --git a/packages/metacoin/test/utils/coverage.ts b/packages/metacoin/test/utils/coverage.ts index 945afb0a7..31275a163 100644 --- a/packages/metacoin/test/utils/coverage.ts +++ b/packages/metacoin/test/utils/coverage.ts @@ -1,5 +1,5 @@ -import { devConstants } from '@0xproject/dev-utils'; -import { CoverageSubprovider, SolCompilerArtifactAdapter } from '@0xproject/sol-cov'; +import { devConstants } from '@0x/dev-utils'; +import { CoverageSubprovider, SolCompilerArtifactAdapter } from '@0x/sol-cov'; import * as _ from 'lodash'; import { config } from './config'; diff --git a/packages/metacoin/test/utils/profiler.ts b/packages/metacoin/test/utils/profiler.ts index 701337451..e7c373d20 100644 --- a/packages/metacoin/test/utils/profiler.ts +++ b/packages/metacoin/test/utils/profiler.ts @@ -1,5 +1,5 @@ -import { devConstants } from '@0xproject/dev-utils'; -import { ProfilerSubprovider, SolCompilerArtifactAdapter } from '@0xproject/sol-cov'; +import { devConstants } from '@0x/dev-utils'; +import { ProfilerSubprovider, SolCompilerArtifactAdapter } from '@0x/sol-cov'; import * as _ from 'lodash'; import { config } from './config'; diff --git a/packages/metacoin/test/utils/web3_wrapper.ts b/packages/metacoin/test/utils/web3_wrapper.ts index 36bd6343f..258cf560f 100644 --- a/packages/metacoin/test/utils/web3_wrapper.ts +++ b/packages/metacoin/test/utils/web3_wrapper.ts @@ -1,7 +1,7 @@ -import { env, EnvVars } from '@0xproject/dev-utils'; -import { GanacheSubprovider, prependSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; -import { errorUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { env, EnvVars } from '@0x/dev-utils'; +import { GanacheSubprovider, prependSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders'; +import { errorUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as fs from 'fs'; import { config } from './config'; diff --git a/packages/metacoin/tsconfig.json b/packages/metacoin/tsconfig.json index 3065396ff..163465cf5 100644 --- a/packages/metacoin/tsconfig.json +++ b/packages/metacoin/tsconfig.json @@ -5,10 +5,10 @@ "rootDir": ".", "typeRoots": [ "comment: for building within 0x-monorepo:", - "../../node_modules/@0xproject/typescript-typings/types", + "../../node_modules/@0x/typescript-typings/types", "../../node_modules/@types", "comment: for building in an isolated environment:", - "node_modules/@0xproject/typescript-typings/types", + "node_modules/@0x/typescript-typings/types", "node_modules/@types" ] }, diff --git a/packages/metacoin/tslint.json b/packages/metacoin/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/metacoin/tslint.json +++ b/packages/metacoin/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/migrations/CHANGELOG.json b/packages/migrations/CHANGELOG.json index 6c1959a7e..6d93feb1e 100644 --- a/packages/migrations/CHANGELOG.json +++ b/packages/migrations/CHANGELOG.json @@ -7,7 +7,8 @@ "Contract artifacts have been moved to the new @0xproject/contract-artifacts package. v1 migrations have been removed. `runMigrationsAsync` returns the addresses of the contracts that were deployed.", "pr": 1105 } - ] + ], + "timestamp": 1539871071 }, { "version": "1.0.14", diff --git a/packages/migrations/CHANGELOG.md b/packages/migrations/CHANGELOG.md index 81f9fabe3..8d3346972 100644 --- a/packages/migrations/CHANGELOG.md +++ b/packages/migrations/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.0.0 - _October 18, 2018_ + + * Contract artifacts have been moved to the new @0xproject/contract-artifacts package. v1 migrations have been removed. `runMigrationsAsync` returns the addresses of the contracts that were deployed. (#1105) + ## v1.0.14 - _October 4, 2018_ * Dependencies updated @@ -45,7 +49,7 @@ CHANGELOG * Dependencies updated -## v1.0.4 - _August 13, 2018_ +## v1.0.4 - _August 14, 2018_ * Dependencies updated diff --git a/packages/migrations/README.md b/packages/migrations/README.md index 0020d1076..b90d730eb 100644 --- a/packages/migrations/README.md +++ b/packages/migrations/README.md @@ -27,13 +27,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/migrations yarn build +PKG=@0x/migrations yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/migrations yarn watch +PKG=@0x/migrations yarn watch ``` ### Clean diff --git a/packages/migrations/package.json b/packages/migrations/package.json index 44737e227..353697bfc 100644 --- a/packages/migrations/package.json +++ b/packages/migrations/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/migrations", - "version": "1.0.14", + "name": "@0x/migrations", + "version": "2.0.0", "engines": { "node": ">=6.12" }, @@ -17,9 +17,9 @@ }, "license": "Apache-2.0", "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/tslint-config": "^1.0.8", - "@0xproject/types": "^1.1.4", + "@0x/dev-utils": "^1.0.13", + "@0x/tslint-config": "^1.0.9", + "@0x/types": "^1.2.0", "@types/yargs": "^10.0.0", "make-promises-safe": "^1.1.0", "npm-run-all": "^4.1.2", @@ -29,18 +29,18 @@ "yargs": "^10.0.3" }, "dependencies": { - "@0xproject/abi-gen-wrappers": "^1.0.0", - "@0xproject/base-contract": "^3.0.1", - "@0xproject/contract-addresses": "^1.0.0", - "@0xproject/contract-artifacts": "^1.0.0", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/sol-compiler": "^1.1.7", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/abi-gen-wrappers": "^1.0.1", + "@0x/base-contract": "^3.0.2", + "@0x/contract-addresses": "^1.0.1", + "@0x/contract-artifacts": "^1.0.1", + "@0x/order-utils": "^2.0.0", + "@0x/sol-compiler": "^1.1.8", + "@0x/subproviders": "^2.1.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@ledgerhq/hw-app-eth": "^4.3.0", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethers": "~4.0.4", "lodash": "^4.17.5" }, diff --git a/packages/migrations/src/migrate.ts b/packages/migrations/src/migrate.ts index 27f36ba34..d7a76d2f8 100644 --- a/packages/migrations/src/migrate.ts +++ b/packages/migrations/src/migrate.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { devConstants, web3Factory } from '@0xproject/dev-utils'; -import { logUtils } from '@0xproject/utils'; +import { devConstants, web3Factory } from '@0x/dev-utils'; +import { logUtils } from '@0x/utils'; import { Provider } from 'ethereum-types'; import { runMigrationsAsync } from './migration'; diff --git a/packages/migrations/src/migration.ts b/packages/migrations/src/migration.ts index 0ee5b6975..86c76a54b 100644 --- a/packages/migrations/src/migration.ts +++ b/packages/migrations/src/migration.ts @@ -1,9 +1,9 @@ -import * as wrappers from '@0xproject/abi-gen-wrappers'; -import { ContractAddresses } from '@0xproject/contract-addresses'; -import * as artifacts from '@0xproject/contract-artifacts'; -import { assetDataUtils } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import * as wrappers from '@0x/abi-gen-wrappers'; +import { ContractAddresses } from '@0x/contract-addresses'; +import * as artifacts from '@0x/contract-artifacts'; +import { assetDataUtils } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider, TxData } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/migrations/src/types.ts b/packages/migrations/src/types.ts index 65f685797..87e66f356 100644 --- a/packages/migrations/src/types.ts +++ b/packages/migrations/src/types.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export interface ERC20Token { address?: string; diff --git a/packages/migrations/src/utils/constants.ts b/packages/migrations/src/utils/constants.ts index 63898ac02..8b16a0520 100644 --- a/packages/migrations/src/utils/constants.ts +++ b/packages/migrations/src/utils/constants.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const constants = { ASSET_PROXY_OWNER_OWNERS: [ diff --git a/packages/migrations/src/utils/provider_factory.ts b/packages/migrations/src/utils/provider_factory.ts index e7e00a039..8017b672a 100644 --- a/packages/migrations/src/utils/provider_factory.ts +++ b/packages/migrations/src/utils/provider_factory.ts @@ -1,4 +1,4 @@ -import { LedgerEthereumClient, LedgerSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0xproject/subproviders'; +import { LedgerEthereumClient, LedgerSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders'; import Eth from '@ledgerhq/hw-app-eth'; // tslint:disable:no-implicit-dependencies import TransportNodeHid from '@ledgerhq/hw-transport-node-hid'; diff --git a/packages/migrations/src/utils/token_info.ts b/packages/migrations/src/utils/token_info.ts index 200f94896..6e0411f60 100644 --- a/packages/migrations/src/utils/token_info.ts +++ b/packages/migrations/src/utils/token_info.ts @@ -1,4 +1,4 @@ -import { BigNumber, NULL_BYTES } from '@0xproject/utils'; +import { BigNumber, NULL_BYTES } from '@0x/utils'; import { ERC20Token, ERC721Token } from '../types'; diff --git a/packages/migrations/tslint.json b/packages/migrations/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/migrations/tslint.json +++ b/packages/migrations/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/monorepo-scripts/CHANGELOG.json b/packages/monorepo-scripts/CHANGELOG.json index 4797fd929..170a97a33 100644 --- a/packages/monorepo-scripts/CHANGELOG.json +++ b/packages/monorepo-scripts/CHANGELOG.json @@ -9,6 +9,10 @@ { "note": "Add AssetBuyerError to the IGNORED_EXCESSIVE_TYPES array", "pr": 1139 + }, + { + "note": "Add ForwarderError to the IGNORED_EXCESSIVE_TYPES array", + "pr": 1147 } ] }, diff --git a/packages/monorepo-scripts/README.md b/packages/monorepo-scripts/README.md index d979e27dc..0673098b5 100644 --- a/packages/monorepo-scripts/README.md +++ b/packages/monorepo-scripts/README.md @@ -47,13 +47,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/monorepo-scripts yarn build +PKG=@0x/monorepo-scripts yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/monorepo-scripts yarn watch +PKG=@0x/monorepo-scripts yarn watch ``` ### Clean diff --git a/packages/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json index 57e8bc147..ba5f9ca6a 100644 --- a/packages/monorepo-scripts/package.json +++ b/packages/monorepo-scripts/package.json @@ -1,7 +1,7 @@ { "private": true, - "name": "@0xproject/monorepo-scripts", - "version": "1.0.11", + "name": "@0x/monorepo-scripts", + "version": "1.0.12", "engines": { "node": ">=6.12" }, diff --git a/packages/monorepo-scripts/src/doc_gen_configs.ts b/packages/monorepo-scripts/src/doc_gen_configs.ts index 0aaf5a6a5..7a14f8664 100644 --- a/packages/monorepo-scripts/src/doc_gen_configs.ts +++ b/packages/monorepo-scripts/src/doc_gen_configs.ts @@ -56,6 +56,7 @@ export const docGenConfigs: DocGenConfigs = { 'ContractWrappersError', 'OrderError', 'AssetBuyerError', + 'ForwarderWrapperError', ], // Some libraries only export types. In those cases, we cannot check if the exported types are part of the // "exported public interface". Thus we add them here and skip those checks. diff --git a/packages/monorepo-scripts/src/find_unused_dependencies.ts b/packages/monorepo-scripts/src/find_unused_dependencies.ts index 4bb4b7dc5..42b4b7890 100644 --- a/packages/monorepo-scripts/src/find_unused_dependencies.ts +++ b/packages/monorepo-scripts/src/find_unused_dependencies.ts @@ -7,7 +7,7 @@ import { constants } from './constants'; import { utils } from './utils/utils'; // For some reason, `depcheck` hangs on some packages. Add them here. -const IGNORE_PACKAGES = ['@0xproject/sol-compiler']; +const IGNORE_PACKAGES = ['@0x/sol-compiler']; (async () => { utils.log('*** NOTE: Not all deps listed here are actually not required. ***'); diff --git a/packages/monorepo-scripts/src/prepublish_checks.ts b/packages/monorepo-scripts/src/prepublish_checks.ts index 683c26094..5f603ebc7 100644 --- a/packages/monorepo-scripts/src/prepublish_checks.ts +++ b/packages/monorepo-scripts/src/prepublish_checks.ts @@ -11,7 +11,7 @@ import { utils } from './utils/utils'; async function prepublishChecksAsync(): Promise<void> { const shouldIncludePrivate = false; - const updatedPublicPackages = await utils.getUpdatedPackagesAsync(shouldIncludePrivate); + const updatedPublicPackages = await utils.getPackagesToPublishAsync(shouldIncludePrivate); await checkCurrentVersionMatchesLatestPublishedNPMPackageAsync(updatedPublicPackages); await checkChangelogFormatAsync(updatedPublicPackages); diff --git a/packages/monorepo-scripts/src/publish.ts b/packages/monorepo-scripts/src/publish.ts index 646818c58..854a72b86 100644 --- a/packages/monorepo-scripts/src/publish.ts +++ b/packages/monorepo-scripts/src/publish.ts @@ -18,7 +18,7 @@ import { DocGenerateAndUploadUtils } from './utils/doc_generate_and_upload_utils import { publishReleaseNotesAsync } from './utils/github_release_utils'; import { utils } from './utils/utils'; -const NPM_NAMESPACE = '@0xproject/'; +const NPM_NAMESPACE = '@0x/'; const TODAYS_TIMESTAMP = moment().unix(); async function confirmAsync(message: string): Promise<void> { @@ -34,8 +34,12 @@ async function confirmAsync(message: string): Promise<void> { (async () => { // Fetch public, updated Lerna packages const shouldIncludePrivate = true; - const allUpdatedPackages = await utils.getUpdatedPackagesAsync(shouldIncludePrivate); - const packagesWithDocs = getPackagesWithDocs(allUpdatedPackages); + const allPackagesToPublish = await utils.getPackagesToPublishAsync(shouldIncludePrivate); + if (_.isEmpty(allPackagesToPublish)) { + utils.log('No packages need publishing'); + process.exit(0); + } + const packagesWithDocs = getPackagesWithDocs(allPackagesToPublish); if (!configs.IS_LOCAL_PUBLISH) { await confirmAsync( @@ -45,12 +49,12 @@ async function confirmAsync(message: string): Promise<void> { } // Update CHANGELOGs - const updatedPublicPackages = _.filter(allUpdatedPackages, pkg => !pkg.packageJson.private); + const updatedPublicPackages = _.filter(allPackagesToPublish, pkg => !pkg.packageJson.private); const updatedPublicPackageNames = _.map(updatedPublicPackages, pkg => pkg.packageJson.name); utils.log(`Will update CHANGELOGs and publish: \n${updatedPublicPackageNames.join('\n')}\n`); const packageToNextVersion = await updateChangeLogsAsync(updatedPublicPackages); - const updatedPrivatePackages = _.filter(allUpdatedPackages, pkg => pkg.packageJson.private); + const updatedPrivatePackages = _.filter(allPackagesToPublish, pkg => pkg.packageJson.private); _.each(updatedPrivatePackages, pkg => { const currentVersion = pkg.packageJson.version; const packageName = pkg.packageJson.name; @@ -96,7 +100,7 @@ function getPackagesWithDocs(allUpdatedPackages: Package[]): Package[] { const packagesWithDocPages = packagesWithDocPagesStringIfExist.split(' '); const updatedPackagesWithDocPages: Package[] = []; _.each(allUpdatedPackages, pkg => { - const nameWithoutPrefix = pkg.packageJson.name.replace('@0xproject/', ''); + const nameWithoutPrefix = pkg.packageJson.name.replace('@0x/', ''); if (_.includes(packagesWithDocPages, nameWithoutPrefix)) { updatedPackagesWithDocPages.push(pkg); } @@ -110,7 +114,7 @@ async function generateAndUploadDocJsonsAsync( shouldUploadDocs: boolean, ): Promise<void> { for (const pkg of packagesWithDocs) { - const nameWithoutPrefix = pkg.packageJson.name.replace('@0xproject/', ''); + const nameWithoutPrefix = pkg.packageJson.name.replace('@0x/', ''); const docGenerateAndUploadUtils = new DocGenerateAndUploadUtils(nameWithoutPrefix, isStaging, shouldUploadDocs); await docGenerateAndUploadUtils.generateAndUploadDocsAsync(); } @@ -130,7 +134,7 @@ async function confirmDocPagesRenderAsync(packagesWithDocs: Package[]): Promise< _.each(packagesWithDocs, pkg => { const name = pkg.packageJson.name; - const nameWithoutPrefix = _.startsWith(name, NPM_NAMESPACE) ? name.split('@0xproject/')[1] : name; + const nameWithoutPrefix = _.startsWith(name, NPM_NAMESPACE) ? name.split('@0x/')[1] : name; const link = `${constants.stagingWebsite}/docs/${nameWithoutPrefix}`; // tslint:disable-next-line:no-floating-promises opn(link); diff --git a/packages/monorepo-scripts/src/publish_release_notes.ts b/packages/monorepo-scripts/src/publish_release_notes.ts index 6090498e0..d2082521c 100644 --- a/packages/monorepo-scripts/src/publish_release_notes.ts +++ b/packages/monorepo-scripts/src/publish_release_notes.ts @@ -15,14 +15,14 @@ const args = yargs 'Space-separated list of packages to generated release notes for. If not supplied, it does all `Lerna updated` packages.', type: 'string', }) - .example('$0 --isDryRun true --packages "0x.js @0xproject/web3-wrapper"', 'Full usage example').argv; + .example('$0 --isDryRun true --packages "0x.js @0x/web3-wrapper"', 'Full usage example').argv; (async () => { const isDryRun = args.isDryRun; let packages; if (_.isUndefined(args.packages)) { const shouldIncludePrivate = false; - packages = await utils.getUpdatedPackagesAsync(shouldIncludePrivate); + packages = await utils.getPackagesToPublishAsync(shouldIncludePrivate); } else { const packageNames = args.packages.split(' '); packages = await utils.getPackagesByNameAsync(packageNames); diff --git a/packages/monorepo-scripts/src/test_installation.ts b/packages/monorepo-scripts/src/test_installation.ts index a642498ac..96875d0f9 100644 --- a/packages/monorepo-scripts/src/test_installation.ts +++ b/packages/monorepo-scripts/src/test_installation.ts @@ -12,12 +12,7 @@ import { Package } from './types'; import { utils } from './utils/utils'; // Packages might not be runnable if they are command-line tools or only run in browsers. -const UNRUNNABLE_PACKAGES = [ - '@0xproject/abi-gen', - '@0xproject/sra-report', - '@0xproject/react-shared', - '@0xproject/react-docs', -]; +const UNRUNNABLE_PACKAGES = ['@0x/abi-gen', '@0x/react-shared', '@0x/react-docs']; const mkdirpAsync = promisify(mkdirp); const rimrafAsync = promisify(rimraf); @@ -121,7 +116,7 @@ async function testInstallPackageAsync( await writeFileAsync(indexFilePath, `import * as Package from '${packageName}';\nconsole.log(Package);\n`); const tsConfig = { compilerOptions: { - typeRoots: ['node_modules/@0xproject/typescript-typings/types', 'node_modules/@types'], + typeRoots: ['node_modules/@0x/typescript-typings/types', 'node_modules/@types'], module: 'commonjs', target: 'es5', lib: ['es2017', 'dom'], diff --git a/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts b/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts index 547b65eeb..1a4294e9c 100644 --- a/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts +++ b/packages/monorepo-scripts/src/utils/doc_generate_and_upload_utils.ts @@ -402,7 +402,7 @@ export class DocGenerateAndUploadUtils { sanitizedExportPathToExportPath[sanitizedExportPath] = exportPath; return sanitizedExportPath; } - const monorepoPrefix = '@0xproject/'; + const monorepoPrefix = '@0x/'; if (_.startsWith(exportPath, monorepoPrefix)) { const sanitizedExportPath = exportPath.split(monorepoPrefix)[1]; sanitizedExportPathToExportPath[sanitizedExportPath] = exportPath; @@ -478,7 +478,7 @@ export class DocGenerateAndUploadUtils { }); }); - // @0xproject/types & ethereum-types are examples of packages where their index.ts exports types + // @0x/types & ethereum-types are examples of packages where their index.ts exports types // directly, meaning no internal paths will exist to follow. Other packages also have direct exports // in their index.ts, so we always add it to the source files passed to TypeDoc if (typeDocSourceIncludes.size === 0) { diff --git a/packages/monorepo-scripts/src/utils/github_release_utils.ts b/packages/monorepo-scripts/src/utils/github_release_utils.ts index 0f3485de0..7434d397e 100644 --- a/packages/monorepo-scripts/src/utils/github_release_utils.ts +++ b/packages/monorepo-scripts/src/utils/github_release_utils.ts @@ -12,7 +12,7 @@ import { utils } from './utils'; const publishReleaseAsync = promisify(publishRelease); // tslint:disable-next-line:completed-docs -export async function publishReleaseNotesAsync(updatedPublishPackages: Package[], isDryRun: boolean): Promise<void> { +export async function publishReleaseNotesAsync(packagesToPublish: Package[], isDryRun: boolean): Promise<void> { // Git push a tag representing this publish (publish-{commit-hash}) (truncate hash) const result = await execAsync('git log -n 1 --pretty=format:"%H"', { cwd: constants.monorepoRootPath }); const latestGitCommit = result.stdout; @@ -40,12 +40,8 @@ export async function publishReleaseNotesAsync(updatedPublishPackages: Package[] let assets: string[] = []; let aggregateNotes = ''; - _.each(updatedPublishPackages, pkg => { - const notes = getReleaseNotesForPackage(pkg.packageJson.name, pkg.packageJson.version); - if (_.isEmpty(notes)) { - return; // don't include it - } - aggregateNotes += `### ${pkg.packageJson.name}@${pkg.packageJson.version}\n${notes}\n\n`; + _.each(packagesToPublish, pkg => { + aggregateNotes += getReleaseNotesForPackage(pkg.packageJson.name); const packageAssets = _.get(pkg.packageJson, 'config.postpublish.assets'); if (!_.isUndefined(packageAssets)) { @@ -92,8 +88,8 @@ function adjustAssetPaths(assets: string[]): string[] { return finalAssets; } -function getReleaseNotesForPackage(packageName: string, version: string): string { - const packageNameWithoutNamespace = packageName.replace('@0xproject/', ''); +function getReleaseNotesForPackage(packageName: string): string { + const packageNameWithoutNamespace = packageName.replace('@0x/', ''); const changelogJSONPath = path.join( constants.monorepoRootPath, 'packages', @@ -115,5 +111,9 @@ function getReleaseNotesForPackage(packageName: string, version: string): string } notes += `\n`; }); - return notes; + if (_.isEmpty(notes)) { + return ''; // don't include it + } + const releaseNotesSection = `### ${packageName}@${latestLog.version}\n${notes}\n\n`; + return releaseNotesSection; } diff --git a/packages/monorepo-scripts/src/utils/utils.ts b/packages/monorepo-scripts/src/utils/utils.ts index 5e2e877c7..44ff971e8 100644 --- a/packages/monorepo-scripts/src/utils/utils.ts +++ b/packages/monorepo-scripts/src/utils/utils.ts @@ -61,7 +61,7 @@ export const utils = { }); return updatedPackages; }, - async getUpdatedPackagesAsync(shouldIncludePrivate: boolean): Promise<Package[]> { + async getPackagesToPublishAsync(shouldIncludePrivate: boolean): Promise<Package[]> { const updatedPublicPackages = await utils.getLernaUpdatedPackagesAsync(shouldIncludePrivate); const updatedPackageNames = _.map(updatedPublicPackages, pkg => pkg.name); diff --git a/packages/order-utils/CHANGELOG.json b/packages/order-utils/CHANGELOG.json index 9bf16ef2a..22af2412b 100644 --- a/packages/order-utils/CHANGELOG.json +++ b/packages/order-utils/CHANGELOG.json @@ -19,7 +19,8 @@ "note": "Use `AssetData` union type for function return values.", "pr": 1131 } - ] + ], + "timestamp": 1539871071 }, { "version": "1.0.7", diff --git a/packages/order-utils/CHANGELOG.md b/packages/order-utils/CHANGELOG.md index 24598883a..afd5c4adc 100644 --- a/packages/order-utils/CHANGELOG.md +++ b/packages/order-utils/CHANGELOG.md @@ -5,6 +5,13 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.0.0 - _October 18, 2018_ + + * Added `ecSignOrderAsync` to first sign an order using `eth_signTypedData` and fallback to `eth_sign`. (#1102) + * Added `ecSignTypedDataOrderAsync` to sign an order exclusively using `eth_signTypedData`. (#1102) + * Rename `ecSignOrderHashAsync` to `ecSignHashAsync` removing `SignerType` parameter. (#1102) + * Use `AssetData` union type for function return values. (#1131) + ## v1.0.7 - _October 4, 2018_ * Dependencies updated @@ -52,7 +59,7 @@ CHANGELOG * Make `sortFeeOrdersByFeeAdjustedRate` in `sortingUtils` generic (#997) * Update `findFeeOrdersThatCoverFeesForTargetOrders` to round the the nearest integer when calculating required fees (#997) -## v1.0.1-rc.3 - _August 13, 2018_ +## v1.0.1-rc.3 - _August 14, 2018_ * Update ecSignOrderHashAsync to return signature string with signature type byte. Removes messagePrefixOpts. (#914) * Added a synchronous `createOrder` method in `orderFactory`, updated public interfaces to support some optional parameters (#936) diff --git a/packages/order-utils/README.md b/packages/order-utils/README.md index 33df1d4b0..4a8287098 100644 --- a/packages/order-utils/README.md +++ b/packages/order-utils/README.md @@ -1,4 +1,4 @@ -## @0xproject/order-utils +## @0x/order-utils 0x order-related utilities for those developing on top of 0x protocol. @@ -7,14 +7,14 @@ ## Installation ```bash -yarn add @0xproject/order-utils +yarn add @0x/order-utils ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -43,13 +43,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/order-utils yarn build +PKG=@0x/order-utils yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/order-utils yarn watch +PKG=@0x/order-utils yarn watch ``` ### Clean diff --git a/packages/order-utils/package.json b/packages/order-utils/package.json index 09eef849f..69f14a79e 100644 --- a/packages/order-utils/package.json +++ b/packages/order-utils/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/order-utils", - "version": "1.0.7", + "name": "@0x/order-utils", + "version": "2.0.0", "engines": { "node": ">=6.12" }, @@ -35,8 +35,8 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/order-utils/README.md", "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/tslint-config": "^1.0.8", + "@0x/dev-utils": "^1.0.13", + "@0x/tslint-config": "^1.0.9", "@types/bn.js": "^4.11.0", "@types/lodash": "4.14.104", "chai": "^4.0.1", @@ -53,18 +53,18 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/abi-gen-wrappers": "^1.0.0", - "@0xproject/assert": "^1.0.13", - "@0xproject/base-contract": "^3.0.1", - "@0xproject/contract-artifacts": "^1.0.0", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/abi-gen-wrappers": "^1.0.1", + "@0x/assert": "^1.0.14", + "@0x/base-contract": "^3.0.2", + "@0x/contract-artifacts": "^1.0.1", + "@0x/json-schemas": "^2.0.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@types/node": "*", "bn.js": "^4.11.8", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-abi": "0.6.5", "ethereumjs-util": "^5.1.1", "ethers": "~4.0.4", diff --git a/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_fetcher.ts b/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_fetcher.ts index c7f06abad..13fbf1736 100644 --- a/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_fetcher.ts +++ b/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_fetcher.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; /** * An abstract class to be implemented in order to use OrderStateUtils. The class that diff --git a/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts b/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts index 38e08b7fe..0a73e92bd 100644 --- a/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts +++ b/packages/order-utils/src/abstract/abstract_balance_and_proxy_allowance_lazy_store.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export abstract class AbstractBalanceAndProxyAllowanceLazyStore { public abstract async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; diff --git a/packages/order-utils/src/abstract/abstract_order_filled_cancelled_fetcher.ts b/packages/order-utils/src/abstract/abstract_order_filled_cancelled_fetcher.ts index fbc1c4718..de096b7d9 100644 --- a/packages/order-utils/src/abstract/abstract_order_filled_cancelled_fetcher.ts +++ b/packages/order-utils/src/abstract/abstract_order_filled_cancelled_fetcher.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; /** * An abstract class to be implemented in order to use OrderStateUtils. The class that diff --git a/packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts b/packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts index 617bcb224..d9e66db06 100644 --- a/packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts +++ b/packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export abstract class AbstractOrderFilledCancelledLazyStore { public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; diff --git a/packages/order-utils/src/assert.ts b/packages/order-utils/src/assert.ts index f8db7ac63..2f73f58c4 100644 --- a/packages/order-utils/src/assert.ts +++ b/packages/order-utils/src/assert.ts @@ -1,10 +1,10 @@ -import { assert as sharedAssert } from '@0xproject/assert'; +import { assert as sharedAssert } from '@0x/assert'; // HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here // tslint:disable:no-unused-variable -import { Schema } from '@0xproject/json-schemas'; -import { ECSignature, SignatureType } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Schema } from '@0x/json-schemas'; +import { ECSignature, SignatureType } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; // tslint:enable:no-unused-variable import * as _ from 'lodash'; diff --git a/packages/order-utils/src/asset_data_utils.ts b/packages/order-utils/src/asset_data_utils.ts index 12c11bce9..9bbef3a23 100644 --- a/packages/order-utils/src/asset_data_utils.ts +++ b/packages/order-utils/src/asset_data_utils.ts @@ -1,5 +1,5 @@ -import { AssetData, AssetProxyId, ERC20AssetData, ERC721AssetData } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { AssetData, AssetProxyId, ERC20AssetData, ERC721AssetData } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import ethAbi = require('ethereumjs-abi'); import ethUtil = require('ethereumjs-util'); diff --git a/packages/order-utils/src/constants.ts b/packages/order-utils/src/constants.ts index 7de20a696..10029dcc3 100644 --- a/packages/order-utils/src/constants.ts +++ b/packages/order-utils/src/constants.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const constants = { NULL_ADDRESS: '0x0000000000000000000000000000000000000000', diff --git a/packages/order-utils/src/eip712_utils.ts b/packages/order-utils/src/eip712_utils.ts index 56f736500..385fda989 100644 --- a/packages/order-utils/src/eip712_utils.ts +++ b/packages/order-utils/src/eip712_utils.ts @@ -1,6 +1,6 @@ -import { assert } from '@0xproject/assert'; -import { schemas } from '@0xproject/json-schemas'; -import { EIP712Object, EIP712TypedData, EIP712Types, Order, ZeroExTransaction } from '@0xproject/types'; +import { assert } from '@0x/assert'; +import { schemas } from '@0x/json-schemas'; +import { EIP712Object, EIP712TypedData, EIP712Types, Order, ZeroExTransaction } from '@0x/types'; import * as _ from 'lodash'; import { constants } from './constants'; diff --git a/packages/order-utils/src/exchange_transfer_simulator.ts b/packages/order-utils/src/exchange_transfer_simulator.ts index 81c849c64..7a38b35df 100644 --- a/packages/order-utils/src/exchange_transfer_simulator.ts +++ b/packages/order-utils/src/exchange_transfer_simulator.ts @@ -1,5 +1,5 @@ -import { ExchangeContractErrs } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { ExchangeContractErrs } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { AbstractBalanceAndProxyAllowanceLazyStore } from './abstract/abstract_balance_and_proxy_allowance_lazy_store'; import { constants } from './constants'; diff --git a/packages/order-utils/src/index.ts b/packages/order-utils/src/index.ts index 50b8a88a8..e70d43efb 100644 --- a/packages/order-utils/src/index.ts +++ b/packages/order-utils/src/index.ts @@ -48,7 +48,7 @@ export { EIP712Object, EIP712ObjectValue, ZeroExTransaction, -} from '@0xproject/types'; +} from '@0x/types'; export { OrderError, TradeSide, diff --git a/packages/order-utils/src/market_utils.ts b/packages/order-utils/src/market_utils.ts index ed6af7d85..fa32f1413 100644 --- a/packages/order-utils/src/market_utils.ts +++ b/packages/order-utils/src/market_utils.ts @@ -1,6 +1,6 @@ -import { schemas } from '@0xproject/json-schemas'; -import { Order } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { schemas } from '@0x/json-schemas'; +import { Order } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import { assert } from './assert'; diff --git a/packages/order-utils/src/order_factory.ts b/packages/order-utils/src/order_factory.ts index 0f0cd6046..f7b855bfb 100644 --- a/packages/order-utils/src/order_factory.ts +++ b/packages/order-utils/src/order_factory.ts @@ -1,5 +1,5 @@ -import { Order, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { Order, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/order-utils/src/order_hash.ts b/packages/order-utils/src/order_hash.ts index b523a3523..c8e9be71e 100644 --- a/packages/order-utils/src/order_hash.ts +++ b/packages/order-utils/src/order_hash.ts @@ -1,6 +1,6 @@ -import { schemas, SchemaValidator } from '@0xproject/json-schemas'; -import { Order, SignedOrder } from '@0xproject/types'; -import { signTypedDataUtils } from '@0xproject/utils'; +import { schemas, SchemaValidator } from '@0x/json-schemas'; +import { Order, SignedOrder } from '@0x/types'; +import { signTypedDataUtils } from '@0x/utils'; import * as _ from 'lodash'; import { assert } from './assert'; diff --git a/packages/order-utils/src/order_state_utils.ts b/packages/order-utils/src/order_state_utils.ts index 9b21ef6e9..159aeeb09 100644 --- a/packages/order-utils/src/order_state_utils.ts +++ b/packages/order-utils/src/order_state_utils.ts @@ -5,8 +5,8 @@ import { OrderStateInvalid, OrderStateValid, SignedOrder, -} from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +} from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { AbstractBalanceAndProxyAllowanceFetcher } from './abstract/abstract_balance_and_proxy_allowance_fetcher'; import { AbstractOrderFilledCancelledFetcher } from './abstract/abstract_order_filled_cancelled_fetcher'; diff --git a/packages/order-utils/src/order_validation_utils.ts b/packages/order-utils/src/order_validation_utils.ts index 8227fb07c..a40069f63 100644 --- a/packages/order-utils/src/order_validation_utils.ts +++ b/packages/order-utils/src/order_validation_utils.ts @@ -1,5 +1,5 @@ -import { RevertReason, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { RevertReason, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/order-utils/src/parsing_utils.ts b/packages/order-utils/src/parsing_utils.ts index 232c54b7b..98c6899fe 100644 --- a/packages/order-utils/src/parsing_utils.ts +++ b/packages/order-utils/src/parsing_utils.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; export const orderParsingUtils = { diff --git a/packages/order-utils/src/rate_utils.ts b/packages/order-utils/src/rate_utils.ts index c9ca72c59..416e00c67 100644 --- a/packages/order-utils/src/rate_utils.ts +++ b/packages/order-utils/src/rate_utils.ts @@ -1,6 +1,6 @@ -import { schemas } from '@0xproject/json-schemas'; -import { Order } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { schemas } from '@0x/json-schemas'; +import { Order } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { assert } from './assert'; import { constants } from './constants'; diff --git a/packages/order-utils/src/remaining_fillable_calculator.ts b/packages/order-utils/src/remaining_fillable_calculator.ts index 7022aa979..052eafa1d 100644 --- a/packages/order-utils/src/remaining_fillable_calculator.ts +++ b/packages/order-utils/src/remaining_fillable_calculator.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export class RemainingFillableCalculator { private readonly _isTraderAssetZRX: boolean; diff --git a/packages/order-utils/src/salt.ts b/packages/order-utils/src/salt.ts index 90a4197c0..ff47ab5d2 100644 --- a/packages/order-utils/src/salt.ts +++ b/packages/order-utils/src/salt.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; const MAX_DIGITS_IN_UNSIGNED_256_INT = 78; diff --git a/packages/order-utils/src/signature_utils.ts b/packages/order-utils/src/signature_utils.ts index d755846ad..96d90e21a 100644 --- a/packages/order-utils/src/signature_utils.ts +++ b/packages/order-utils/src/signature_utils.ts @@ -1,8 +1,8 @@ -import { ExchangeContract, IValidatorContract, IWalletContract } from '@0xproject/abi-gen-wrappers'; -import * as artifacts from '@0xproject/contract-artifacts'; -import { schemas } from '@0xproject/json-schemas'; -import { ECSignature, Order, SignatureType, SignedOrder, ValidatorSignature } from '@0xproject/types'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ExchangeContract, IValidatorContract, IWalletContract } from '@0x/abi-gen-wrappers'; +import * as artifacts from '@0x/contract-artifacts'; +import { schemas } from '@0x/json-schemas'; +import { ECSignature, Order, SignatureType, SignedOrder, ValidatorSignature } from '@0x/types'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as ethUtil from 'ethereumjs-util'; import * as _ from 'lodash'; diff --git a/packages/order-utils/src/sorting_utils.ts b/packages/order-utils/src/sorting_utils.ts index cd5163cf6..1de24264f 100644 --- a/packages/order-utils/src/sorting_utils.ts +++ b/packages/order-utils/src/sorting_utils.ts @@ -1,6 +1,6 @@ -import { schemas } from '@0xproject/json-schemas'; -import { Order } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { schemas } from '@0x/json-schemas'; +import { Order } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import { assert } from './assert'; diff --git a/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts b/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts index 8a65178b0..f42a76d0c 100644 --- a/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts +++ b/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts @@ -1,5 +1,5 @@ -import { AssetProxyId } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { AssetProxyId } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import { AbstractBalanceAndProxyAllowanceFetcher } from '../abstract/abstract_balance_and_proxy_allowance_fetcher'; diff --git a/packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts b/packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts index 6155c2064..1d84ffdaa 100644 --- a/packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts +++ b/packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import { AbstractOrderFilledCancelledFetcher } from '../abstract/abstract_order_filled_cancelled_fetcher'; diff --git a/packages/order-utils/src/types.ts b/packages/order-utils/src/types.ts index 5b13dd754..55ec553db 100644 --- a/packages/order-utils/src/types.ts +++ b/packages/order-utils/src/types.ts @@ -1,8 +1,8 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export enum OrderError { InvalidSignature = 'INVALID_SIGNATURE', - InvalidMetamaskSigner = "MetaMask provider must be wrapped in a MetamaskSubprovider (from the '@0xproject/subproviders' package) in order to work with this method.", + InvalidMetamaskSigner = "MetaMask provider must be wrapped in a MetamaskSubprovider (from the '@0x/subproviders' package) in order to work with this method.", } export enum TradeSide { @@ -27,7 +27,7 @@ export interface CreateOrderOpts { /** * remainingFillableMakerAssetAmount: An array of BigNumbers corresponding to the `orders` parameter. - * You can use `OrderStateUtils` `@0xproject/order-utils` to perform blockchain lookups for these values. + * You can use `OrderStateUtils` `@0x/order-utils` to perform blockchain lookups for these values. * Defaults to `makerAssetAmount` values from the orders param. * slippageBufferAmount: An additional amount of makerAsset to be covered by the result in case of trade collisions or partial fills. * Defaults to 0 @@ -39,10 +39,10 @@ export interface FindOrdersThatCoverMakerAssetFillAmountOpts { /** * remainingFillableMakerAssetAmount: An array of BigNumbers corresponding to the `orders` parameter. - * You can use `OrderStateUtils` `@0xproject/order-utils` to perform blockchain lookups for these values. + * You can use `OrderStateUtils` `@0x/order-utils` to perform blockchain lookups for these values. * Defaults to `makerAssetAmount` values from the orders param. * remainingFillableFeeAmounts: An array of BigNumbers corresponding to the feeOrders parameter. - * You can use OrderStateUtils @0xproject/order-utils to perform blockchain lookups for these values. + * You can use OrderStateUtils @0x/order-utils to perform blockchain lookups for these values. * Defaults to `makerAssetAmount` values from the feeOrders param. * slippageBufferAmount: An additional amount of fee to be covered by the result in case of trade collisions or partial fills. * Defaults to 0 diff --git a/packages/order-utils/src/utils.ts b/packages/order-utils/src/utils.ts index 0ff05e8ed..6b2261001 100644 --- a/packages/order-utils/src/utils.ts +++ b/packages/order-utils/src/utils.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const utils = { getSignatureTypeIndexIfExists(signature: string): number { diff --git a/packages/order-utils/test/asset_data_utils_test.ts b/packages/order-utils/test/asset_data_utils_test.ts new file mode 100644 index 000000000..f8b850604 --- /dev/null +++ b/packages/order-utils/test/asset_data_utils_test.ts @@ -0,0 +1,31 @@ +import * as chai from 'chai'; + +import { ERC20AssetData } from '@0x/types'; + +import { assetDataUtils } from '../src/asset_data_utils'; + +import { chaiSetup } from './utils/chai_setup'; + +chaiSetup.configure(); +const expect = chai.expect; + +const KNOWN_ENCODINGS = [ + { + address: '0x1dc4c1cefef38a777b15aa20260a54e584b16c48', + assetData: '0xf47261b00000000000000000000000001dc4c1cefef38a777b15aa20260a54e584b16c48', + }, +]; + +const ERC20_ASSET_PROXY_ID = '0xf47261b0'; + +describe('assetDataUtils', () => { + it('should encode', () => { + const assetData = assetDataUtils.encodeERC20AssetData(KNOWN_ENCODINGS[0].address); + expect(assetData).to.equal(KNOWN_ENCODINGS[0].assetData); + }); + it('should decode', () => { + const assetData: ERC20AssetData = assetDataUtils.decodeERC20AssetData(KNOWN_ENCODINGS[0].assetData); + expect(assetData.tokenAddress).to.equal(KNOWN_ENCODINGS[0].address); + expect(assetData.assetProxyId).to.equal(ERC20_ASSET_PROXY_ID); + }); +}); diff --git a/packages/order-utils/test/eip712_utils_test.ts b/packages/order-utils/test/eip712_utils_test.ts index d65cabe9c..a54e49958 100644 --- a/packages/order-utils/test/eip712_utils_test.ts +++ b/packages/order-utils/test/eip712_utils_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/exchange_transfer_simulator_test.ts b/packages/order-utils/test/exchange_transfer_simulator_test.ts index c2367fd7f..c26eb1907 100644 --- a/packages/order-utils/test/exchange_transfer_simulator_test.ts +++ b/packages/order-utils/test/exchange_transfer_simulator_test.ts @@ -1,8 +1,8 @@ -import { DummyERC20TokenContract, ERC20ProxyContract, ERC20TokenContract } from '@0xproject/abi-gen-wrappers'; -import * as artifacts from '@0xproject/contract-artifacts'; -import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils'; -import { ExchangeContractErrs } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { DummyERC20TokenContract, ERC20ProxyContract, ERC20TokenContract } from '@0x/abi-gen-wrappers'; +import * as artifacts from '@0x/contract-artifacts'; +import { BlockchainLifecycle, devConstants } from '@0x/dev-utils'; +import { ExchangeContractErrs } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { assetDataUtils } from '../src/asset_data_utils'; diff --git a/packages/order-utils/test/market_utils_test.ts b/packages/order-utils/test/market_utils_test.ts index 31986ba1a..42ea195bb 100644 --- a/packages/order-utils/test/market_utils_test.ts +++ b/packages/order-utils/test/market_utils_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/order_hash_test.ts b/packages/order-utils/test/order_hash_test.ts index fe44218d6..a85d4c81a 100644 --- a/packages/order-utils/test/order_hash_test.ts +++ b/packages/order-utils/test/order_hash_test.ts @@ -1,5 +1,5 @@ -import { Order } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { Order } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/order_state_utils_test.ts b/packages/order-utils/test/order_state_utils_test.ts index ea88027ae..39c4c362f 100644 --- a/packages/order-utils/test/order_state_utils_test.ts +++ b/packages/order-utils/test/order_state_utils_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/order_validation_utils_test.ts b/packages/order-utils/test/order_validation_utils_test.ts index d3133c0a6..d4d12a6a7 100644 --- a/packages/order-utils/test/order_validation_utils_test.ts +++ b/packages/order-utils/test/order_validation_utils_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/rate_utils_test.ts b/packages/order-utils/test/rate_utils_test.ts index 2e299c209..b13878bb5 100644 --- a/packages/order-utils/test/rate_utils_test.ts +++ b/packages/order-utils/test/rate_utils_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/remaining_fillable_calculator_test.ts b/packages/order-utils/test/remaining_fillable_calculator_test.ts index a5a3b7fc6..c55a76def 100644 --- a/packages/order-utils/test/remaining_fillable_calculator_test.ts +++ b/packages/order-utils/test/remaining_fillable_calculator_test.ts @@ -1,6 +1,6 @@ -import { SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/signature_utils_test.ts b/packages/order-utils/test/signature_utils_test.ts index f2d6790fb..84e5559a9 100644 --- a/packages/order-utils/test/signature_utils_test.ts +++ b/packages/order-utils/test/signature_utils_test.ts @@ -1,5 +1,5 @@ -import { Order, SignatureType } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { Order, SignatureType } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import { JSONRPCErrorCallback, JSONRPCRequestPayload } from 'ethereum-types'; import * as ethUtil from 'ethereumjs-util'; diff --git a/packages/order-utils/test/sorting_utils_test.ts b/packages/order-utils/test/sorting_utils_test.ts index 016432505..0b8757496 100644 --- a/packages/order-utils/test/sorting_utils_test.ts +++ b/packages/order-utils/test/sorting_utils_test.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import 'mocha'; diff --git a/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts b/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts index d00a25031..d3ea8b456 100644 --- a/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts +++ b/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts @@ -1,5 +1,5 @@ -import { ERC20TokenContract } from '@0xproject/abi-gen-wrappers'; -import { BigNumber } from '@0xproject/utils'; +import { ERC20TokenContract } from '@0x/abi-gen-wrappers'; +import { BigNumber } from '@0x/utils'; import { AbstractBalanceAndProxyAllowanceFetcher } from '../../src/abstract/abstract_balance_and_proxy_allowance_fetcher'; diff --git a/packages/order-utils/test/utils/test_order_factory.ts b/packages/order-utils/test/utils/test_order_factory.ts index 69184f129..145332674 100644 --- a/packages/order-utils/test/utils/test_order_factory.ts +++ b/packages/order-utils/test/utils/test_order_factory.ts @@ -1,4 +1,4 @@ -import { Order, SignedOrder } from '@0xproject/types'; +import { Order, SignedOrder } from '@0x/types'; import * as _ from 'lodash'; import { constants } from '../../src/constants'; diff --git a/packages/order-utils/test/utils/web3_wrapper.ts b/packages/order-utils/test/utils/web3_wrapper.ts index ab801fa7f..accfcb7fe 100644 --- a/packages/order-utils/test/utils/web3_wrapper.ts +++ b/packages/order-utils/test/utils/web3_wrapper.ts @@ -1,5 +1,5 @@ -import { web3Factory } from '@0xproject/dev-utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { web3Factory } from '@0x/dev-utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); diff --git a/packages/order-utils/tslint.json b/packages/order-utils/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/order-utils/tslint.json +++ b/packages/order-utils/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/order-watcher/CHANGELOG.json b/packages/order-watcher/CHANGELOG.json index 1fa0b3bc9..d574f4a18 100644 --- a/packages/order-watcher/CHANGELOG.json +++ b/packages/order-watcher/CHANGELOG.json @@ -11,7 +11,8 @@ "Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers. Constructor has a new optional `contractAddresses` parameter.", "pr": 1105 } - ] + ], + "timestamp": 1539871071 }, { "version": "2.1.1", diff --git a/packages/order-watcher/CHANGELOG.md b/packages/order-watcher/CHANGELOG.md index 5fdf5c944..299af5437 100644 --- a/packages/order-watcher/CHANGELOG.md +++ b/packages/order-watcher/CHANGELOG.md @@ -5,6 +5,11 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.2.0 - _October 18, 2018_ + + * Added getStats function and returns a Stats object (#1118) + * Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers. Constructor has a new optional `contractAddresses` parameter. (#1105) + ## v2.1.1 - _October 4, 2018_ * Dependencies updated @@ -48,7 +53,7 @@ CHANGELOG * Export types: `ExchangeContractErrs`, `OrderRelevantState`, `JSONRPCRequestPayload`, `JSONRPCErrorCallback` and `JSONRPCResponsePayload` (#924) * Remove exporting types: `BlockParamLiteral`, `BlockParam`, `Order` (#924) -## v1.0.1-rc.3 - _August 13, 2018_ +## v1.0.1-rc.3 - _August 14, 2018_ * Dependencies updated diff --git a/packages/order-watcher/README.md b/packages/order-watcher/README.md index de64a70e7..c0b99b272 100644 --- a/packages/order-watcher/README.md +++ b/packages/order-watcher/README.md @@ -9,20 +9,20 @@ An order watcher daemon that watches for order validity. **Install** ```bash -npm install @0xproject/order-watcher --save +npm install @0x/order-watcher --save ``` **Import** ```javascript -import { OrderWatcher } from '@0xproject/order-watcher'; +import { OrderWatcher } from '@0x/order-watcher'; ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -51,13 +51,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/order-watcher yarn build +PKG=@0x/order-watcher yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/order-watcher yarn watch +PKG=@0x/order-watcher yarn watch ``` ### Clean diff --git a/packages/order-watcher/package.json b/packages/order-watcher/package.json index a3f7b1fc7..acc70544e 100644 --- a/packages/order-watcher/package.json +++ b/packages/order-watcher/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/order-watcher", - "version": "2.1.1", + "name": "@0x/order-watcher", + "version": "2.2.0", "description": "An order watcher daemon that watches for order validity", "keywords": [ "0x", @@ -33,9 +33,9 @@ "node": ">=6.0.0" }, "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/migrations": "^1.0.14", - "@0xproject/tslint-config": "^1.0.8", + "@0x/dev-utils": "^1.0.13", + "@0x/migrations": "^2.0.0", + "@0x/tslint-config": "^1.0.9", "@types/bintrees": "^1.0.2", "@types/lodash": "4.14.104", "@types/mocha": "^2.2.42", @@ -57,21 +57,21 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/abi-gen-wrappers": "^1.0.0", - "@0xproject/assert": "^1.0.13", - "@0xproject/base-contract": "^3.0.1", - "@0xproject/contract-addresses": "^1.0.0", - "@0xproject/contract-artifacts": "^1.0.0", - "@0xproject/contract-wrappers": "^2.0.2", - "@0xproject/fill-scenarios": "^1.0.7", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/abi-gen-wrappers": "^1.0.1", + "@0x/assert": "^1.0.14", + "@0x/base-contract": "^3.0.2", + "@0x/contract-addresses": "^1.0.1", + "@0x/contract-artifacts": "^1.0.1", + "@0x/contract-wrappers": "^3.0.0", + "@0x/fill-scenarios": "^1.0.8", + "@0x/json-schemas": "^2.0.0", + "@0x/order-utils": "^2.0.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "bintrees": "^1.0.2", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-blockstream": "6.0.0", "ethers": "~4.0.4", "lodash": "^4.17.5" diff --git a/packages/order-watcher/src/index.ts b/packages/order-watcher/src/index.ts index 6e862a427..5eeba3e87 100644 --- a/packages/order-watcher/src/index.ts +++ b/packages/order-watcher/src/index.ts @@ -8,12 +8,12 @@ export { ExchangeContractErrs, OrderRelevantState, Stats, -} from '@0xproject/types'; +} from '@0x/types'; export { OnOrderStateChangeCallback, OrderWatcherConfig } from './types'; -export { ContractAddresses } from '@0xproject/contract-addresses'; -export { SignedOrder } from '@0xproject/types'; +export { ContractAddresses } from '@0x/contract-addresses'; +export { SignedOrder } from '@0x/types'; export { JSONRPCRequestPayload, JSONRPCErrorCallback, diff --git a/packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts b/packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts index e13663c7a..2ea796947 100644 --- a/packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts +++ b/packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts @@ -1,4 +1,4 @@ -import { AbiDecoder } from '@0xproject/utils'; +import { AbiDecoder } from '@0x/utils'; import { ContractAbi, DecodedLogArgs, LogEntry, LogWithDecodedArgs, RawLog } from 'ethereum-types'; const TOKEN_TYPE_COLLISION = `Token can't be marked as ERC20 and ERC721 at the same time`; diff --git a/packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts b/packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts index cc70bd5d7..dbcc25186 100644 --- a/packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts +++ b/packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts @@ -1,7 +1,7 @@ // tslint:disable:no-unnecessary-type-assertion -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { AssetProxyId, ERC20AssetData, ERC721AssetData, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { AssetProxyId, ERC20AssetData, ERC721AssetData, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; export interface OrderHashesByMakerAddress { diff --git a/packages/order-watcher/src/order_watcher/event_watcher.ts b/packages/order-watcher/src/order_watcher/event_watcher.ts index 9ea301815..3149d858b 100644 --- a/packages/order-watcher/src/order_watcher/event_watcher.ts +++ b/packages/order-watcher/src/order_watcher/event_watcher.ts @@ -1,5 +1,5 @@ -import { intervalUtils, logUtils } from '@0xproject/utils'; -import { marshaller, Web3Wrapper } from '@0xproject/web3-wrapper'; +import { intervalUtils, logUtils } from '@0x/utils'; +import { marshaller, Web3Wrapper } from '@0x/web3-wrapper'; import { BlockParamLiteral, FilterObject, LogEntry, Provider, RawLogEntry } from 'ethereum-types'; import { Block, BlockAndLogStreamer, Log } from 'ethereumjs-blockstream'; import * as _ from 'lodash'; diff --git a/packages/order-watcher/src/order_watcher/expiration_watcher.ts b/packages/order-watcher/src/order_watcher/expiration_watcher.ts index 6eadf14c7..ad20a6e3f 100644 --- a/packages/order-watcher/src/order_watcher/expiration_watcher.ts +++ b/packages/order-watcher/src/order_watcher/expiration_watcher.ts @@ -1,4 +1,4 @@ -import { BigNumber, intervalUtils } from '@0xproject/utils'; +import { BigNumber, intervalUtils } from '@0x/utils'; import { RBTree } from 'bintrees'; import * as _ from 'lodash'; diff --git a/packages/order-watcher/src/order_watcher/order_watcher.ts b/packages/order-watcher/src/order_watcher/order_watcher.ts index 2f0dd2f2d..96c5ca7b4 100644 --- a/packages/order-watcher/src/order_watcher/order_watcher.ts +++ b/packages/order-watcher/src/order_watcher/order_watcher.ts @@ -1,6 +1,6 @@ // tslint:disable:no-unnecessary-type-assertion -import { ContractAddresses } from '@0xproject/contract-addresses'; -import * as artifacts from '@0xproject/contract-artifacts'; +import { ContractAddresses } from '@0x/contract-addresses'; +import * as artifacts from '@0x/contract-artifacts'; import { AssetBalanceAndProxyAllowanceFetcher, ContractWrappers, @@ -23,17 +23,17 @@ import { WETH9EventArgs, WETH9Events, WETH9WithdrawalEventArgs, -} from '@0xproject/contract-wrappers'; -import { schemas } from '@0xproject/json-schemas'; +} from '@0x/contract-wrappers'; +import { schemas } from '@0x/json-schemas'; import { assetDataUtils, BalanceAndProxyAllowanceLazyStore, OrderFilledCancelledLazyStore, orderHashUtils, OrderStateUtils, -} from '@0xproject/order-utils'; -import { AssetProxyId, ExchangeContractErrs, OrderState, SignedOrder, Stats } from '@0xproject/types'; -import { errorUtils, intervalUtils } from '@0xproject/utils'; +} from '@0x/order-utils'; +import { AssetProxyId, ExchangeContractErrs, OrderState, SignedOrder, Stats } from '@0x/types'; +import { errorUtils, intervalUtils } from '@0x/utils'; import { BlockParamLiteral, LogEntryEvent, LogWithDecodedArgs, Provider } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/order-watcher/src/types.ts b/packages/order-watcher/src/types.ts index 27d892985..8078dd971 100644 --- a/packages/order-watcher/src/types.ts +++ b/packages/order-watcher/src/types.ts @@ -1,4 +1,4 @@ -import { OrderState } from '@0xproject/types'; +import { OrderState } from '@0x/types'; import { LogEntryEvent } from 'ethereum-types'; export enum OrderWatcherError { diff --git a/packages/order-watcher/src/utils/assert.ts b/packages/order-watcher/src/utils/assert.ts index e4a1e2c7b..ccfc7325c 100644 --- a/packages/order-watcher/src/utils/assert.ts +++ b/packages/order-watcher/src/utils/assert.ts @@ -1,13 +1,13 @@ -import { assert as sharedAssert } from '@0xproject/assert'; +import { assert as sharedAssert } from '@0x/assert'; // HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here // tslint:disable:no-unused-variable -import { Schema } from '@0xproject/json-schemas'; -import { ECSignature } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { Schema } from '@0x/json-schemas'; +import { ECSignature } from '@0x/types'; +import { BigNumber } from '@0x/utils'; // tslint:enable:no-unused-variable import { Provider } from 'ethereum-types'; -import { signatureUtils } from '@0xproject/order-utils'; +import { signatureUtils } from '@0x/order-utils'; export const assert = { ...sharedAssert, diff --git a/packages/order-watcher/src/utils/utils.ts b/packages/order-watcher/src/utils/utils.ts index 087fc635e..a7d10aaf9 100644 --- a/packages/order-watcher/src/utils/utils.ts +++ b/packages/order-watcher/src/utils/utils.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const utils = { getCurrentUnixTimestampSec(): BigNumber { diff --git a/packages/order-watcher/test/expiration_watcher_test.ts b/packages/order-watcher/test/expiration_watcher_test.ts index 17be625bc..fb5ea2a27 100644 --- a/packages/order-watcher/test/expiration_watcher_test.ts +++ b/packages/order-watcher/test/expiration_watcher_test.ts @@ -1,9 +1,9 @@ -import { tokenUtils } from '@0xproject/contract-wrappers/lib/test/utils/token_utils'; -import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { FillScenarios } from '@0xproject/fill-scenarios'; -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { DoneCallback } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { tokenUtils } from '@0x/contract-wrappers/lib/test/utils/token_utils'; +import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils'; +import { FillScenarios } from '@0x/fill-scenarios'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { DoneCallback } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; import * as _ from 'lodash'; import 'mocha'; diff --git a/packages/order-watcher/test/order_watcher_test.ts b/packages/order-watcher/test/order_watcher_test.ts index e13d44396..271e5dec5 100644 --- a/packages/order-watcher/test/order_watcher_test.ts +++ b/packages/order-watcher/test/order_watcher_test.ts @@ -1,9 +1,9 @@ // tslint:disable:no-unnecessary-type-assertion -import { ContractWrappers } from '@0xproject/contract-wrappers'; -import { tokenUtils } from '@0xproject/contract-wrappers/lib/test/utils/token_utils'; -import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils'; -import { FillScenarios } from '@0xproject/fill-scenarios'; -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; +import { ContractWrappers } from '@0x/contract-wrappers'; +import { tokenUtils } from '@0x/contract-wrappers/lib/test/utils/token_utils'; +import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils'; +import { FillScenarios } from '@0x/fill-scenarios'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; import { DoneCallback, ExchangeContractErrs, @@ -11,9 +11,9 @@ import { OrderStateInvalid, OrderStateValid, SignedOrder, -} from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +} from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import * as _ from 'lodash'; import 'mocha'; diff --git a/packages/order-watcher/test/utils/migrate.ts b/packages/order-watcher/test/utils/migrate.ts index 53319a383..665ce0faa 100644 --- a/packages/order-watcher/test/utils/migrate.ts +++ b/packages/order-watcher/test/utils/migrate.ts @@ -1,6 +1,6 @@ -import { ContractAddresses } from '@0xproject/contract-addresses'; -import { devConstants } from '@0xproject/dev-utils'; -import { runMigrationsOnceAsync } from '@0xproject/migrations'; +import { ContractAddresses } from '@0x/contract-addresses'; +import { devConstants } from '@0x/dev-utils'; +import { runMigrationsOnceAsync } from '@0x/migrations'; import { provider } from './web3_wrapper'; diff --git a/packages/order-watcher/test/utils/web3_wrapper.ts b/packages/order-watcher/test/utils/web3_wrapper.ts index ab801fa7f..accfcb7fe 100644 --- a/packages/order-watcher/test/utils/web3_wrapper.ts +++ b/packages/order-watcher/test/utils/web3_wrapper.ts @@ -1,5 +1,5 @@ -import { web3Factory } from '@0xproject/dev-utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { web3Factory } from '@0x/dev-utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); diff --git a/packages/order-watcher/tslint.json b/packages/order-watcher/tslint.json index 059573ce7..4ade3b924 100644 --- a/packages/order-watcher/tslint.json +++ b/packages/order-watcher/tslint.json @@ -2,5 +2,5 @@ "rules": { "prefer-readonly": true }, - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/react-docs/CHANGELOG.json b/packages/react-docs/CHANGELOG.json index ac3f22716..97485be96 100644 --- a/packages/react-docs/CHANGELOG.json +++ b/packages/react-docs/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.0.14", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "1.0.13", "changes": [ { diff --git a/packages/react-docs/CHANGELOG.md b/packages/react-docs/CHANGELOG.md index 485bf61a6..096bd8460 100644 --- a/packages/react-docs/CHANGELOG.md +++ b/packages/react-docs/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.14 - _October 18, 2018_ + + * Dependencies updated + ## v1.0.13 - _October 4, 2018_ * Dependencies updated @@ -37,7 +41,7 @@ CHANGELOG * Dependencies updated -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Dependencies updated diff --git a/packages/react-docs/README.md b/packages/react-docs/README.md index 51e949967..19c092e4d 100644 --- a/packages/react-docs/README.md +++ b/packages/react-docs/README.md @@ -1,4 +1,4 @@ -## @0xproject/react-docs +## @0x/react-docs #### WARNING: Alpha software. Expect things to break when trying to use. @@ -24,7 +24,7 @@ A full-page React component for rendering beautiful documentation for Solidity a ## Installation ```bash -yarn add @0xproject/react-docs +yarn add @0x/react-docs ``` ## Usage @@ -37,7 +37,7 @@ If your project is in [TypeScript](https://www.typescriptlang.org/), add the fol ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -74,13 +74,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/react-docs yarn build +PKG=@0x/react-docs yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/react-docs yarn watch +PKG=@0x/react-docs yarn watch ``` ### Clean diff --git a/packages/react-docs/package.json b/packages/react-docs/package.json index b1e80d1b6..d3ccfa8da 100644 --- a/packages/react-docs/package.json +++ b/packages/react-docs/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/react-docs", - "version": "1.0.13", + "name": "@0x/react-docs", + "version": "1.0.14", "engines": { "node": ">=6.12" }, @@ -24,18 +24,19 @@ "url": "https://github.com/0xProject/0x-monorepo.git" }, "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/tslint-config": "^1.0.8", + "@0x/dev-utils": "^1.0.13", + "@0x/tslint-config": "^1.0.9", "@types/compare-versions": "^3.0.0", + "@types/styled-components": "^4.0.0", "make-promises-safe": "^1.1.0", "shx": "^0.2.2", "tslint": "^5.9.1", "typescript": "3.0.1" }, "dependencies": { - "@0xproject/react-shared": "^1.0.15", - "@0xproject/types": "^1.1.4", - "@0xproject/utils": "^2.0.2", + "@0x/react-shared": "^1.0.17", + "@0x/types": "^1.2.0", + "@0x/utils": "^2.0.3", "@types/lodash": "4.14.104", "@types/material-ui": "^0.20.0", "@types/node": "*", @@ -49,9 +50,10 @@ "react": "^16.4.2", "react-dom": "^16.4.2", "react-markdown": "^3.2.2", - "react-scroll": "0xproject/react-scroll#similar-to-pr-330", + "react-scroll": "0xproject/react-scroll#pr-330-and-replace-state", "react-tooltip": "^3.2.7", - "semver": "5.5.0" + "semver": "5.5.0", + "styled-components": "^3.3.0" }, "publishConfig": { "access": "public" diff --git a/packages/react-docs/src/components/badge.tsx b/packages/react-docs/src/components/badge.tsx index d34f8a0fc..e3d5be273 100644 --- a/packages/react-docs/src/components/badge.tsx +++ b/packages/react-docs/src/components/badge.tsx @@ -1,4 +1,4 @@ -import { Styles } from '@0xproject/react-shared'; +import { Styles } from '@0x/react-shared'; import * as React from 'react'; const styles: Styles = { diff --git a/packages/react-docs/src/components/comment.tsx b/packages/react-docs/src/components/comment.tsx index c3687c510..4d34f711e 100644 --- a/packages/react-docs/src/components/comment.tsx +++ b/packages/react-docs/src/components/comment.tsx @@ -1,4 +1,4 @@ -import { MarkdownCodeBlock } from '@0xproject/react-shared'; +import { colors, MarkdownCodeBlock } from '@0x/react-shared'; import * as React from 'react'; import * as ReactMarkdown from 'react-markdown'; @@ -13,7 +13,7 @@ const defaultProps = { export const Comment: React.SFC<CommentProps> = (props: CommentProps) => { return ( - <div className={`${props.className} comment`}> + <div className={`${props.className} comment`} style={{ color: colors.greyTheme }}> <ReactMarkdown source={props.comment} renderers={{ code: MarkdownCodeBlock }} /> </div> ); diff --git a/packages/react-docs/src/components/custom_enum.tsx b/packages/react-docs/src/components/custom_enum.tsx index fa7c43146..e971a012a 100644 --- a/packages/react-docs/src/components/custom_enum.tsx +++ b/packages/react-docs/src/components/custom_enum.tsx @@ -1,8 +1,8 @@ -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; -import { CustomType } from '@0xproject/types'; +import { CustomType } from '@0x/types'; const STRING_ENUM_CODE_PREFIX = ' strEnum('; diff --git a/packages/react-docs/src/components/documentation.tsx b/packages/react-docs/src/components/doc_reference.tsx index a23111297..85547576b 100644 --- a/packages/react-docs/src/components/documentation.tsx +++ b/packages/react-docs/src/components/doc_reference.tsx @@ -2,13 +2,13 @@ import { colors, constants as sharedConstants, EtherscanLinkSuffixes, + HeaderSizes, + Link, MarkdownSection, - NestedSidebarMenu, Networks, SectionHeader, - Styles, utils as sharedUtils, -} from '@0xproject/react-shared'; +} from '@0x/react-shared'; import { DocAgnosticFormat, Event, @@ -18,9 +18,8 @@ import { TypeDefinitionByName, TypescriptFunction, TypescriptMethod, -} from '@0xproject/types'; +} from '@0x/types'; import * as _ from 'lodash'; -import CircularProgress from 'material-ui/CircularProgress'; import * as React from 'react'; import * as semver from 'semver'; @@ -42,142 +41,36 @@ const networkNameToColor: { [network: string]: string } = { [Networks.Rinkeby]: colors.darkYellow, }; -export interface DocumentationProps { +export interface DocReferenceProps { selectedVersion: string; availableVersions: string[]; docsInfo: DocsInfo; sourceUrl: string; - onVersionSelected: (semver: string) => void; docAgnosticFormat?: DocAgnosticFormat; - sidebarHeader?: React.ReactNode; - topBarHeight?: number; } -export interface DocumentationState { - isHoveringSidebar: boolean; -} +export interface DocReferenceState {} -export class Documentation extends React.Component<DocumentationProps, DocumentationState> { - public static defaultProps: Partial<DocumentationProps> = { - topBarHeight: 0, - }; - constructor(props: DocumentationProps) { - super(props); - this.state = { - isHoveringSidebar: false, - }; - } - public componentDidMount(): void { - window.addEventListener('hashchange', this._onHashChanged.bind(this), false); - } - public componentWillUnmount(): void { - window.removeEventListener('hashchange', this._onHashChanged.bind(this), false); - } - public componentDidUpdate(prevProps: DocumentationProps, _prevState: DocumentationState): void { +export class DocReference extends React.Component<DocReferenceProps, DocReferenceState> { + public componentDidUpdate(prevProps: DocReferenceProps, _prevState: DocReferenceState): void { if (!_.isEqual(prevProps.docAgnosticFormat, this.props.docAgnosticFormat)) { const hash = window.location.hash.slice(1); sharedUtils.scrollToHash(hash, sharedConstants.SCROLL_CONTAINER_ID); } } public render(): React.ReactNode { - const styles: Styles = { - mainContainers: { - position: 'absolute', - top: 1, - left: 0, - bottom: 0, - right: 0, - overflowX: 'hidden', - overflowY: 'scroll', - minHeight: `calc(100vh - ${this.props.topBarHeight}px)`, - WebkitOverflowScrolling: 'touch', - }, - menuContainer: { - borderColor: colors.grey300, - maxWidth: 330, - marginLeft: 20, - }, - }; - const menuSubsectionsBySection = this.props.docsInfo.getMenuSubsectionsBySection(this.props.docAgnosticFormat); - return ( - <div> - {_.isUndefined(this.props.docAgnosticFormat) ? ( - this._renderLoading(styles.mainContainers) - ) : ( - <div style={{ width: '100%', height: '100%', backgroundColor: colors.gray40 }}> - <div - className="mx-auto max-width-4 flex" - style={{ color: colors.grey800, height: `calc(100vh - ${this.props.topBarHeight}px)` }} - > - <div - className="relative sm-hide xs-hide" - style={{ width: '36%', height: `calc(100vh - ${this.props.topBarHeight}px)` }} - > - <div - className="border-right absolute" - style={{ - ...styles.menuContainer, - ...styles.mainContainers, - height: `calc(100vh - ${this.props.topBarHeight}px)`, - overflow: this.state.isHoveringSidebar ? 'auto' : 'hidden', - }} - onMouseEnter={this._onSidebarHover.bind(this)} - onMouseLeave={this._onSidebarHoverOff.bind(this)} - > - <NestedSidebarMenu - selectedVersion={this.props.selectedVersion} - versions={this.props.availableVersions} - sidebarHeader={this.props.sidebarHeader} - topLevelMenu={this.props.docsInfo.menu} - menuSubsectionsBySection={menuSubsectionsBySection} - onVersionSelected={this.props.onVersionSelected} - /> - </div> - </div> - <div - className="relative col lg-col-9 md-col-9 sm-col-12 col-12" - style={{ backgroundColor: colors.white }} - > - <div - id={sharedConstants.SCROLL_CONTAINER_ID} - style={styles.mainContainers} - className="absolute px1" - > - <div id={sharedConstants.SCROLL_TOP_ID} /> - {this._renderDocumentation()} - </div> - </div> - </div> - </div> - )} - </div> - ); - } - private _renderLoading(mainContainersStyles: React.CSSProperties): React.ReactNode { - return ( - <div className="col col-12" style={mainContainersStyles}> - <div - className="relative sm-px2 sm-pt2 sm-m1" - style={{ height: 122, top: '50%', transform: 'translateY(-50%)' }} - > - <div className="center pb2"> - <CircularProgress size={40} thickness={5} /> - </div> - <div className="center pt2" style={{ paddingBottom: 11 }}> - Loading documentation... - </div> - </div> - </div> - ); - } - private _renderDocumentation(): React.ReactNode { - const subMenus = _.values(this.props.docsInfo.menu); + const subMenus = _.values(this.props.docsInfo.markdownMenu); const orderedSectionNames = _.flatten(subMenus); const typeDefinitionByName = this.props.docsInfo.getTypeDefinitionsByName(this.props.docAgnosticFormat); const renderedSections = _.map(orderedSectionNames, this._renderSection.bind(this, typeDefinitionByName)); - return renderedSections; + return ( + <div> + <div id={sharedConstants.SCROLL_TOP_ID} /> + {renderedSections} + </div> + ); } private _renderSection(typeDefinitionByName: TypeDefinitionByName, sectionName: string): React.ReactNode { const markdownVersions = _.keys(this.props.docsInfo.sectionNameToMarkdownByVersion); @@ -195,11 +88,16 @@ export class Documentation extends React.Component<DocumentationProps, Documenta const closestVersion = sortedEligibleVersions[0]; const markdownFileIfExists = this.props.docsInfo.sectionNameToMarkdownByVersion[closestVersion][sectionName]; if (!_.isUndefined(markdownFileIfExists)) { + // Special-case replace the `introduction` sectionName with the package name + const isIntroductionSection = sectionName === 'introduction'; + const headerSize = isIntroductionSection ? HeaderSizes.H1 : HeaderSizes.H3; return ( <MarkdownSection key={`markdown-section-${sectionName}`} sectionName={sectionName} + headerSize={headerSize} markdownContent={markdownFileIfExists} + alternativeSectionTitle={isIntroductionSection ? this.props.docsInfo.displayName : undefined} /> ); } @@ -290,7 +188,9 @@ export class Documentation extends React.Component<DocumentationProps, Documenta )} {!_.isEmpty(docSection.functions) && ( <div> - {!isExportedFunctionSection && <h2 style={headerStyle}>Functions</h2>} + {!isExportedFunctionSection && ( + <div style={{ ...headerStyle, fontSize: '1.5em' }}>Functions</div> + )} <div>{functionDefs}</div> </div> )} @@ -309,6 +209,15 @@ export class Documentation extends React.Component<DocumentationProps, Documenta <div>{typeDefs}</div> </div> )} + <div + style={{ + width: '100%', + height: 1, + backgroundColor: colors.grey300, + marginTop: 32, + marginBottom: 12, + }} + /> </div> ); } @@ -318,9 +227,9 @@ export class Documentation extends React.Component<DocumentationProps, Documenta <div className="pt2" key={`external-export-${exportName}`}> <code className={`hljs ${constants.TYPE_TO_SYNTAX[this.props.docsInfo.type]}`}> {`import { `} - <a href={link} target="_blank" style={{ color: colors.lightBlueA700, textDecoration: 'none' }}> + <Link to={link} shouldOpenInNewTab={true} fontColor={colors.lightBlueA700}> {exportName} - </a> + </Link> {` } from '${this.props.docsInfo.packageName}'`} </code> </div> @@ -349,14 +258,16 @@ export class Documentation extends React.Component<DocumentationProps, Documenta EtherscanLinkSuffixes.Address, ); return ( - <a - key={`badge-${networkName}-${sectionName}`} - href={linkIfExists} - target="_blank" - style={{ color: colors.white, textDecoration: 'none', marginTop: 8 }} - > - <Badge title={networkName} backgroundColor={networkNameToColor[networkName]} /> - </a> + <div style={{ marginTop: 8 }}> + <Link + key={`badge-${networkName}-${sectionName}`} + to={linkIfExists} + shouldOpenInNewTab={true} + fontColor={colors.white} + > + <Badge title={networkName} backgroundColor={networkNameToColor[networkName]} /> + </Link> + </div> ); }, ); @@ -406,18 +317,4 @@ export class Documentation extends React.Component<DocumentationProps, Documenta /> ); } - private _onSidebarHover(_event: React.FormEvent<HTMLInputElement>): void { - this.setState({ - isHoveringSidebar: true, - }); - } - private _onSidebarHoverOff(): void { - this.setState({ - isHoveringSidebar: false, - }); - } - private _onHashChanged(_event: any): void { - const hash = window.location.hash.slice(1); - sharedUtils.scrollToHash(hash, sharedConstants.SCROLL_CONTAINER_ID); - } } diff --git a/packages/react-docs/src/components/event_definition.tsx b/packages/react-docs/src/components/event_definition.tsx index 37236275b..b76769788 100644 --- a/packages/react-docs/src/components/event_definition.tsx +++ b/packages/react-docs/src/components/event_definition.tsx @@ -1,5 +1,5 @@ -import { AnchorTitle, colors, HeaderSizes } from '@0xproject/react-shared'; -import { Event, EventArg } from '@0xproject/types'; +import { AnchorTitle, colors, HeaderSizes } from '@0x/react-shared'; +import { Event, EventArg } from '@0x/types'; import * as _ from 'lodash'; import * as React from 'react'; diff --git a/packages/react-docs/src/components/interface.tsx b/packages/react-docs/src/components/interface.tsx index cad7d6c46..0df44ca1c 100644 --- a/packages/react-docs/src/components/interface.tsx +++ b/packages/react-docs/src/components/interface.tsx @@ -1,7 +1,7 @@ import * as _ from 'lodash'; import * as React from 'react'; -import { CustomType, TypeDefinitionByName } from '@0xproject/types'; +import { CustomType, TypeDefinitionByName } from '@0x/types'; import { DocsInfo } from '../docs_info'; diff --git a/packages/react-docs/src/components/property_block.tsx b/packages/react-docs/src/components/property_block.tsx index 8434e8682..d0bd84802 100644 --- a/packages/react-docs/src/components/property_block.tsx +++ b/packages/react-docs/src/components/property_block.tsx @@ -1,5 +1,5 @@ -import { AnchorTitle, HeaderSizes } from '@0xproject/react-shared'; -import { Property, TypeDefinitionByName } from '@0xproject/types'; +import { AnchorTitle, HeaderSizes } from '@0x/react-shared'; +import { Property, TypeDefinitionByName } from '@0x/types'; import * as React from 'react'; import { DocsInfo } from '../docs_info'; diff --git a/packages/react-docs/src/components/signature.tsx b/packages/react-docs/src/components/signature.tsx index 1f3dd0ee8..c229999b1 100644 --- a/packages/react-docs/src/components/signature.tsx +++ b/packages/react-docs/src/components/signature.tsx @@ -1,7 +1,7 @@ import * as _ from 'lodash'; import * as React from 'react'; -import { Parameter, Type as TypeDef, TypeDefinitionByName, TypeParameter } from '@0xproject/types'; +import { Parameter, Type as TypeDef, TypeDefinitionByName, TypeParameter } from '@0x/types'; import { DocsInfo } from '../docs_info'; diff --git a/packages/react-docs/src/components/signature_block.tsx b/packages/react-docs/src/components/signature_block.tsx index 5ec82983a..7cdf19bb0 100644 --- a/packages/react-docs/src/components/signature_block.tsx +++ b/packages/react-docs/src/components/signature_block.tsx @@ -1,11 +1,5 @@ -import { AnchorTitle, colors, HeaderSizes, Styles } from '@0xproject/react-shared'; -import { - Parameter, - SolidityMethod, - TypeDefinitionByName, - TypescriptFunction, - TypescriptMethod, -} from '@0xproject/types'; +import { AnchorTitle, colors, HeaderSizes, Styles } from '@0x/react-shared'; +import { Parameter, SolidityMethod, TypeDefinitionByName, TypescriptFunction, TypescriptMethod } from '@0x/types'; import * as _ from 'lodash'; import * as React from 'react'; @@ -55,7 +49,7 @@ export class SignatureBlock extends React.Component<SignatureBlockProps, Signatu <div id={`${this.props.sectionName}-${method.name}`} style={{ overflow: 'hidden', width: '100%' }} - className="pb4" + className="pb4 pt2" onMouseOver={this._setAnchorVisibility.bind(this, true)} onMouseOut={this._setAnchorVisibility.bind(this, false)} > diff --git a/packages/react-docs/src/components/source_link.tsx b/packages/react-docs/src/components/source_link.tsx index 3096ad8d5..6459824c2 100644 --- a/packages/react-docs/src/components/source_link.tsx +++ b/packages/react-docs/src/components/source_link.tsx @@ -1,5 +1,5 @@ -import { colors } from '@0xproject/react-shared'; -import { Source } from '@0xproject/types'; +import { colors, Link } from '@0x/react-shared'; +import { Source } from '@0x/types'; import * as React from 'react'; export interface SourceLinkProps { @@ -13,9 +13,9 @@ export const SourceLink = (props: SourceLinkProps) => { const sourceCodeUrl = `${props.sourceUrl}/${src.fileName}#L${src.line}`; return ( <div className="pt2" style={{ fontSize: 14 }}> - <a href={sourceCodeUrl} target="_blank" className="underline" style={{ color: colors.grey }}> - Source - </a> + <Link to={sourceCodeUrl} shouldOpenInNewTab={true} textDecoration="underline" fontColor={colors.grey}> + {'Source'} + </Link> </div> ); }; diff --git a/packages/react-docs/src/components/type.tsx b/packages/react-docs/src/components/type.tsx index 5c018f5dd..412b99b9d 100644 --- a/packages/react-docs/src/components/type.tsx +++ b/packages/react-docs/src/components/type.tsx @@ -1,6 +1,6 @@ -import { colors, constants as sharedConstants, utils as sharedUtils } from '@0xproject/react-shared'; -import { Type as TypeDef, TypeDefinitionByName, TypeDocTypes } from '@0xproject/types'; -import { errorUtils } from '@0xproject/utils'; +import { colors, constants as sharedConstants, Link, utils as sharedUtils } from '@0x/react-shared'; +import { Type as TypeDef, TypeDefinitionByName, TypeDocTypes } from '@0x/types'; +import { errorUtils } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import { Link as ScrollLink } from 'react-scroll'; @@ -204,15 +204,12 @@ export const Type: React.SFC<TypeProps> = (props: TypeProps): any => { const isExportedClassReference = !!props.type.isExportedClassReference; const typeNameUrlIfExists = !_.isUndefined(props.type.externalLink) ? props.type.externalLink : undefined; if (!_.isUndefined(typeNameUrlIfExists)) { - typeName = ( - <a - href={typeNameUrlIfExists} - target="_blank" - className="text-decoration-none" - style={{ color: colors.lightBlueA700 }} - > + typeName = props.isInPopover ? ( + <span style={{ color: colors.lightBlueA700, cursor: 'pointer' }}>{typeName}</span> + ) : ( + <Link to={typeNameUrlIfExists} shouldOpenInNewTab={true} fontColor={colors.lightBlueA700}> {typeName} - </a> + </Link> ); } else if ( (isReference || isArray) && @@ -223,39 +220,41 @@ export const Type: React.SFC<TypeProps> = (props: TypeProps): any => { ? props.type.name : `${props.docsInfo.typeSectionName}-${typeName}`; typeName = ( - <ScrollLink - to={typeDefinitionAnchorId} - offset={0} - hashSpy={true} - duration={sharedConstants.DOCS_SCROLL_DURATION_MS} - containerId={sharedConstants.DOCS_CONTAINER_ID} - > + <span> {sharedUtils.isUserOnMobile() || props.isInPopover || isExportedClassReference ? ( <span style={{ color: colors.lightBlueA700, cursor: 'pointer' }}>{typeName}</span> ) : ( - <span - data-tip={true} - data-for={id} - style={{ - color: colors.lightBlueA700, - cursor: 'pointer', - display: 'inline-block', - }} + <ScrollLink + to={typeDefinitionAnchorId} + offset={0} + hashSpy={true} + duration={sharedConstants.DOCS_SCROLL_DURATION_MS} + containerId={sharedConstants.SCROLL_CONTAINER_ID} > - {typeName} - <ReactTooltip type="light" effect="solid" id={id} className="typeTooltip"> - <TypeDefinition - sectionName={props.sectionName} - customType={props.typeDefinitionByName[typeName as string]} - shouldAddId={false} - docsInfo={props.docsInfo} - typeDefinitionByName={props.typeDefinitionByName} - isInPopover={true} - /> - </ReactTooltip> - </span> + <span + data-tip={true} + data-for={id} + style={{ + color: colors.lightBlueA700, + cursor: 'pointer', + display: 'inline-block', + }} + > + {typeName} + <ReactTooltip type="light" effect="solid" id={id} className="typeTooltip"> + <TypeDefinition + sectionName={props.sectionName} + customType={props.typeDefinitionByName[typeName as string]} + shouldAddId={false} + docsInfo={props.docsInfo} + typeDefinitionByName={props.typeDefinitionByName} + isInPopover={true} + /> + </ReactTooltip> + </span> + </ScrollLink> )} - </ScrollLink> + </span> ); } return ( diff --git a/packages/react-docs/src/components/type_definition.tsx b/packages/react-docs/src/components/type_definition.tsx index 9a3e50a1b..a1fde51da 100644 --- a/packages/react-docs/src/components/type_definition.tsx +++ b/packages/react-docs/src/components/type_definition.tsx @@ -1,6 +1,6 @@ -import { AnchorTitle, colors, HeaderSizes } from '@0xproject/react-shared'; -import { CustomType, CustomTypeChild, TypeDefinitionByName, TypeDocTypes } from '@0xproject/types'; -import { errorUtils } from '@0xproject/utils'; +import { AnchorTitle, colors, HeaderSizes } from '@0x/react-shared'; +import { CustomType, CustomTypeChild, TypeDefinitionByName, TypeDocTypes } from '@0x/types'; +import { errorUtils } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; @@ -124,6 +124,7 @@ export class TypeDefinition extends React.Component<TypeDefinitionProps, TypeDef title={`${typePrefix} ${customType.name}`} id={this.props.shouldAddId ? typeDefinitionAnchorId : ''} shouldShowAnchor={this.state.shouldShowAnchor} + isDisabled={this.props.isInPopover} /> <div style={{ fontSize: 16 }}> <pre> diff --git a/packages/react-docs/src/docs_info.ts b/packages/react-docs/src/docs_info.ts index 092a8c266..54b59ef1f 100644 --- a/packages/react-docs/src/docs_info.ts +++ b/packages/react-docs/src/docs_info.ts @@ -1,5 +1,5 @@ -import { MenuSubsectionsBySection } from '@0xproject/react-shared'; -import { DocAgnosticFormat, TypeDefinitionByName } from '@0xproject/types'; +import { ALink, utils as sharedUtils } from '@0x/react-shared'; +import { DocAgnosticFormat, ObjectMap, TypeDefinitionByName } from '@0x/types'; import * as _ from 'lodash'; import { @@ -17,7 +17,7 @@ export class DocsInfo { public displayName: string; public packageName: string; public packageUrl: string; - public menu: DocsMenu; + public markdownMenu: DocsMenu; public typeSectionName: string; public sections: SectionsMap; public sectionNameToMarkdownByVersion: SectionNameToMarkdownByVersion; @@ -25,7 +25,7 @@ export class DocsInfo { constructor(config: DocsInfoConfig) { this.id = config.id; this.type = config.type; - this.menu = config.markdownMenu; + this.markdownMenu = config.markdownMenu; this.displayName = config.displayName; this.packageName = config.packageName; this.packageUrl = config.packageUrl; @@ -34,10 +34,31 @@ export class DocsInfo { this.sectionNameToMarkdownByVersion = config.sectionNameToMarkdownByVersion; this.contractsByVersionByNetworkId = config.contractsByVersionByNetworkId; } - public getMenuSubsectionsBySection(docAgnosticFormat?: DocAgnosticFormat): MenuSubsectionsBySection { - const menuSubsectionsBySection = {} as MenuSubsectionsBySection; + public getTypeDefinitionsByName(docAgnosticFormat: DocAgnosticFormat): ObjectMap<TypeDefinitionByName> { + if (_.isUndefined(docAgnosticFormat[this.typeSectionName])) { + return {}; + } + + const section = docAgnosticFormat[this.typeSectionName]; + const typeDefinitionByName = _.keyBy(section.types, 'name') as any; + return typeDefinitionByName; + } + public getSectionNameToLinks(docAgnosticFormat: DocAgnosticFormat): ObjectMap<ALink[]> { + const sectionNameToLinks: ObjectMap<ALink[]> = {}; + _.each(this.markdownMenu, (linkTitles, sectionName) => { + sectionNameToLinks[sectionName] = []; + _.each(linkTitles, linkTitle => { + const to = sharedUtils.getIdFromName(linkTitle); + const links = sectionNameToLinks[sectionName]; + links.push({ + title: linkTitle, + to, + }); + }); + }); + if (_.isUndefined(docAgnosticFormat)) { - return menuSubsectionsBySection; + return sectionNameToLinks; } const docSections = _.keys(this.sections); @@ -58,7 +79,13 @@ export class DocsInfo { if (sectionName === this.typeSectionName) { const sortedTypesNames = _.sortBy(docSection.types, 'name'); const typeNames = _.map(sortedTypesNames, t => t.name); - menuSubsectionsBySection[sectionName] = typeNames; + const typeLinks = _.map(typeNames, typeName => { + return { + to: `${sectionName}-${typeName}`, + title: typeName, + }; + }); + sectionNameToLinks[sectionName] = typeLinks; } else if (isExportedFunctionSection) { // Noop so that we don't have the method listed underneath itself. } else { @@ -73,23 +100,18 @@ export class DocsInfo { const methodNames = _.map(methodsSortedByName, m => m.name); const sortedFunctionNames = _.sortBy(docSection.functions, 'name'); const functionNames = _.map(sortedFunctionNames, m => m.name); - menuSubsectionsBySection[sectionName] = [ - ...eventNames, - ...propertyNames, - ...functionNames, - ...methodNames, - ]; + const names = [...eventNames, ...propertyNames, ...functionNames, ...methodNames]; + + const links = _.map(names, name => { + return { + to: `${sectionName}-${name}`, + title: name, + }; + }); + + sectionNameToLinks[sectionName] = links; } }); - return menuSubsectionsBySection; - } - public getTypeDefinitionsByName(docAgnosticFormat: DocAgnosticFormat): { [name: string]: TypeDefinitionByName } { - if (_.isUndefined(docAgnosticFormat[this.typeSectionName])) { - return {}; - } - - const section = docAgnosticFormat[this.typeSectionName]; - const typeDefinitionByName = _.keyBy(section.types, 'name') as any; - return typeDefinitionByName; + return sectionNameToLinks; } } diff --git a/packages/react-docs/src/index.ts b/packages/react-docs/src/index.ts index f9382940c..a5ed788b1 100644 --- a/packages/react-docs/src/index.ts +++ b/packages/react-docs/src/index.ts @@ -1,11 +1,11 @@ -export { DocAgnosticFormat, GeneratedDocJson } from '@0xproject/types'; +export { DocAgnosticFormat, GeneratedDocJson } from '@0x/types'; // Exported to give users of this library added flexibility if they want to build // a docs page from scratch using the individual components. export { Badge } from './components/badge'; export { Comment } from './components/comment'; export { CustomEnum } from './components/custom_enum'; -export { Documentation } from './components/documentation'; +export { DocReference } from './components/doc_reference'; export { Enum } from './components/enum'; export { EventDefinition } from './components/event_definition'; export { Interface } from './components/interface'; diff --git a/packages/react-docs/src/utils/typedoc_utils.ts b/packages/react-docs/src/utils/typedoc_utils.ts index 19605d497..f74ec3e28 100644 --- a/packages/react-docs/src/utils/typedoc_utils.ts +++ b/packages/react-docs/src/utils/typedoc_utils.ts @@ -16,8 +16,8 @@ import { TypeParameter, TypescriptFunction, TypescriptMethod, -} from '@0xproject/types'; -import { errorUtils } from '@0xproject/utils'; +} from '@0x/types'; +import { errorUtils } from '@0x/utils'; import * as _ from 'lodash'; import { DocsInfo } from '../docs_info'; @@ -95,7 +95,9 @@ export class TypeDocUtils { if (!_.isEmpty(this._externalExportToLink)) { this._docsInfo.sections[constants.EXTERNAL_EXPORTS_SECTION_NAME] = constants.EXTERNAL_EXPORTS_SECTION_NAME; - this._docsInfo.menu[constants.EXTERNAL_EXPORTS_SECTION_NAME] = [constants.EXTERNAL_EXPORTS_SECTION_NAME]; + this._docsInfo.markdownMenu[constants.EXTERNAL_EXPORTS_SECTION_NAME] = [ + constants.EXTERNAL_EXPORTS_SECTION_NAME, + ]; const docSection: DocSection = { comment: 'This package also re-exports some third-party libraries for your convenience.', constructors: [], @@ -119,7 +121,7 @@ export class TypeDocUtils { case KindString.ObjectLiteral: { sectionName = child.name; this._docsInfo.sections[sectionName] = sectionName; - this._docsInfo.menu[sectionName] = [sectionName]; + this._docsInfo.markdownMenu[sectionName] = [sectionName]; const entities = child.children; const commentObj = child.comment; const sectionComment = !_.isUndefined(commentObj) ? commentObj.shortText : ''; @@ -136,7 +138,7 @@ export class TypeDocUtils { case KindString.Function: { sectionName = child.name; this._docsInfo.sections[sectionName] = sectionName; - this._docsInfo.menu[sectionName] = [sectionName]; + this._docsInfo.markdownMenu[sectionName] = [sectionName]; const entities = [child]; const commentObj = child.comment; const SectionComment = !_.isUndefined(commentObj) ? commentObj.shortText : ''; @@ -158,7 +160,7 @@ export class TypeDocUtils { }); if (!_.isEmpty(typeEntities)) { this._docsInfo.sections[constants.TYPES_SECTION_NAME] = constants.TYPES_SECTION_NAME; - this._docsInfo.menu[constants.TYPES_SECTION_NAME] = [constants.TYPES_SECTION_NAME]; + this._docsInfo.markdownMenu[constants.TYPES_SECTION_NAME] = [constants.TYPES_SECTION_NAME]; const docSection = this._convertEntitiesToDocSection(typeEntities, constants.TYPES_SECTION_NAME); docAgnosticFormat[constants.TYPES_SECTION_NAME] = docSection; } diff --git a/packages/react-docs/tslint.json b/packages/react-docs/tslint.json index c78434416..c3f6d9cae 100644 --- a/packages/react-docs/tslint.json +++ b/packages/react-docs/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "no-object-literal-type-assertion": false, "completed-docs": false, diff --git a/packages/react-shared/CHANGELOG.json b/packages/react-shared/CHANGELOG.json index d1907e785..8578b4603 100644 --- a/packages/react-shared/CHANGELOG.json +++ b/packages/react-shared/CHANGELOG.json @@ -1,11 +1,20 @@ [ { - "timestamp": 1538693146, - "version": "1.0.15", + "version": "1.0.17", "changes": [ { "note": "Dependencies updated" } + ], + "timestamp": 1539871071 + }, + { + "timestamp": 1538693146, + "version": "1.0.16", + "changes": [ + { + "note": "Unpublished package" + } ] }, { diff --git a/packages/react-shared/CHANGELOG.md b/packages/react-shared/CHANGELOG.md index 20d3e0bf7..fc3f7e32c 100644 --- a/packages/react-shared/CHANGELOG.md +++ b/packages/react-shared/CHANGELOG.md @@ -5,10 +5,14 @@ Edit the package's CHANGELOG.json file only. CHANGELOG -## v1.0.15 - _October 4, 2018_ +## v1.0.17 - _October 18, 2018_ * Dependencies updated +## v1.0.16 - _October 4, 2018_ + + * Unpublished package + ## v1.0.14 - _October 2, 2018_ * Dependencies updated @@ -41,7 +45,7 @@ CHANGELOG * Dependencies updated -## v1.0.6 - _August 13, 2018_ +## v1.0.6 - _August 14, 2018_ * Dependencies updated diff --git a/packages/react-shared/README.md b/packages/react-shared/README.md index 88e6f18ae..7ff9a94d9 100644 --- a/packages/react-shared/README.md +++ b/packages/react-shared/README.md @@ -1,18 +1,18 @@ -## @0xproject/react-shared +## @0x/react-shared Contains React components & frontend types/utils shared between 0x projects. ## Installation ```bash -yarn add @0xproject/react-shared +yarn add @0x/react-shared ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -41,13 +41,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/react-shared yarn build +PKG=@0x/react-shared yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/react-shared yarn watch +PKG=@0x/react-shared yarn watch ``` ### Clean diff --git a/packages/react-shared/package.json b/packages/react-shared/package.json index afed68c42..7a150bf35 100644 --- a/packages/react-shared/package.json +++ b/packages/react-shared/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/react-shared", - "version": "1.0.15", + "name": "@0x/react-shared", + "version": "1.0.17", "engines": { "node": ">=6.12" }, @@ -25,14 +25,15 @@ "url": "https://github.com/0xProject/0x-monorepo.git" }, "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/tslint-config": "^1.0.8", + "@0x/dev-utils": "^1.0.13", + "@0x/tslint-config": "^1.0.9", "make-promises-safe": "^1.1.0", "shx": "^0.2.2", "tslint": "^5.9.1", "typescript": "3.0.1" }, "dependencies": { + "@0x/types": "^1.2.0", "@material-ui/core": "^3.0.1", "@types/is-mobile": "0.3.0", "@types/lodash": "4.14.104", @@ -40,7 +41,10 @@ "@types/node": "*", "@types/react": "*", "@types/react-dom": "*", + "@types/react-router-dom": "^4.0.4", "@types/react-scroll": "1.5.3", + "@types/styled-components": "^4.0.0", + "@types/valid-url": "^1.0.2", "basscss": "^8.0.3", "change-case": "^3.0.2", "is-mobile": "^0.2.2", @@ -50,7 +54,10 @@ "react-dom": "^16.4.2", "react-highlight": "0xproject/react-highlight#2f40a42e0a3f0ad126f9f42d505b97b603fc7162", "react-markdown": "^3.2.2", - "react-scroll": "0xproject/react-scroll#similar-to-pr-330" + "react-router-dom": "^4.1.1", + "react-scroll": "0xproject/react-scroll#pr-330-and-replace-state", + "styled-components": "^3.3.0", + "valid-url": "^1.0.9" }, "publishConfig": { "access": "public" diff --git a/packages/react-shared/src/components/anchor_title.tsx b/packages/react-shared/src/components/anchor_title.tsx index 8f7e4af27..bd99edcab 100644 --- a/packages/react-shared/src/components/anchor_title.tsx +++ b/packages/react-shared/src/components/anchor_title.tsx @@ -1,7 +1,9 @@ import * as React from 'react'; import { Link as ScrollLink } from 'react-scroll'; +import styled from 'styled-components'; import { HeaderSizes, Styles } from '../types'; +import { colors } from '../utils/colors'; import { constants } from '../utils/constants'; const headerSizeToScrollOffset: { [headerSize: string]: number } = { @@ -14,20 +16,14 @@ export interface AnchorTitleProps { id: string; headerSize: HeaderSizes; shouldShowAnchor: boolean; + isDisabled: boolean; } -export interface AnchorTitleState { - isHovering: boolean; -} +export interface AnchorTitleState {} const styles: Styles = { - anchor: { - fontSize: 20, - transform: 'rotate(45deg)', - cursor: 'pointer', - }, h1: { - fontSize: '1.8em', + fontSize: '1.875em', }, h2: { fontSize: '1.5em', @@ -38,18 +34,28 @@ const styles: Styles = { }, }; +interface AnchorIconProps { + shouldShowAnchor: boolean; +} + +const AnchorIcon = + styled.i < + AnchorIconProps > + ` + opacity: ${props => (props.shouldShowAnchor ? 1 : 0)}; + &:hover { + opacity: ${props => (props.shouldShowAnchor ? 0.6 : 0)}; + } + font-size: 20px; + transform: rotate(45deg); + cursor: pointer; + `; + export class AnchorTitle extends React.Component<AnchorTitleProps, AnchorTitleState> { - constructor(props: AnchorTitleProps) { - super(props); - this.state = { - isHovering: false, - }; - } + public static defaultProps: Partial<AnchorTitleProps> = { + isDisabled: false, + }; public render(): React.ReactNode { - let opacity = 0; - if (this.props.shouldShowAnchor) { - opacity = this.state.isHovering ? 0.6 : 1; - } return ( <div className="relative flex" @@ -63,29 +69,21 @@ export class AnchorTitle extends React.Component<AnchorTitleProps, AnchorTitleSt } as any } > - <div className="inline-block" style={{ paddingRight: 4 }}> + <div className="inline-block" style={{ paddingRight: 4, color: colors.darkestGrey }}> {this.props.title} </div> - <ScrollLink - to={this.props.id} - hashSpy={true} - offset={headerSizeToScrollOffset[this.props.headerSize]} - duration={constants.DOCS_SCROLL_DURATION_MS} - containerId={constants.DOCS_CONTAINER_ID} - > - <i - className="zmdi zmdi-link" - style={{ ...styles.anchor, opacity }} - onMouseOver={this._setHoverState.bind(this, true)} - onMouseOut={this._setHoverState.bind(this, false)} - /> - </ScrollLink> + {!this.props.isDisabled && ( + <ScrollLink + to={this.props.id} + hashSpy={true} + offset={headerSizeToScrollOffset[this.props.headerSize]} + duration={constants.DOCS_SCROLL_DURATION_MS} + containerId={constants.SCROLL_CONTAINER_ID} + > + <AnchorIcon className="zmdi zmdi-link" shouldShowAnchor={this.props.shouldShowAnchor} /> + </ScrollLink> + )} </div> ); } - private _setHoverState(isHovering: boolean): void { - this.setState({ - isHovering, - }); - } } diff --git a/packages/react-shared/src/components/link.tsx b/packages/react-shared/src/components/link.tsx new file mode 100644 index 000000000..089e6e2ba --- /dev/null +++ b/packages/react-shared/src/components/link.tsx @@ -0,0 +1,145 @@ +import * as _ from 'lodash'; +import * as React from 'react'; +import { Link as ReactRounterLink } from 'react-router-dom'; +import { Link as ScrollLink } from 'react-scroll'; +import * as validUrl from 'valid-url'; + +import { LinkType } from '../types'; +import { constants } from '../utils/constants'; + +interface BaseLinkProps { + to: string; + shouldOpenInNewTab?: boolean; + className?: string; + onMouseOver?: (event: React.MouseEvent<HTMLElement>) => void; + onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void; + onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void; + textDecoration?: string; + fontColor?: string; +} + +interface ScrollLinkProps extends BaseLinkProps { + onActivityChanged?: (isActive: boolean) => void; +} + +type LinkProps = BaseLinkProps & ScrollLinkProps; + +export interface LinkState {} + +/** + * A generic link component which let's the developer render internal, external and scroll-to-hash links, and + * their associated behaviors with a single link component. Many times we want a menu including a combination of + * internal, external and scroll links and the abstraction of the differences of rendering each types of link + * makes it much easier to do so. + */ +export class Link extends React.Component<LinkProps, LinkState> { + public static defaultProps: Partial<LinkProps> = { + shouldOpenInNewTab: false, + className: '', + onMouseOver: _.noop.bind(_), + onMouseLeave: _.noop.bind(_), + onMouseEnter: _.noop.bind(_), + textDecoration: 'none', + fontColor: 'inherit', + }; + private _outerReactScrollSpan: HTMLSpanElement | null; + constructor(props: LinkProps) { + super(props); + this._outerReactScrollSpan = null; + } + public render(): React.ReactNode { + let type: LinkType; + const isReactRoute = _.startsWith(this.props.to, '/'); + const isExternal = validUrl.isWebUri(this.props.to) || _.startsWith(this.props.to, 'mailto:'); + if (isReactRoute) { + type = LinkType.ReactRoute; + } else if (isExternal) { + type = LinkType.External; + } else { + type = LinkType.ReactScroll; + } + + if (type === LinkType.ReactScroll && this.props.shouldOpenInNewTab) { + throw new Error(`Cannot open LinkType.ReactScroll links in new tab. link.to: ${this.props.to}`); + } + + const styleWithDefault = { + textDecoration: this.props.textDecoration, + cursor: 'pointer', + color: this.props.fontColor, + }; + + switch (type) { + case LinkType.External: + return ( + <a + target={this.props.shouldOpenInNewTab ? '_blank' : ''} + className={this.props.className} + style={styleWithDefault} + href={this.props.to} + onMouseOver={this.props.onMouseOver} + onMouseEnter={this.props.onMouseEnter} + onMouseLeave={this.props.onMouseLeave} + > + {this.props.children} + </a> + ); + case LinkType.ReactRoute: + return ( + <ReactRounterLink + to={this.props.to} + className={this.props.className} + style={styleWithDefault} + target={this.props.shouldOpenInNewTab ? '_blank' : ''} + onMouseOver={this.props.onMouseOver} + onMouseEnter={this.props.onMouseEnter} + onMouseLeave={this.props.onMouseLeave} + > + {this.props.children} + </ReactRounterLink> + ); + case LinkType.ReactScroll: + return ( + <span + ref={input => (this._outerReactScrollSpan = input)} + onMouseOver={this.props.onMouseOver} + onMouseEnter={this.props.onMouseEnter} + onMouseLeave={this.props.onMouseLeave} + > + <ScrollLink + to={this.props.to} + offset={0} + spy={true} + hashSpy={true} + duration={constants.DOCS_SCROLL_DURATION_MS} + containerId={constants.SCROLL_CONTAINER_ID} + className={this.props.className} + style={styleWithDefault} + onSetActive={this._onActivityChanged.bind(this, true)} + onSetInactive={this._onActivityChanged.bind(this, false)} + > + <span onClick={this._onClickPropagateClickEventAroundScrollLink.bind(this)}> + {this.props.children} + </span> + </ScrollLink> + </span> + ); + default: + throw new Error(`Unrecognized LinkType: ${type}`); + } + } + private _onActivityChanged(isActive: boolean): void { + if (this.props.onActivityChanged) { + this.props.onActivityChanged(isActive); + } + } + // HACK(fabio): For some reason, the react-scroll link decided to stop the propagation of click events. + // We do however rely on these events being propagated in certain scenarios (e.g when the link + // is within a dropdown we want to close upon being clicked). Because of this, we register the + // click event of an inner span, and pass it around the react-scroll link to an outer span. + private _onClickPropagateClickEventAroundScrollLink(): void { + if (!_.isNull(this._outerReactScrollSpan)) { + this._outerReactScrollSpan.click(); + } + } +} diff --git a/packages/react-shared/src/components/markdown_paragraph_block.tsx b/packages/react-shared/src/components/markdown_paragraph_block.tsx new file mode 100644 index 000000000..eeaef8571 --- /dev/null +++ b/packages/react-shared/src/components/markdown_paragraph_block.tsx @@ -0,0 +1,10 @@ +import * as _ from 'lodash'; +import * as React from 'react'; + +import { colors } from '../utils/colors'; + +export interface MarkdownParagraphBlockProps {} + +export const MarkdownParagraphBlock: React.StatelessComponent<MarkdownParagraphBlockProps> = ({ children }) => { + return <span style={{ color: colors.greyTheme, lineHeight: '26px' }}>{children}</span>; +}; diff --git a/packages/react-shared/src/components/markdown_section.tsx b/packages/react-shared/src/components/markdown_section.tsx index 09b214548..42c910c11 100644 --- a/packages/react-shared/src/components/markdown_section.tsx +++ b/packages/react-shared/src/components/markdown_section.tsx @@ -8,14 +8,17 @@ import { colors } from '../utils/colors'; import { utils } from '../utils/utils'; import { AnchorTitle } from './anchor_title'; +import { Link } from './link'; import { MarkdownCodeBlock } from './markdown_code_block'; import { MarkdownLinkBlock } from './markdown_link_block'; +import { MarkdownParagraphBlock } from './markdown_paragraph_block'; export interface MarkdownSectionProps { sectionName: string; markdownContent: string; headerSize?: HeaderSizes; githubLink?: string; + alternativeSectionTitle?: string; } interface DefaultMarkdownSectionProps { @@ -42,20 +45,23 @@ export class MarkdownSection extends React.Component<MarkdownSectionProps, Markd const { sectionName, markdownContent, headerSize, githubLink } = this.props as PropsWithDefaults; const id = utils.getIdFromName(sectionName); - const finalSectionName = utils.convertCamelCaseToSpaces(sectionName); + const formattedSectionName = utils.convertCamelCaseToSpaces(sectionName); + const title = !_.isUndefined(this.props.alternativeSectionTitle) + ? this.props.alternativeSectionTitle + : _.capitalize(formattedSectionName); return ( <div className="md-px1 sm-px2 overflow-hidden" onMouseOver={this._setAnchorVisibility.bind(this, true)} onMouseOut={this._setAnchorVisibility.bind(this, false)} > - <ScrollElement name={id}> - <div className="clearfix pt3"> + <ScrollElement name={id} style={{ paddingBottom: 20 }}> + <div className="clearfix" style={{ paddingTop: 30, paddingBottom: 20 }}> <div className="col lg-col-8 md-col-8 sm-col-12"> - <span style={{ textTransform: 'capitalize', color: colors.grey700 }}> + <span style={{ color: colors.grey700 }}> <AnchorTitle headerSize={headerSize} - title={finalSectionName} + title={title} id={id} shouldShowAnchor={this.state.shouldShowAnchor} /> @@ -63,23 +69,29 @@ export class MarkdownSection extends React.Component<MarkdownSectionProps, Markd </div> <div className="col col-4 sm-hide xs-hide right-align pr3" style={{ height: 28 }}> {!_.isUndefined(githubLink) && ( - <a - href={githubLink} - target="_blank" - style={{ color: colors.linkBlue, textDecoration: 'none', lineHeight: 2.1 }} - > - Edit on Github - </a> + <div style={{ lineHeight: 2.1 }}> + <Link to={githubLink} shouldOpenInNewTab={true} fontColor={colors.linkBlue}> + Edit on Github + </Link> + </div> )} </div> </div> - <hr style={{ border: `1px solid ${colors.lightestGrey}` }} /> <ReactMarkdown source={markdownContent} escapeHtml={false} renderers={{ code: MarkdownCodeBlock, link: MarkdownLinkBlock, + paragraph: MarkdownParagraphBlock, + }} + /> + <div + style={{ + width: '100%', + height: 1, + backgroundColor: colors.grey300, + marginTop: 32, }} /> </ScrollElement> diff --git a/packages/react-shared/src/components/nested_sidebar_menu.tsx b/packages/react-shared/src/components/nested_sidebar_menu.tsx deleted file mode 100644 index c8bddb59a..000000000 --- a/packages/react-shared/src/components/nested_sidebar_menu.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import * as _ from 'lodash'; -import MenuItem from 'material-ui/MenuItem'; -import * as React from 'react'; -import { Link as ScrollLink } from 'react-scroll'; - -import { MenuSubsectionsBySection, Styles } from '../types'; -import { colors } from '../utils/colors'; -import { constants } from '../utils/constants'; -import { utils } from '../utils/utils'; - -import { VersionDropDown } from './version_drop_down'; - -export interface NestedSidebarMenuProps { - topLevelMenu: { [topLevel: string]: string[] }; - menuSubsectionsBySection: MenuSubsectionsBySection; - sidebarHeader?: React.ReactNode; - shouldDisplaySectionHeaders?: boolean; - onMenuItemClick?: () => void; - selectedVersion?: string; - versions?: string[]; - onVersionSelected?: (semver: string) => void; -} - -export interface NestedSidebarMenuState {} - -const styles: Styles = { - menuItemWithHeaders: { - minHeight: 0, - }, - menuItemWithoutHeaders: { - minHeight: 48, - }, - menuItemInnerDivWithHeaders: { - color: colors.grey800, - fontSize: 14, - lineHeight: 2, - padding: 0, - }, -}; - -export class NestedSidebarMenu extends React.Component<NestedSidebarMenuProps, NestedSidebarMenuState> { - public static defaultProps: Partial<NestedSidebarMenuProps> = { - shouldDisplaySectionHeaders: true, - onMenuItemClick: _.noop.bind(_), - }; - public render(): React.ReactNode { - const navigation = _.map(this.props.topLevelMenu, (menuItems: string[], sectionName: string) => { - const finalSectionName = utils.convertCamelCaseToSpaces(sectionName); - if (this.props.shouldDisplaySectionHeaders) { - // tslint:disable-next-line:no-unused-variable - const id = utils.getIdFromName(sectionName); - return ( - <div key={`section-${sectionName}`} className="py1" style={{ color: colors.grey800 }}> - <div style={{ fontWeight: 'bold', fontSize: 15 }} className="py1"> - {finalSectionName.toUpperCase()} - </div> - {this._renderMenuItems(menuItems)} - </div> - ); - } else { - return <div key={`section-${sectionName}`}>{this._renderMenuItems(menuItems)}</div>; - } - }); - const maxWidthWithScrollbar = 307; - return ( - <div> - {this.props.sidebarHeader} - {!_.isUndefined(this.props.versions) && - !_.isUndefined(this.props.selectedVersion) && - !_.isUndefined(this.props.onVersionSelected) && ( - <div style={{ maxWidth: maxWidthWithScrollbar }}> - <VersionDropDown - selectedVersion={this.props.selectedVersion} - versions={this.props.versions} - onVersionSelected={this.props.onVersionSelected} - /> - </div> - )} - <div className="pl1">{navigation}</div> - </div> - ); - } - private _renderMenuItems(menuItemNames: string[]): React.ReactNode[] { - const menuItemStyles = this.props.shouldDisplaySectionHeaders - ? styles.menuItemWithHeaders - : styles.menuItemWithoutHeaders; - const menuItemInnerDivStyles = this.props.shouldDisplaySectionHeaders ? styles.menuItemInnerDivWithHeaders : {}; - const menuItems = _.map(menuItemNames, menuItemName => { - const finalMenuItemName = utils.convertDashesToSpaces(menuItemName); - const id = utils.getIdFromName(menuItemName); - return ( - <div key={menuItemName}> - <ScrollLink - key={`menuItem-${menuItemName}`} - to={id} - offset={0} - hashSpy={true} - duration={constants.DOCS_SCROLL_DURATION_MS} - containerId={constants.DOCS_CONTAINER_ID} - > - <MenuItem style={menuItemStyles} innerDivStyle={menuItemInnerDivStyles}> - <span style={{ textTransform: 'capitalize' }}>{finalMenuItemName}</span> - </MenuItem> - </ScrollLink> - {this._renderMenuItemSubsections(menuItemName)} - </div> - ); - }); - return menuItems; - } - private _renderMenuItemSubsections(menuItemName: string): React.ReactNode { - if (_.isUndefined(this.props.menuSubsectionsBySection[menuItemName])) { - return null; - } - return this._renderMenuSubsectionsBySection(menuItemName, this.props.menuSubsectionsBySection[menuItemName]); - } - private _renderMenuSubsectionsBySection(menuItemName: string, entityNames: string[]): React.ReactNode { - return ( - <ul style={{ margin: 0, listStyleType: 'none', paddingLeft: 0 }} key={menuItemName}> - {_.map(entityNames, entityName => { - const name = `${menuItemName}-${entityName}`; - const id = utils.getIdFromName(name); - return ( - <li key={`menuSubsectionItem-${name}`}> - <ScrollLink - to={id} - offset={0} - hashSpy={true} - duration={constants.DOCS_SCROLL_DURATION_MS} - containerId={constants.DOCS_CONTAINER_ID} - > - <MenuItem - style={{ minHeight: 35 }} - innerDivStyle={{ - paddingLeft: 16, - fontSize: 14, - lineHeight: '35px', - }} - > - {entityName} - </MenuItem> - </ScrollLink> - </li> - ); - })} - </ul> - ); - } -} diff --git a/packages/react-shared/src/components/version_drop_down.tsx b/packages/react-shared/src/components/version_drop_down.tsx deleted file mode 100644 index 5ff4bed54..000000000 --- a/packages/react-shared/src/components/version_drop_down.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import MenuItem from '@material-ui/core/MenuItem'; -import Select from '@material-ui/core/Select'; -import * as _ from 'lodash'; -import * as React from 'react'; - -export interface VersionDropDownProps { - selectedVersion: string; - versions: string[]; - onVersionSelected: (semver: string) => void; -} - -export interface VersionDropDownState {} - -export class VersionDropDown extends React.Component<VersionDropDownProps, VersionDropDownState> { - public render(): React.ReactNode { - return ( - <div className="mx-auto" style={{ width: 120 }}> - <Select value={this.props.selectedVersion} onChange={this._updateSelectedVersion.bind(this)}> - {this._renderDropDownItems()} - </Select> - </div> - ); - } - private _renderDropDownItems(): React.ReactNode[] { - const items = _.map(this.props.versions, version => { - return ( - <MenuItem key={version} value={version}> - v{version} - </MenuItem> - ); - }); - return items; - } - private _updateSelectedVersion(event: React.ChangeEvent<HTMLSelectElement>): void { - this.props.onVersionSelected(event.target.value); - } -} diff --git a/packages/react-shared/src/index.ts b/packages/react-shared/src/index.ts index 3b50c0117..a693f2a36 100644 --- a/packages/react-shared/src/index.ts +++ b/packages/react-shared/src/index.ts @@ -2,10 +2,10 @@ export { AnchorTitle } from './components/anchor_title'; export { MarkdownLinkBlock } from './components/markdown_link_block'; export { MarkdownCodeBlock } from './components/markdown_code_block'; export { MarkdownSection } from './components/markdown_section'; -export { NestedSidebarMenu } from './components/nested_sidebar_menu'; export { SectionHeader } from './components/section_header'; +export { Link } from './components/link'; -export { HeaderSizes, Styles, MenuSubsectionsBySection, EtherscanLinkSuffixes, Networks } from './types'; +export { HeaderSizes, Styles, EtherscanLinkSuffixes, Networks, ALink } from './types'; export { utils } from './utils/utils'; export { constants } from './utils/constants'; diff --git a/packages/react-shared/src/types.ts b/packages/react-shared/src/types.ts index 88fadcc09..9e8dcb6b6 100644 --- a/packages/react-shared/src/types.ts +++ b/packages/react-shared/src/types.ts @@ -8,10 +8,6 @@ export enum HeaderSizes { H3 = 'h3', } -export interface MenuSubsectionsBySection { - [section: string]: string[]; -} - export enum EtherscanLinkSuffixes { Address = 'address', Tx = 'tx', @@ -23,3 +19,15 @@ export enum Networks { Ropsten = 'Ropsten', Rinkeby = 'Rinkeby', } + +export enum LinkType { + External = 'EXTERNAL', + ReactScroll = 'REACT_SCROLL', + ReactRoute = 'REACT_ROUTE', +} + +export interface ALink { + title: string; + to: string; + shouldOpenInNewTab?: boolean; +} diff --git a/packages/react-shared/src/utils/colors.ts b/packages/react-shared/src/utils/colors.ts index 7d047a50e..a4dd7fefa 100644 --- a/packages/react-shared/src/utils/colors.ts +++ b/packages/react-shared/src/utils/colors.ts @@ -8,13 +8,17 @@ const baseColors = { greyishPink: '#E6E5E5', grey300: '#E0E0E0', beigeWhite: '#E4E4E4', - grey350: '#cacaca', + lightBgGrey: '#EDEDED', + grey325: '#dfdfdf', + grey350: '#CACACA', grey400: '#BDBDBD', lightGrey: '#BBBBBB', grey500: '#9E9E9E', grey: '#A5A5A5', darkGrey: '#818181', landingLinkGrey: '#919191', + linkSectionGrey: '#999999', + greyTheme: '#666666', grey700: '#616161', grey750: '#515151', grey800: '#424242', @@ -22,10 +26,12 @@ const baseColors = { heroGrey: '#404040', projectsGrey: '#343333', darkestGrey: '#272727', + lightestBlue: '#E7F1FD', lightBlue: '#60A4F4', lightBlueA700: '#0091EA', - linkBlue: '#1D5CDE', + lightLinkBlue: '#3289F1', mediumBlue: '#488AEA', + linkBlue: '#1D5CDE', darkBlue: '#4D5481', lightTurquois: '#aefcdc', turquois: '#058789', diff --git a/packages/react-shared/src/utils/constants.ts b/packages/react-shared/src/utils/constants.ts index 562ab776b..2dca1a078 100644 --- a/packages/react-shared/src/utils/constants.ts +++ b/packages/react-shared/src/utils/constants.ts @@ -2,8 +2,7 @@ import { Networks } from '../types'; export const constants = { DOCS_SCROLL_DURATION_MS: 0, - DOCS_CONTAINER_ID: 'documentation', - SCROLL_CONTAINER_ID: 'documentation', + SCROLL_CONTAINER_ID: 'scroll_container', SCROLL_TOP_ID: 'pageScrollTop', NETWORK_NAME_BY_ID: { 1: Networks.Mainnet, diff --git a/packages/react-shared/tslint.json b/packages/react-shared/tslint.json index c78434416..c3f6d9cae 100644 --- a/packages/react-shared/tslint.json +++ b/packages/react-shared/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "no-object-literal-type-assertion": false, "completed-docs": false, diff --git a/packages/sol-compiler/CHANGELOG.json b/packages/sol-compiler/CHANGELOG.json index 3b19a253a..d945c305b 100644 --- a/packages/sol-compiler/CHANGELOG.json +++ b/packages/sol-compiler/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.1.8", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "1.1.7", "changes": [ { diff --git a/packages/sol-compiler/CHANGELOG.md b/packages/sol-compiler/CHANGELOG.md index d436462c9..1a86d097d 100644 --- a/packages/sol-compiler/CHANGELOG.md +++ b/packages/sol-compiler/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.1.8 - _October 18, 2018_ + + * Dependencies updated + ## v1.1.7 - _October 4, 2018_ * Dependencies updated @@ -39,7 +43,7 @@ CHANGELOG * Stop exporting types: `ContractArtifact`, `ContractNetworks` (#924) * Export types: `CompilerSettings`, `OutputField` (#924) -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Dependencies updated diff --git a/packages/sol-compiler/README.md b/packages/sol-compiler/README.md index 3a6ca130b..445aea315 100644 --- a/packages/sol-compiler/README.md +++ b/packages/sol-compiler/README.md @@ -1,4 +1,4 @@ -## @0xproject/sol-compiler +## @0x/sol-compiler Sol-compiler is a wrapper around [solc-js](https://www.npmjs.com/package/solc) that adds: @@ -15,33 +15,33 @@ Sol-compiler is a wrapper around [solc-js](https://www.npmjs.com/package/solc) t #### CLI Installation ```bash -yarn global add @0xproject/sol-compiler +yarn global add @0x/sol-compiler ``` #### API Installation ```bash -yarn add @0xproject/sol-compiler +yarn add @0x/sol-compiler ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` **Import** ```typescript -import { Compiler } from '@0xproject/sol-compiler'; +import { Compiler } from '@0x/sol-compiler'; ``` or ```javascript -var Compiler = require('@0xproject/sol-compiler').Compiler; +var Compiler = require('@0x/sol-compiler').Compiler; ``` ## Contributing @@ -69,13 +69,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/sol-compiler yarn build +PKG=@0x/sol-compiler yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/sol-compiler yarn watch +PKG=@0x/sol-compiler yarn watch ``` ### Clean diff --git a/packages/sol-compiler/package.json b/packages/sol-compiler/package.json index 828ce1dbc..4c4370b1f 100644 --- a/packages/sol-compiler/package.json +++ b/packages/sol-compiler/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/sol-compiler", - "version": "1.1.7", + "name": "@0x/sol-compiler", + "version": "1.1.8", "engines": { "node": ">=6.12" }, @@ -42,8 +42,8 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-compiler/README.md", "devDependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/tslint-config": "^1.0.8", + "@0x/dev-utils": "^1.0.13", + "@0x/tslint-config": "^1.0.9", "@types/mkdirp": "^0.5.2", "@types/require-from-string": "^1.2.0", "@types/semver": "^5.5.0", @@ -65,16 +65,16 @@ "zeppelin-solidity": "1.8.0" }, "dependencies": { - "@0xproject/assert": "^1.0.13", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/sol-resolver": "^1.0.14", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/assert": "^1.0.14", + "@0x/json-schemas": "^2.0.0", + "@0x/sol-resolver": "^1.0.15", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@types/yargs": "^11.0.0", "chalk": "^2.3.0", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-util": "^5.1.1", "lodash": "^4.17.5", "mkdirp": "^0.5.1", diff --git a/packages/sol-compiler/src/cli.ts b/packages/sol-compiler/src/cli.ts index 83dadc7ca..0a9db6e05 100644 --- a/packages/sol-compiler/src/cli.ts +++ b/packages/sol-compiler/src/cli.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node // We need the above pragma since this script will be run as a command-line tool. -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import * as _ from 'lodash'; import 'source-map-support/register'; import * as yargs from 'yargs'; diff --git a/packages/sol-compiler/src/compiler.ts b/packages/sol-compiler/src/compiler.ts index 7eefc1474..8ee7fa4a9 100644 --- a/packages/sol-compiler/src/compiler.ts +++ b/packages/sol-compiler/src/compiler.ts @@ -1,4 +1,4 @@ -import { assert } from '@0xproject/assert'; +import { assert } from '@0x/assert'; import { FallthroughResolver, FSResolver, @@ -7,8 +7,8 @@ import { RelativeFSResolver, Resolver, URLResolver, -} from '@0xproject/sol-resolver'; -import { fetchAsync, logUtils } from '@0xproject/utils'; +} from '@0x/sol-resolver'; +import { fetchAsync, logUtils } from '@0x/utils'; import chalk from 'chalk'; import { CompilerOptions, ContractArtifact, ContractVersionData, StandardOutput } from 'ethereum-types'; import * as ethUtil from 'ethereumjs-util'; diff --git a/packages/sol-compiler/src/utils/compiler.ts b/packages/sol-compiler/src/utils/compiler.ts index c153beb0f..cda67a414 100644 --- a/packages/sol-compiler/src/utils/compiler.ts +++ b/packages/sol-compiler/src/utils/compiler.ts @@ -1,5 +1,5 @@ -import { ContractSource } from '@0xproject/sol-resolver'; -import { logUtils } from '@0xproject/utils'; +import { ContractSource } from '@0x/sol-resolver'; +import { logUtils } from '@0x/utils'; import { ContractArtifact } from 'ethereum-types'; import * as _ from 'lodash'; import * as path from 'path'; diff --git a/packages/sol-compiler/src/utils/fs_wrapper.ts b/packages/sol-compiler/src/utils/fs_wrapper.ts index 8d6800276..a52b50963 100644 --- a/packages/sol-compiler/src/utils/fs_wrapper.ts +++ b/packages/sol-compiler/src/utils/fs_wrapper.ts @@ -1,4 +1,4 @@ -import { promisify } from '@0xproject/utils'; +import { promisify } from '@0x/utils'; import * as fs from 'fs'; import * as mkdirp from 'mkdirp'; diff --git a/packages/sol-compiler/test/util/constants.ts b/packages/sol-compiler/test/util/constants.ts index 88d6db550..a74ea1b68 100644 --- a/packages/sol-compiler/test/util/constants.ts +++ b/packages/sol-compiler/test/util/constants.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; export const constants = { networkId: 0, diff --git a/packages/sol-compiler/test/util/provider.ts b/packages/sol-compiler/test/util/provider.ts index cc372b2eb..4561a1699 100644 --- a/packages/sol-compiler/test/util/provider.ts +++ b/packages/sol-compiler/test/util/provider.ts @@ -1,4 +1,4 @@ -import { web3Factory } from '@0xproject/dev-utils'; +import { web3Factory } from '@0x/dev-utils'; import { Provider } from 'ethereum-types'; const providerConfigs = { shouldUseInProcessGanache: true }; diff --git a/packages/sol-compiler/tslint.json b/packages/sol-compiler/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/sol-compiler/tslint.json +++ b/packages/sol-compiler/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/sol-cov/CHANGELOG.json b/packages/sol-cov/CHANGELOG.json index 283946f07..cbee0233b 100644 --- a/packages/sol-cov/CHANGELOG.json +++ b/packages/sol-cov/CHANGELOG.json @@ -6,7 +6,8 @@ "note": "Make @types/solidity-parser-antlr a 'dependency' so it's available to users of the library", "pr": 1105 } - ] + ], + "timestamp": 1539871071 }, { "version": "2.1.7", diff --git a/packages/sol-cov/CHANGELOG.md b/packages/sol-cov/CHANGELOG.md index c019c9e79..11ed486e2 100644 --- a/packages/sol-cov/CHANGELOG.md +++ b/packages/sol-cov/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.1.8 - _October 18, 2018_ + + * Make @types/solidity-parser-antlr a 'dependency' so it's available to users of the library (#1105) + ## v2.1.7 - _October 4, 2018_ * Dependencies updated @@ -37,7 +41,7 @@ CHANGELOG * Export types: `JSONRPCRequestPayload`, `Provider`, `JSONRPCErrorCallback`, `JSONRPCResponsePayload`, `JSONRPCRequestPayloadWithMethod`, `NextCallback`, `ErrorCallback`, `OnNextCompleted` and `Callback` (#924) -## v2.0.0 - _August 13, 2018_ +## v2.0.0 - _August 14, 2018_ * Fix a bug when eth_call coverage was not computed because of silent schema validation failures (#938) * Make `TruffleArtifactAdapter` read the `truffle.js` config for `solc` settings (#938) diff --git a/packages/sol-cov/README.md b/packages/sol-cov/README.md index 0a63ac06e..31d73dc63 100644 --- a/packages/sol-cov/README.md +++ b/packages/sol-cov/README.md @@ -1,4 +1,4 @@ -## @0xproject/sol-cov +## @0x/sol-cov A Solidity code coverage tool. @@ -7,19 +7,19 @@ A Solidity code coverage tool. ## Installation ```bash -yarn add @0xproject/sol-cov +yarn add @0x/sol-cov ``` **Import** ```javascript -import { CoverageSubprovider } from '@0xproject/sol-cov'; +import { CoverageSubprovider } from '@0x/sol-cov'; ``` or ```javascript -var CoverageSubprovider = require('@0xproject/sol-cov').CoverageSubprovider; +var CoverageSubprovider = require('@0x/sol-cov').CoverageSubprovider; ``` ## Contributing @@ -47,13 +47,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/sol-cov yarn build +PKG=@0x/sol-cov yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/sol-cov yarn watch +PKG=@0x/sol-cov yarn watch ``` ### Clean diff --git a/packages/sol-cov/package.json b/packages/sol-cov/package.json index 49473f6c8..a56713d69 100644 --- a/packages/sol-cov/package.json +++ b/packages/sol-cov/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/sol-cov", - "version": "2.1.7", + "name": "@0x/sol-cov", + "version": "2.1.8", "engines": { "node": ">=6.12" }, @@ -42,14 +42,14 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/sol-cov/README.md", "dependencies": { - "@0xproject/dev-utils": "^1.0.12", - "@0xproject/sol-compiler": "^1.1.7", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/dev-utils": "^1.0.13", + "@0x/sol-compiler": "^1.1.8", + "@0x/subproviders": "^2.1.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@types/solidity-parser-antlr": "^0.2.0", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-util": "^5.1.1", "glob": "^7.1.2", "istanbul": "^0.4.5", @@ -61,7 +61,7 @@ "solidity-parser-antlr": "^0.2.12" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/istanbul": "^0.4.30", "@types/loglevel": "^1.5.3", "@types/mkdirp": "^0.5.1", diff --git a/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts b/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts index 8a74022bf..57391abbe 100644 --- a/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts +++ b/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts @@ -1,4 +1,4 @@ -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import { CompilerOptions, ContractArtifact } from 'ethereum-types'; import * as fs from 'fs'; import * as glob from 'glob'; diff --git a/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts b/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts index b4d1aa7ba..f064911d3 100644 --- a/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts +++ b/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts @@ -1,4 +1,4 @@ -import { Compiler, CompilerOptions } from '@0xproject/sol-compiler'; +import { Compiler, CompilerOptions } from '@0x/sol-compiler'; import * as fs from 'fs'; import * as glob from 'glob'; import * as path from 'path'; diff --git a/packages/sol-cov/src/index.ts b/packages/sol-cov/src/index.ts index 612d0869a..348e0fc9b 100644 --- a/packages/sol-cov/src/index.ts +++ b/packages/sol-cov/src/index.ts @@ -22,4 +22,4 @@ export { ErrorCallback, OnNextCompleted, Callback, -} from '@0xproject/subproviders'; +} from '@0x/subproviders'; diff --git a/packages/sol-cov/src/revert_trace.ts b/packages/sol-cov/src/revert_trace.ts index a78d1afa8..d60c6e7d9 100644 --- a/packages/sol-cov/src/revert_trace.ts +++ b/packages/sol-cov/src/revert_trace.ts @@ -1,4 +1,4 @@ -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import { OpCode, StructLog } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/sol-cov/src/trace.ts b/packages/sol-cov/src/trace.ts index 635019fc0..b38dbdce0 100644 --- a/packages/sol-cov/src/trace.ts +++ b/packages/sol-cov/src/trace.ts @@ -1,4 +1,4 @@ -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import { OpCode, StructLog } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/sol-cov/src/trace_collection_subprovider.ts b/packages/sol-cov/src/trace_collection_subprovider.ts index a69bccb07..25e38768d 100644 --- a/packages/sol-cov/src/trace_collection_subprovider.ts +++ b/packages/sol-cov/src/trace_collection_subprovider.ts @@ -1,6 +1,6 @@ -import { BlockchainLifecycle } from '@0xproject/dev-utils'; -import { Callback, ErrorCallback, NextCallback, Subprovider } from '@0xproject/subproviders'; -import { CallDataRPC, marshaller, Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { Callback, ErrorCallback, NextCallback, Subprovider } from '@0x/subproviders'; +import { CallDataRPC, marshaller, Web3Wrapper } from '@0x/web3-wrapper'; import { JSONRPCRequestPayload, Provider, TxData } from 'ethereum-types'; import * as _ from 'lodash'; import { Lock } from 'semaphore-async-await'; diff --git a/packages/sol-cov/src/trace_collector.ts b/packages/sol-cov/src/trace_collector.ts index 3e2ae3516..44cffc238 100644 --- a/packages/sol-cov/src/trace_collector.ts +++ b/packages/sol-cov/src/trace_collector.ts @@ -1,4 +1,4 @@ -import { promisify } from '@0xproject/utils'; +import { promisify } from '@0x/utils'; import { stripHexPrefix } from 'ethereumjs-util'; import * as fs from 'fs'; import { Collector } from 'istanbul'; diff --git a/packages/sol-cov/src/utils.ts b/packages/sol-cov/src/utils.ts index b696bd463..d8bc65e73 100644 --- a/packages/sol-cov/src/utils.ts +++ b/packages/sol-cov/src/utils.ts @@ -1,4 +1,4 @@ -import { addressUtils, BigNumber } from '@0xproject/utils'; +import { addressUtils, BigNumber } from '@0x/utils'; import { OpCode, StructLog } from 'ethereum-types'; import { addHexPrefix } from 'ethereumjs-util'; import * as _ from 'lodash'; diff --git a/packages/sol-cov/tslint.json b/packages/sol-cov/tslint.json index 015dce851..631f46bca 100644 --- a/packages/sol-cov/tslint.json +++ b/packages/sol-cov/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "completed-docs": false } diff --git a/packages/sol-doc/CHANGELOG.json b/packages/sol-doc/CHANGELOG.json index c0b094ba0..e117ff291 100644 --- a/packages/sol-doc/CHANGELOG.json +++ b/packages/sol-doc/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.0.3", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "version": "1.0.2", "changes": [ { diff --git a/packages/sol-doc/CHANGELOG.md b/packages/sol-doc/CHANGELOG.md index 437c2e7be..9adc02b19 100644 --- a/packages/sol-doc/CHANGELOG.md +++ b/packages/sol-doc/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.3 - _October 18, 2018_ + + * Dependencies updated + ## v1.0.2 - _October 4, 2018_ * Dependencies updated diff --git a/packages/sol-doc/package.json b/packages/sol-doc/package.json index b9fe9f56d..de10b9e17 100644 --- a/packages/sol-doc/package.json +++ b/packages/sol-doc/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/sol-doc", - "version": "1.0.2", + "name": "@0x/sol-doc", + "version": "1.0.3", "description": "Solidity documentation generator", "main": "lib/src/index.js", "types": "lib/src/index.d.js", @@ -25,16 +25,16 @@ "author": "F. Eugene Aumson", "license": "Apache-2.0", "dependencies": { - "@0xproject/sol-compiler": "^1.1.7", - "@0xproject/types": "^1.1.4", - "@0xproject/utils": "^2.0.2", - "ethereum-types": "^1.0.11", + "@0x/sol-compiler": "^1.1.8", + "@0x/types": "^1.2.0", + "@0x/utils": "^2.0.3", + "ethereum-types": "^1.1.1", "ethereumjs-util": "^5.1.1", "lodash": "^4.17.10", "yargs": "^12.0.2" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "chai": "^4.1.2", "chai-as-promised": "^7.1.0", "chai-bignumber": "^2.0.2", diff --git a/packages/sol-doc/src/cli.ts b/packages/sol-doc/src/cli.ts index a1847e868..6da132d56 100644 --- a/packages/sol-doc/src/cli.ts +++ b/packages/sol-doc/src/cli.ts @@ -1,7 +1,7 @@ import 'source-map-support/register'; import * as yargs from 'yargs'; -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import { SolDoc } from './sol_doc'; diff --git a/packages/sol-doc/src/sol_doc.ts b/packages/sol-doc/src/sol_doc.ts index 686e9ca34..e2cfb39e2 100644 --- a/packages/sol-doc/src/sol_doc.ts +++ b/packages/sol-doc/src/sol_doc.ts @@ -14,7 +14,7 @@ import { import ethUtil = require('ethereumjs-util'); import * as _ from 'lodash'; -import { Compiler, CompilerOptions } from '@0xproject/sol-compiler'; +import { Compiler, CompilerOptions } from '@0x/sol-compiler'; import { CustomType, CustomTypeChild, @@ -27,7 +27,7 @@ import { SolidityMethod, Type, TypeDocTypes, -} from '@0xproject/types'; +} from '@0x/types'; export class SolDoc { private _customTypeHashToName: ObjectMap<string> | undefined; diff --git a/packages/sol-doc/test/solidity_doc_generator_test.ts b/packages/sol-doc/test/solidity_doc_generator_test.ts index f166fb143..a49f29d02 100644 --- a/packages/sol-doc/test/solidity_doc_generator_test.ts +++ b/packages/sol-doc/test/solidity_doc_generator_test.ts @@ -3,7 +3,7 @@ import * as _ from 'lodash'; import * as chai from 'chai'; import 'mocha'; -import { DocAgnosticFormat, Event, SolidityMethod } from '@0xproject/types'; +import { DocAgnosticFormat, Event, SolidityMethod } from '@0x/types'; import { SolDoc } from '../src/sol_doc'; diff --git a/packages/sol-doc/tslint.json b/packages/sol-doc/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/sol-doc/tslint.json +++ b/packages/sol-doc/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/sol-resolver/CHANGELOG.json b/packages/sol-resolver/CHANGELOG.json index f09870cac..a72ca6d63 100644 --- a/packages/sol-resolver/CHANGELOG.json +++ b/packages/sol-resolver/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.0.15", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "timestamp": 1538693146, "version": "1.0.14", "changes": [ diff --git a/packages/sol-resolver/CHANGELOG.md b/packages/sol-resolver/CHANGELOG.md index ef9033dde..671d3ea84 100644 --- a/packages/sol-resolver/CHANGELOG.md +++ b/packages/sol-resolver/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.15 - _October 18, 2018_ + + * Dependencies updated + ## v1.0.14 - _October 4, 2018_ * Dependencies updated @@ -41,7 +45,7 @@ CHANGELOG * Dependencies updated -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Fix a bug where RelativeFSResolver would crash when trying to read a directory (#909) * Fix a bug where NpmResolver would crash when trying to read a directory (#961) diff --git a/packages/sol-resolver/README.md b/packages/sol-resolver/README.md index 8487947f0..2ab336bc9 100644 --- a/packages/sol-resolver/README.md +++ b/packages/sol-resolver/README.md @@ -1,23 +1,23 @@ -## @0xproject/sol-resolver +## @0x/sol-resolver A Solidity import resolver used by [sol-compiler](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-compiler). ## Installation ```bash -yarn add @0xproject/sol-resolver +yarn add @0x/sol-resolver ``` **Import** ```javascript -import { Resolver } from '@0xproject/sol-resolver'; +import { Resolver } from '@0x/sol-resolver'; ``` or ```javascript -var Resolver = require('@0xproject/sol-resolver').Resolver; +var Resolver = require('@0x/sol-resolver').Resolver; ``` ## Contributing @@ -45,13 +45,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/sol-resolver yarn build +PKG=@0x/sol-resolver yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/sol-resolver yarn watch +PKG=@0x/sol-resolver yarn watch ``` ### Clean diff --git a/packages/sol-resolver/package.json b/packages/sol-resolver/package.json index 2c86d556a..4bd63f406 100644 --- a/packages/sol-resolver/package.json +++ b/packages/sol-resolver/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/sol-resolver", - "version": "1.0.14", + "name": "@0x/sol-resolver", + "version": "1.0.15", "engines": { "node": ">=6.12" }, @@ -23,15 +23,15 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/resolver/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "make-promises-safe": "^1.1.0", "shx": "^0.2.2", "tslint": "5.11.0", "typescript": "3.0.1" }, "dependencies": { - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", "lodash": "^4.17.5" }, "publishConfig": { diff --git a/packages/sol-resolver/tslint.json b/packages/sol-resolver/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/sol-resolver/tslint.json +++ b/packages/sol-resolver/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/sra-report/.npmignore b/packages/sra-report/.npmignore deleted file mode 100644 index d645458f6..000000000 --- a/packages/sra-report/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.* -yarn-error.log -/src/ -/scripts/ -tsconfig.json -/lib/monorepo_scripts/ diff --git a/packages/sra-report/CHANGELOG.json b/packages/sra-report/CHANGELOG.json deleted file mode 100644 index c88854b08..000000000 --- a/packages/sra-report/CHANGELOG.json +++ /dev/null @@ -1,289 +0,0 @@ -[ - { - "version": "1.0.13", - "changes": [ - { - "note": "Dependencies updated" - } - ], - "timestamp": 1538693146 - }, - { - "timestamp": 1538157789, - "version": "1.0.12", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1537907159, - "version": "1.0.11", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1537875740, - "version": "1.0.10", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1537541580, - "version": "1.0.9", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1536142250, - "version": "1.0.8", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1535377027, - "version": "1.0.7", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1535133899, - "version": "1.0.6", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1534210131, - "version": "1.0.5", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1532619515, - "version": "1.0.4", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1532614997, - "version": "1.0.3", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1532605697, - "version": "1.0.2", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1532357734, - "version": "1.0.1", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1532043000, - "version": "1.0.0", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1531919263, - "version": "0.1.6", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1531149657, - "version": "0.1.5", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1529397769, - "version": "0.1.4", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1527617805, - "version": "0.1.3", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1527617227, - "version": "0.1.2", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1527616612, - "version": "0.1.1", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "version": "0.1.0", - "changes": [ - { - "note": "Properly export the executable binary", - "pr": 588 - } - ], - "timestamp": 1527009133 - }, - { - "timestamp": 1525477860, - "version": "0.0.14", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1525453812, - "version": "0.0.13", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1525428773, - "version": "0.0.12", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1524079658, - "version": "0.0.11", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1524073495, - "version": "0.0.10", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1524044013, - "version": "0.0.9", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1523462196, - "version": "0.0.8", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1522673609, - "version": "0.0.7", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "version": "0.0.6", - "changes": [ - { - "note": "Added postman collection unit tests", - "pr": 451 - } - ], - "timestamp": 1522658513 - }, - { - "version": "0.0.2", - "changes": [ - { - "note": "Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package", - "pr": 452 - } - ], - "timestamp": 1521298800 - }, - { - "version": "0.0.1", - "changes": [], - "timestamp": 1520434800 - } -] diff --git a/packages/sra-report/CHANGELOG.md b/packages/sra-report/CHANGELOG.md deleted file mode 100644 index 803baae5b..000000000 --- a/packages/sra-report/CHANGELOG.md +++ /dev/null @@ -1,132 +0,0 @@ -<!-- -changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. -Edit the package's CHANGELOG.json file only. ---> - -CHANGELOG - -## v1.0.13 - _October 4, 2018_ - - * Dependencies updated - -## v1.0.12 - _September 28, 2018_ - - * Dependencies updated - -## v1.0.11 - _September 25, 2018_ - - * Dependencies updated - -## v1.0.10 - _September 25, 2018_ - - * Dependencies updated - -## v1.0.9 - _September 21, 2018_ - - * Dependencies updated - -## v1.0.8 - _September 5, 2018_ - - * Dependencies updated - -## v1.0.7 - _August 27, 2018_ - - * Dependencies updated - -## v1.0.6 - _August 24, 2018_ - - * Dependencies updated - -## v1.0.5 - _August 13, 2018_ - - * Dependencies updated - -## v1.0.4 - _July 26, 2018_ - - * Dependencies updated - -## v1.0.3 - _July 26, 2018_ - - * Dependencies updated - -## v1.0.2 - _July 26, 2018_ - - * Dependencies updated - -## v1.0.1 - _July 23, 2018_ - - * Dependencies updated - -## v1.0.0 - _July 19, 2018_ - - * Dependencies updated - -## v0.1.6 - _July 18, 2018_ - - * Dependencies updated - -## v0.1.5 - _July 9, 2018_ - - * Dependencies updated - -## v0.1.4 - _June 19, 2018_ - - * Dependencies updated - -## v0.1.3 - _May 29, 2018_ - - * Dependencies updated - -## v0.1.2 - _May 29, 2018_ - - * Dependencies updated - -## v0.1.1 - _May 29, 2018_ - - * Dependencies updated - -## v0.1.0 - _May 22, 2018_ - - * Properly export the executable binary (#588) - -## v0.0.14 - _May 4, 2018_ - - * Dependencies updated - -## v0.0.13 - _May 4, 2018_ - - * Dependencies updated - -## v0.0.12 - _May 4, 2018_ - - * Dependencies updated - -## v0.0.11 - _April 18, 2018_ - - * Dependencies updated - -## v0.0.10 - _April 18, 2018_ - - * Dependencies updated - -## v0.0.9 - _April 18, 2018_ - - * Dependencies updated - -## v0.0.8 - _April 11, 2018_ - - * Dependencies updated - -## v0.0.7 - _April 2, 2018_ - - * Dependencies updated - -## v0.0.6 - _April 2, 2018_ - - * Added postman collection unit tests (#451) - -## v0.0.2 - _March 17, 2018_ - - * Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package (#452) - -## v0.0.1 - _March 7, 2018_ diff --git a/packages/sra-report/README.md b/packages/sra-report/README.md deleted file mode 100644 index d8df36a29..000000000 --- a/packages/sra-report/README.md +++ /dev/null @@ -1,138 +0,0 @@ -# SRA Report - -This tool allows you to generate reports that detail an endpoint's [standard relayer API HTTP specification](https://github.com/0xProject/standard-relayer-api/blob/master/http/v0.md) compliance. The tool will perform a [Postman collection](https://www.getpostman.com/docs/v6/postman/collections/creating_collections) run and either print a report to the console or save it to disk as a json file. SRA report can also output a Postman collection file and [Postman environment](https://www.getpostman.com/docs/v6/postman/environments_and_globals/manage_environments) file in order to facilitate replication and debugging of collection runs using the [Postman native app](https://www.getpostman.com/docs/v6/postman/launching_postman/installation_and_updates). - -The tool currently performs the following checks for each endpoint: - -* `application/json` Content-Type header validation -* JSON schema validation -* Correct filtering when a query paramater is provided (ex. when querying for a specific maker address, all orders returned have the same maker address that was provided by the query) - -Features to come: - -* Correct sorting (ex. the `/orderbook` endpoint should return orders in order of price) -* Tests for pagination -* Tests for the `POST /order` endpoint -* Tests for failure cases and errors - -## Installation - -`yarn add -g @0xproject/sra-report` - -## Options - -``` -sra-report -Options: - --help Show help [boolean] - --version Show version number [boolean] - --endpoint-url, -e API endpoint url to test for standard relayer API - compliance [string] [required] - --output, -o, --out The relative path to write the report generated by - the collection run, prints to console by default - [string] - --network-id, -n ID of the network that the API is serving orders - from [number] [default: 1] - --environment, --env The relative path to a postman environment file - for the collection run [string] - --export-collection, --ec The relative path to write the postman collection - file used by the collection run [string] - --export-environment, --ee The relative path to write the postman environment - file used by the collection run [string] -``` - -## Example Usage - -### Print report to console - -```bash -sra-report --endpoint-url 'http://api.example.com' -``` - -### Save a report to disk - -```bash -sra-report --endpoint-url 'http://api.example.com' --output 'path/to/report.json' -``` - -### Generate report for an endpoint that serves kovan testnet orders - -```bash -sra-report --endpoint-url 'http://kovan.api.example.com' --network-id 42 -``` - -### Write Postman collection and environment files for use in the Postman native app - -```bash -sra-report --endpoint-url 'http://.api.example.com' --export-collection 'path/to/collection.json' --export-environment 'path/to/environment.json' -``` - -### Run the report using a custom environment - -```bash -sra-report --endpoint-url 'http://.api.example.com' --environment 'path/to/custom/environment.json' -``` - -## Custom environments - -When testing your standard relayer API endpoint in development, it may be useful to modify the Postman environment file generated by this tool such that specific query parameters are used during the collection run. For example, by default, this tool will grab the first order it can from the `/orders` endpoint and use properties from that order as query parameters for the rest of the run. Another example is the tool will default to the [WETH](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) and [ZRX](https://etherscan.io/address/0xe41d2489571d322189246dafa5ebde1f4699f498) token contracts when querying some endpoints but you may want to specify these. - -In order to provide a custom environment to the tool, perform the following steps: - -1. Export a Postman environment file using the tool: [example](#Write-Postman-collection-and-environment-files-for-use-in-the-Postman-native-app) -2. Open the Postman environment file using your favorite text editor or in the Postman native app -3. Modify the specific values you want -4. Save the environment file and export it if using the Postman native app -5. Run the tool and supply a path to your modified environment file: [example](#Run-the-report-using-a-custom-environment) - -## 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](../../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=@0xproject/sra-report yarn build -``` - -Or continuously rebuild on change: - -```bash -PKG=@0xproject/sra-report yarn watch -``` - -### Clean - -```bash -yarn clean -``` - -### Lint - -```bash -yarn lint -``` - -### Run Tests - -```bash -yarn test -``` diff --git a/packages/sra-report/bin/sra-report.js b/packages/sra-report/bin/sra-report.js deleted file mode 100755 index 8d6bdccf8..000000000 --- a/packages/sra-report/bin/sra-report.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require('../lib/src/index.js') diff --git a/packages/sra-report/package.json b/packages/sra-report/package.json deleted file mode 100644 index a822aa61d..000000000 --- a/packages/sra-report/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "@0xproject/sra-report", - "version": "1.0.13", - "engines": { - "node": ">=6.12" - }, - "description": "Generate reports for standard relayer API compliance", - "main": "lib/src/index.js", - "types": "lib/src/index.d.ts", - "scripts": { - "clean": "shx rm -rf lib", - "build": "tsc -b", - "build:ci": "yarn build", - "lint": "tslint --project .", - "test:circleci": "yarn test:coverage", - "test:coverage": "nyc npm run test --all && yarn coverage:report:lcov", - "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info", - "test": "run-s copy_test_environments copy_test_fixtures run_mocha", - "rebuild_and_test": "run-s clean build test", - "copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures", - "copy_test_environments": "copyfiles -u 2 './test/environments/**/*.json' ./lib/test/environments", - "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --exit" - }, - "bin": { - "sra-report": "bin/sra-report.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/0xProject/0x-monorepo.git" - }, - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/0xProject/0x-monorepo/issues" - }, - "homepage": "https://github.com/0xProject/0x-monorepo/packages/sra-report/README.md", - "dependencies": { - "@0xproject/assert": "^1.0.13", - "@0xproject/connect": "1.0.4", - "@0xproject/json-schemas": "^0.8.3", - "@0xproject/order-utils": "^0.0.9", - "@0xproject/types": "^0.8.2", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "chalk": "^2.3.0", - "lodash": "^4.17.5", - "newman": "^3.9.3", - "yargs": "^10.0.3" - }, - "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", - "@types/lodash": "4.14.104", - "@types/mocha": "^2.2.48", - "@types/newman": "^3.9.0", - "@types/nock": "^9.1.2", - "@types/node": "*", - "@types/yargs": "^10.0.0", - "chai": "^4.0.1", - "chai-as-promised": "^7.1.0", - "copyfiles": "^2.0.0", - "dirty-chai": "^2.0.1", - "make-promises-safe": "^1.1.0", - "mocha": "^4.1.0", - "nock": "^9.2.3", - "npm-run-all": "^4.1.2", - "nyc": "^11.0.1", - "shx": "^0.2.2", - "tslint": "5.11.0", - "typescript": "3.0.1" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/sra-report/postman_collections/sra_report.postman_collection.json b/packages/sra-report/postman_collections/sra_report.postman_collection.json deleted file mode 100644 index 9a8e8e0fa..000000000 --- a/packages/sra-report/postman_collections/sra_report.postman_collection.json +++ /dev/null @@ -1,910 +0,0 @@ -{ - "info": { - "name": "sra_report", - "_postman_id": "d5828163-ddb9-46a9-ec39-c2b81417b6c0", - "description": - "[Standard Relayer API](\nhttps://github.com/0xProject/standard-relayer-api)\n\n\n0x Protocol is an open standard. Because of this, we expect many independent applications to be built that will want to use the protocol. In order to make it easier for anyone to source liquidity that conforms to the 0x order format, relayers can opt-in to implementing a set of standard relayer API endpoints. In doing so, they allow clients of the standard relayer API to access the orders on their orderbook.", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" - }, - "item": [ - { - "name": "GET /token_pairs", - "description": "", - "item": [ - { - "name": "default request", - "event": [ - { - "listen": "test", - "script": { - "id": "42cb5e3f-6013-4a7c-b341-0d10cb3f2c9c", - "type": "text/javascript", - "exec": [""] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/token_pairs", - "host": ["{{url}}"], - "path": ["token_pairs"] - }, - "description": "" - }, - "response": [] - }, - { - "name": "tokenA param", - "event": [ - { - "listen": "test", - "script": { - "id": "0b0712ff-7846-40a3-9253-4bca2551350c", - "type": "text/javascript", - "exec": [ - "const filterTokenEnvKey = 'tokenContractAddress1';", - "const filterTokenAddress = pm.environment.get(filterTokenEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Token pairs are properly filtered', function() {", - " _.forEach(responseJsonData, function(tokenPair) {", - " const tokenAIsFilterToken = _.get(tokenPair, 'tokenA.address') === filterTokenAddress;", - " const tokenBIsFilterToken = _.get(tokenPair, 'tokenB.address') === filterTokenAddress;", - " const condition = tokenAIsFilterToken || tokenBIsFilterToken", - " pm.expect(condition).to.be.true;", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/token_pairs?tokenA={{tokenContractAddress1}}", - "host": ["{{url}}"], - "path": ["token_pairs"], - "query": [ - { - "key": "tokenA", - "value": "{{tokenContractAddress1}}", - "equals": true - } - ] - }, - "description": "" - }, - "response": [] - }, - { - "name": "tokenB param", - "event": [ - { - "listen": "test", - "script": { - "id": "ef0e6be8-06d8-4975-a1c4-2199bc8b5aa6", - "type": "text/javascript", - "exec": [ - "const filterTokenEnvKey = 'tokenContractAddress1';", - "const filterTokenAddress = pm.environment.get(filterTokenEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Token pairs are properly filtered', function() {", - " _.forEach(responseJsonData, function(tokenPair) {", - " const tokenAIsFilterToken = _.get(tokenPair, 'tokenA.address') === filterTokenAddress;", - " const tokenBIsFilterToken = _.get(tokenPair, 'tokenB.address') === filterTokenAddress;", - " const condition = tokenAIsFilterToken || tokenBIsFilterToken", - " pm.expect(condition).to.be.true;", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/token_pairs?tokenB={{tokenContractAddress1}}", - "host": ["{{url}}"], - "path": ["token_pairs"], - "query": [ - { - "key": "tokenB", - "value": "{{tokenContractAddress1}}", - "equals": true - } - ] - }, - "description": "" - }, - "response": [] - }, - { - "name": "tokenA and tokenB params", - "event": [ - { - "listen": "test", - "script": { - "id": "9ca4bed3-b8e0-4a90-96ba-42f0da3a7d68", - "type": "text/javascript", - "exec": [ - "const filterTokenAEnvKey = 'tokenContractAddress1';", - "const filterTokenBEnvKey = 'tokenContractAddress2';", - "const filterTokenAAddress = pm.environment.get(filterTokenAEnvKey);", - "const filterTokenBAddress = pm.environment.get(filterTokenBEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Token pairs are properly filtered', function() {", - " _.forEach(responseJsonData, function(tokenPair) {", - " const tokenAIsFilterTokenA = _.get(tokenPair, 'tokenA.address') === filterTokenAAddress;", - " const tokenAIsFilterTokenB = _.get(tokenPair, 'tokenA.address') === filterTokenBAddress;", - " const tokenBIsFilterTokenA = _.get(tokenPair, 'tokenB.address') === filterTokenAAddress;", - " const tokenBIsFilterTokenB = _.get(tokenPair, 'tokenB.address') === filterTokenBAddress;", - " const condition = (tokenAIsFilterTokenA && tokenBIsFilterTokenB) || (tokenBIsFilterTokenA && tokenAIsFilterTokenB)", - " pm.expect(condition).to.be.true;", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": - "{{url}}/token_pairs?tokenA={{tokenContractAddress1}}&tokenB={{tokenContractAddress2}}", - "host": ["{{url}}"], - "path": ["token_pairs"], - "query": [ - { - "key": "tokenA", - "value": "{{tokenContractAddress1}}", - "equals": true - }, - { - "key": "tokenB", - "value": "{{tokenContractAddress2}}", - "equals": true - } - ] - }, - "description": "" - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "3d032e92-6a17-49f0-8115-bae1c7298b55", - "type": "text/javascript", - "exec": [""] - } - }, - { - "listen": "test", - "script": { - "id": "25addb38-bd1c-4eb3-a193-5617119dc0d6", - "type": "text/javascript", - "exec": [ - "const schema = tv4.getSchema('/RelayerApiTokenPairsResponse');", - "const responseJsonData = pm.response.json();", - "", - "pm.test('Schema is valid', function() {", - " pm.expect(tv4.validate(responseJsonData, schema)).to.be.true;", - "});", - "" - ] - } - } - ] - }, - { - "name": "GET /orders", - "description": "", - "item": [ - { - "name": "default request", - "event": [ - { - "listen": "test", - "script": { - "id": "118f47dd-1d93-4288-841f-de88783eff3b", - "type": "text/javascript", - "exec": [""] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders", - "host": ["{{url}}"], - "path": ["orders"] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "exchangeContract param", - "event": [ - { - "listen": "test", - "script": { - "id": "374c4b28-5672-400c-8c23-9cb1a3e63117", - "type": "text/javascript", - "exec": [ - "const exchangeContractEnvKey = 'exchangeContractAddress';", - "const requestedExchangeContractAddress = pm.environment.get(exchangeContractEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const returnedExchangeContractAddress = _.get(order, 'exchangeContractAddress');", - " pm.expect(requestedExchangeContractAddress).to.equal(returnedExchangeContractAddress);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?exchangeContractAddress={{exchangeContractAddress}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "exchangeContractAddress", - "value": "{{exchangeContractAddress}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "tokenAddress param", - "event": [ - { - "listen": "test", - "script": { - "id": "e74a9069-18b9-42d3-b2d0-e18580ad73f2", - "type": "text/javascript", - "exec": [ - "const filterTokenEnvKey = 'tokenContractAddress2';", - "const filterTokenAddress = pm.environment.get(filterTokenEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const makerTokenAddress = _.get(order, 'makerTokenAddress');", - " const takerTokenAddress = _.get(order, 'takerTokenAddress');", - " const makerTokenAddressIsFilterToken = makerTokenAddress === filterTokenAddress;", - " const takerTokenAddressIsFilterToken = takerTokenAddress === filterTokenAddress;", - " const condition = makerTokenAddressIsFilterToken || takerTokenAddressIsFilterToken;", - " pm.expect(condition).to.be.true;", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?tokenAddress={{tokenContractAddress2}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "tokenAddress", - "value": "{{tokenContractAddress2}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "makerTokenAddress param", - "event": [ - { - "listen": "test", - "script": { - "id": "c539f306-aa03-495d-a90a-0179e1b751aa", - "type": "text/javascript", - "exec": [ - "const filterTokenEnvKey = 'tokenContractAddress2';", - "const filterTokenAddress = pm.environment.get(filterTokenEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const makerTokenAddress = _.get(order, 'makerTokenAddress');", - " pm.expect(makerTokenAddress).to.be.equal(filterTokenAddress);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?makerTokenAddress={{tokenContractAddress2}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "makerTokenAddress", - "value": "{{tokenContractAddress2}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "takerTokenAddress param", - "event": [ - { - "listen": "test", - "script": { - "id": "49b2fcaf-5fe2-471f-ae10-e48a440d4c6d", - "type": "text/javascript", - "exec": [ - "const filterTokenEnvKey = 'tokenContractAddress2';", - "const filterTokenAddress = pm.environment.get(filterTokenEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const takerTokenAddress = _.get(order, 'takerTokenAddress');", - " pm.expect(takerTokenAddress).to.be.equal(filterTokenAddress);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?takerTokenAddress={{tokenContractAddress2}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "takerTokenAddress", - "value": "{{tokenContractAddress2}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "maker param", - "event": [ - { - "listen": "test", - "script": { - "id": "1f5960de-117f-44fb-82e0-581626cbf62b", - "type": "text/javascript", - "exec": [ - "const orderMakerEnvKey = 'orderMaker';", - "const referenceOrderMakerAddress = pm.environment.get(orderMakerEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const returnedMakerAddress = _.get(order, 'maker');", - " pm.expect(referenceOrderMakerAddress).to.be.equal(returnedMakerAddress);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?maker={{orderMaker}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "maker", - "value": "{{orderMaker}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "taker param", - "event": [ - { - "listen": "test", - "script": { - "id": "f23de2eb-b444-49d3-93b7-14ae712d6502", - "type": "text/javascript", - "exec": [ - "const orderTakerEnvKey = 'orderTaker';", - "const referenceOrderTakerAddress = pm.environment.get(orderTakerEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const returnedTakerAddress = _.get(order, 'taker');", - " pm.expect(referenceOrderTakerAddress).to.be.equal(returnedTakerAddress);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?taker={{orderTaker}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "taker", - "value": "{{orderTaker}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "trader param", - "event": [ - { - "listen": "test", - "script": { - "id": "9689639a-47ce-4c3b-8180-859fd28437be", - "type": "text/javascript", - "exec": [ - "const orderTraderEnvKey = 'orderMaker';", - "const referenceOrderTraderAddress = pm.environment.get(orderTraderEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const returnedMakerAddress = _.get(order, 'maker');", - " const returnedTakerAddress = _.get(order, 'taker');", - " const condition = (referenceOrderTraderAddress === returnedMakerAddress) || (referenceOrderTraderAddress === returnedTakerAddress);", - " pm.expect(condition).to.be.true;", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?trader={{orderMaker}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "trader", - "value": "{{orderMaker}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - }, - { - "name": "feeRecipient param", - "event": [ - { - "listen": "test", - "script": { - "id": "010c0cf6-8d5b-4fe3-8b92-b2009ea43a3e", - "type": "text/javascript", - "exec": [ - "const orderFeeRecipientEnvKey = 'orderFeeRecipient';", - "const referenceOrderFeeRecipientAddress = pm.environment.get(orderFeeRecipientEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orders are properly filtered', function() {", - " _.forEach(responseJsonData, function(order) {", - " const returnedFeeRecipientAddress = _.get(order, 'feeRecipient');", - " pm.expect(referenceOrderFeeRecipientAddress).to.be.equal(returnedFeeRecipientAddress);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/orders?feeRecipient={{orderFeeRecipient}}", - "host": ["{{url}}"], - "path": ["orders"], - "query": [ - { - "key": "feeRecipient", - "value": "{{orderFeeRecipient}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4eafcc26-fb01-4182-b963-67a0b418fcbc", - "type": "text/javascript", - "exec": [""] - } - }, - { - "listen": "test", - "script": { - "id": "d28effd1-4a73-4ee8-82cc-21b1ab06928d", - "type": "text/javascript", - "exec": [ - "const schema = tv4.getSchema('/signedOrdersSchema');", - "const responseJsonData = pm.response.json();", - "", - "pm.test('Schema is valid', function() {", - " pm.expect(tv4.validate(responseJsonData, schema)).to.be.true;", - "});", - "" - ] - } - } - ] - }, - { - "name": "GET /order", - "description": "", - "item": [ - { - "name": "orderHash param", - "event": [ - { - "listen": "test", - "script": { - "id": "18876df2-384e-43d5-93a1-7e24571e1308", - "type": "text/javascript", - "exec": [ - "const orderEnvKey = 'order';", - "const referenceOrderString = pm.environment.get(orderEnvKey);", - "const referenceOrderJson = JSON.parse(referenceOrderString);", - "const orderPropertyNames = [", - " 'maker',", - " 'taker',", - " 'makerFee',", - " 'takerFee',", - " 'makerTokenAmount',", - " 'takerTokenAmount',", - " 'makerTokenAddress',", - " 'takerTokenAddress',", - " 'salt',", - " 'feeRecipient',", - " 'expirationUnixTimestampSec',", - " 'exchangeContractAddress'", - "];", - "const signaturePropertyNames = [", - " 'v',", - " 'r',", - " 's'", - "];", - "const returnedOrderJson = pm.response.json();", - "pm.test('Order is properly retreived', function() {", - " _.forEach(orderPropertyNames, function(propertyName) {", - " const returnedProperty = _.get(returnedOrderJson, propertyName);", - " const referenceProperty = _.get(referenceOrderJson, propertyName);", - " pm.expect(returnedProperty).to.be.equal(referenceProperty);", - " });", - " const returnedSignature = _.get(returnedOrderJson, 'ecSignature');", - " const referenceSignature = _.get(returnedOrderJson, 'ecSignature');", - " _.forEach(signaturePropertyNames, function(propertyName) {", - " const returnedSignatureProperty = _.get(returnedSignature, propertyName);", - " const referenceSignatureProperty = _.get(referenceSignature, propertyName);", - " pm.expect(returnedSignatureProperty).to.be.equal(referenceSignatureProperty);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": "{{url}}/order/{{orderHash}}", - "host": ["{{url}}"], - "path": ["order", "{{orderHash}}"] - }, - "description": "Retrieves a specific order by orderHash." - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "e356d2ff-d105-42c1-b679-d9d917dcd68d", - "type": "text/javascript", - "exec": [""] - } - }, - { - "listen": "test", - "script": { - "id": "8d2d4717-6f76-47ab-8e5a-f383192f6ee4", - "type": "text/javascript", - "exec": [ - "const schema = tv4.getSchema('/SignedOrder');", - "const responseJsonData = pm.response.json();", - "", - "pm.test('Schema is valid', function() {", - " pm.expect(tv4.validate(responseJsonData, schema)).to.be.true;", - "});", - "" - ] - } - } - ] - }, - { - "name": "GET /orderbook", - "description": "", - "item": [ - { - "name": "baseTokenAddress and quoteTokenAddress params", - "event": [ - { - "listen": "test", - "script": { - "id": "9ed05327-1a2f-4e50-b4aa-e21f961dbe78", - "type": "text/javascript", - "exec": [ - "const baseTokenEnvKey = 'tokenContractAddress2';", - "const quoteTokenEnvKey = 'tokenContractAddress1';", - "const baseTokenAddress = pm.environment.get(baseTokenEnvKey);", - "const quoteTokenAddress = pm.environment.get(quoteTokenEnvKey);", - "const responseJsonData = pm.response.json();", - "pm.test('Orderbook is properly filtered', function() {", - " const bids = _.get(responseJsonData, 'bids');", - " const asks = _.get(responseJsonData, 'asks');", - " _.forEach(bids, function(order) {", - " const makerTokenAddress = _.get(order, 'makerTokenAddress');", - " const takerTokenAddress = _.get(order, 'takerTokenAddress');", - " pm.expect(makerTokenAddress).to.be.equal(quoteTokenAddress);", - " pm.expect(takerTokenAddress).to.be.equal(baseTokenAddress);", - " });", - " _.forEach(asks, function(order) {", - " const makerTokenAddress = _.get(order, 'makerTokenAddress');", - " const takerTokenAddress = _.get(order, 'takerTokenAddress');", - " pm.expect(makerTokenAddress).to.be.equal(baseTokenAddress);", - " pm.expect(takerTokenAddress).to.be.equal(quoteTokenAddress);", - " });", - "});", - "" - ] - } - } - ], - "request": { - "method": "GET", - "header": [], - "body": {}, - "url": { - "raw": - "{{url}}/orderbook?baseTokenAddress={{tokenContractAddress2}}"eTokenAddress={{tokenContractAddress1}}", - "host": ["{{url}}"], - "path": ["orderbook"], - "query": [ - { - "key": "baseTokenAddress", - "value": "{{tokenContractAddress2}}", - "equals": true - }, - { - "key": "quoteTokenAddress", - "value": "{{tokenContractAddress1}}", - "equals": true - } - ] - }, - "description": - "Retrieves a list of orders given query parameters. For querying an entire orderbook snapshot, the orderbook endpoint is recommended.\n\nParameters\n * exchangeContractAddress [string]: returns orders created for this exchange address\n * tokenAddress [string]: returns orders where makerTokenAddress or takerTokenAddress is token address\n * makerTokenAddress [string]: returns orders with specified makerTokenAddress\n * takerTokenAddress [string]: returns orders with specified makerTokenAddress\n * maker [string]: returns orders where maker is maker address\n * taker [string]: returns orders where taker is taker address\n * trader [string]: returns orders where maker or taker is trader address\n * feeRecipient [string]: returns orders where feeRecipient is feeRecipient address\n\nAll parameters are optional." - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "bdf90dbc-9217-4089-8bc0-351baadddd3e", - "type": "text/javascript", - "exec": [""] - } - }, - { - "listen": "test", - "script": { - "id": "d5080a34-57c4-4d5d-8e01-5e79599282ec", - "type": "text/javascript", - "exec": [ - "const schema = tv4.getSchema('/RelayerApiOrderBookResponse');", - "const responseJsonData = pm.response.json();", - "", - "pm.test('Schema is valid', function() {", - " pm.expect(tv4.validate(responseJsonData, schema)).to.be.true;", - "});", - "" - ] - } - } - ] - }, - { - "name": "POST /fees", - "description": "", - "item": [ - { - "name": "default request", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": - "{\n \"exchangeContractAddress\": \"0x12459c951127e0c374ff9105dda097662a027093\",\n \"maker\": \"0x9e56625509c2f60af937f23b7b532600390e8c8b\",\n \"taker\": \"0x0000000000000000000000000000000000000000\",\n \"makerTokenAddress\": \"0x323b5d4c32345ced77393b3530b1eed0f346429d\",\n \"takerTokenAddress\": \"0xef7fff64389b814a946f3e92105513705ca6b990\",\n \"makerTokenAmount\": \"10000000000000000\",\n \"takerTokenAmount\": \"20000000000000000\",\n \"expirationUnixTimestampSec\": \"42\",\n \"salt\": \"67006738228878699843088602623665307406148487219438534730168799356281242528500\"\n}" - }, - "url": { - "raw": "{{url}}/fees", - "host": ["{{url}}"], - "path": ["fees"] - }, - "description": - "Given an unsigned order without the fee-related properties, returns the required feeRecipient, makerFee, and takerFee of that order." - }, - "response": [] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "75d66506-0fa9-4b0e-982b-ef53bf3310f8", - "type": "text/javascript", - "exec": [""] - } - }, - { - "listen": "test", - "script": { - "id": "4c5f9f7b-8635-4bdb-9240-a74754a2de4f", - "type": "text/javascript", - "exec": [ - "const schema = tv4.getSchema('/RelayerApiFeesResponse');", - "const responseJsonData = pm.response.json();", - "", - "pm.test('Schema is valid', function() {", - " pm.expect(tv4.validate(responseJsonData, schema)).to.be.true;", - "});", - "" - ] - } - } - ] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "da60f639-df79-4f4d-9861-79219f5fc341", - "type": "text/javascript", - "exec": [ - "const schemaKeysString = pm.environment.get('schemaKeys');", - "const schemaKeys = JSON.parse(schemaKeysString);", - "_.forEach(schemaKeys, function(schemaKey) {", - " const schemaString = pm.environment.get(schemaKey);", - " const schema = JSON.parse(schemaString);", - " tv4.addSchema(schema);", - "});", - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "b4917e72-ac87-421d-b7a5-21b64285ba5b", - "type": "text/javascript", - "exec": [ - "pm.test('Has Content-Type header with value application/json', function () {", - " pm.response.to.have.header('Content-Type');", - " const contentType = postman.getResponseHeader('Content-Type');", - " pm.expect(contentType).to.include('application/json');", - "});", - "" - ] - } - } - ] -} diff --git a/packages/sra-report/src/contract_addresses/kovan_addresses.ts b/packages/sra-report/src/contract_addresses/kovan_addresses.ts deleted file mode 100644 index e06568f52..000000000 --- a/packages/sra-report/src/contract_addresses/kovan_addresses.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const addresses = { - WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', - ZRX: '0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570', - EXCHANGE: '0x90fe2af704b34e0224bf2299c838e04d4dcf1364', -}; diff --git a/packages/sra-report/src/contract_addresses/mainnet_addresses.ts b/packages/sra-report/src/contract_addresses/mainnet_addresses.ts deleted file mode 100644 index e9aa0f167..000000000 --- a/packages/sra-report/src/contract_addresses/mainnet_addresses.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const addresses = { - WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498', - EXCHANGE: '0x12459c951127e0c374ff9105dda097662a027093', -}; diff --git a/packages/sra-report/src/contract_addresses/rinkeby_addresses.ts b/packages/sra-report/src/contract_addresses/rinkeby_addresses.ts deleted file mode 100644 index b1e0848d0..000000000 --- a/packages/sra-report/src/contract_addresses/rinkeby_addresses.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const addresses = { - WETH: '0xc778417e063141139fce010982780140aa0cd5ab', - ZRX: '0x00f58d6d585f84b2d7267940cede30ce2fe6eae8', - EXCHANGE: '0x1d16ef40fac01cec8adac2ac49427b9384192c05', -}; diff --git a/packages/sra-report/src/contract_addresses/ropsten_addresses.ts b/packages/sra-report/src/contract_addresses/ropsten_addresses.ts deleted file mode 100644 index 80e6e5e7e..000000000 --- a/packages/sra-report/src/contract_addresses/ropsten_addresses.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const addresses = { - WETH: '0xc778417e063141139fce010982780140aa0cd5ab', - ZRX: '0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d', - EXCHANGE: '0x479cc461fecd078f766ecc58533d6f69580cf3ac', -}; diff --git a/packages/sra-report/src/globals.d.ts b/packages/sra-report/src/globals.d.ts deleted file mode 100644 index 783b92913..000000000 --- a/packages/sra-report/src/globals.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.json' { - const value: any; - export default value; -} diff --git a/packages/sra-report/src/index.ts b/packages/sra-report/src/index.ts deleted file mode 100644 index b23b6c8d2..000000000 --- a/packages/sra-report/src/index.ts +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env node -import { assert } from '@0xproject/assert'; -import { logUtils } from '@0xproject/utils'; -import chalk from 'chalk'; -import * as _ from 'lodash'; -import * as yargs from 'yargs'; - -import * as sraReportCollectionJSON from '../../postman_collections/sra_report.postman_collection.json'; - -import { postmanEnvironmentFactory } from './postman_environment_factory'; -import { utils } from './utils'; - -const DEFAULT_NETWORK_ID = 1; -const networkNameToId: { [networkName: string]: number } = { - mainnet: 1, - ropsten: 3, - rinkeby: 4, - kovan: 42, -}; -const SUPPORTED_NETWORK_IDS = [ - networkNameToId.mainnet, - networkNameToId.ropsten, - networkNameToId.rinkeby, - networkNameToId.kovan, -]; - -// extract command line arguments -const args = yargs - .option('endpoint-url', { - alias: ['e'], - describe: 'API endpoint url to test for standard relayer API compliance', - type: 'string', - demandOption: true, - }) - .option('output', { - alias: ['o', 'out'], - describe: 'The relative path to write the report generated by the collection run, prints to console by default', - type: 'string', - normalize: true, - demandOption: false, - }) - .option('network-id', { - alias: ['n'], - describe: 'ID of the network that the API is serving orders from', - type: 'number', - default: DEFAULT_NETWORK_ID, - }) - .option('environment', { - alias: ['env'], - describe: 'The relative path to a postman environment file for the collection run', - type: 'string', - normalize: true, - demandOption: false, - }) - .option('export-collection', { - alias: ['ec'], - describe: 'The relative path to write the postman collection file used by the collection run', - type: 'string', - normalize: true, - demandOption: false, - }) - .option('export-environment', { - alias: ['ee'], - describe: 'The relative path to write the postman environment file used by the collection run', - type: 'string', - normalize: true, - demandOption: false, - }) - .example( - "$0 --endpoint-url 'http://api.example.com' --out 'path/to/report.json' --network-id 42 --environment 'path/to/custom/environment.json' --export-collection 'path/to/collection.json' --export-environment 'path/to/environment.json'", - 'Full usage example', - ).argv; -// perform extra validation on command line arguments -try { - assert.isWebUri('args', args.endpointUrl); -} catch (err) { - logUtils.log(`${chalk.red(`Invalid url format:`)} ${args.endpointUrl}`); - process.exit(1); -} -if (!_.includes(SUPPORTED_NETWORK_IDS, args.networkId)) { - logUtils.log(`${chalk.red(`Unsupported network id:`)} ${args.networkId}`); - logUtils.log(`${chalk.bold(`Supported network ids:`)} ${SUPPORTED_NETWORK_IDS}`); - process.exit(1); -} -const mainAsync = async () => { - const newmanReporterOptions = !_.isUndefined(args.output) - ? { - reporters: 'json', - reporter: { - json: { - export: args.output, - }, - }, - } - : { - reporters: 'cli', - }; - const environment = !_.isUndefined(args.environment) - ? args.environment - : await postmanEnvironmentFactory.createPostmanEnvironmentAsync(args.endpointUrl, args.networkId); - const newmanRunOptions = { - collection: sraReportCollectionJSON, - environment, - exportCollection: args.exportCollection, - exportEnvironment: args.exportEnvironment, - ...newmanReporterOptions, - }; - await utils.newmanRunAsync(newmanRunOptions); -}; - -mainAsync().catch(logUtils.log.bind(logUtils)); diff --git a/packages/sra-report/src/postman_environment_factory.ts b/packages/sra-report/src/postman_environment_factory.ts deleted file mode 100644 index 3dcb97829..000000000 --- a/packages/sra-report/src/postman_environment_factory.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { HttpClient } from '@0xproject/connect'; -import { Schema, schemas as schemasByName } from '@0xproject/json-schemas'; -import { getOrderHashHex } from '@0xproject/order-utils'; -import { logUtils } from '@0xproject/utils'; -import chalk from 'chalk'; -import * as _ from 'lodash'; - -import { addresses as kovanAddresses } from './contract_addresses/kovan_addresses'; -import { addresses as mainnetAddresses } from './contract_addresses/mainnet_addresses'; -import { addresses as rinkebyAddresses } from './contract_addresses/rinkeby_addresses'; -import { addresses as ropstenAddresses } from './contract_addresses/ropsten_addresses'; - -const ENVIRONMENT_NAME = 'SRA Report'; -const networkNameToId: { [networkName: string]: number } = { - mainnet: 1, - ropsten: 3, - rinkeby: 4, - kovan: 42, -}; - -export interface EnvironmentValue { - key: string; - value: string; - enabled: true; - type: 'text'; -} - -export interface Environment { - name: string; - values: EnvironmentValue[]; -} - -export interface Addresses { - WETH: string; - ZRX: string; - EXCHANGE: string; -} - -export const postmanEnvironmentFactory = { - /** - * Dynamically generates a postman environment (https://www.getpostman.com/docs/v6/postman/environments_and_globals/manage_environments) - * When running the postman collection via newman, we provide it a set of environment variables - * These variables include: - * - 0x JSON schemas for response body validation - * - Contract addresses based on the network id for making specific queries (ex. baseTokenAddress=ZRX_address) - * - Order properties for making specific queries (ex. maker=orderMaker) - */ - async createPostmanEnvironmentAsync(url: string, networkId: number): Promise<Environment> { - const orderEnvironmentValues = await createOrderEnvironmentValuesAsync(url); - const allEnvironmentValues = _.concat( - createSchemaEnvironmentValues(), - createContractAddressEnvironmentValues(networkId), - orderEnvironmentValues, - createEnvironmentValue('url', url), - ); - const environment = { - name: ENVIRONMENT_NAME, - values: allEnvironmentValues, - }; - return environment; - }, -}; -function createSchemaEnvironmentValues(): EnvironmentValue[] { - const schemas: Schema[] = _.values(schemasByName); - const schemaEnvironmentValues = _.compact( - _.map(schemas, (schema: Schema) => { - if (_.isUndefined(schema.id)) { - return undefined; - } else { - const schemaKey = convertSchemaIdToKey(schema.id); - const stringifiedSchema = JSON.stringify(schema); - const schemaEnvironmentValue = createEnvironmentValue(schemaKey, stringifiedSchema); - return schemaEnvironmentValue; - } - }), - ); - const schemaKeys = _.map(schemaEnvironmentValues, (environmentValue: EnvironmentValue) => { - return environmentValue.key; - }); - const result = _.concat(schemaEnvironmentValues, createEnvironmentValue('schemaKeys', JSON.stringify(schemaKeys))); - return result; -} -function createContractAddressEnvironmentValues(networkId: number): EnvironmentValue[] { - const contractAddresses = getContractAddresses(networkId); - return [ - createEnvironmentValue('tokenContractAddress1', contractAddresses.WETH), - createEnvironmentValue('tokenContractAddress2', contractAddresses.ZRX), - createEnvironmentValue('exchangeContractAddress', contractAddresses.EXCHANGE), - ]; -} -async function createOrderEnvironmentValuesAsync(url: string): Promise<EnvironmentValue[]> { - const httpClient = new HttpClient(url); - const orders = await httpClient.getOrdersAsync(); - const orderIfExists = _.head(orders); - if (!_.isUndefined(orderIfExists)) { - return [ - createEnvironmentValue('order', JSON.stringify(orderIfExists)), - createEnvironmentValue('orderMaker', orderIfExists.maker), - createEnvironmentValue('orderTaker', orderIfExists.taker), - createEnvironmentValue('orderFeeRecipient', orderIfExists.feeRecipient), - createEnvironmentValue('orderHash', getOrderHashHex(orderIfExists)), - ]; - } else { - logUtils.log(`${chalk.red(`No orders from /orders found`)}`); - return [ - createEnvironmentValue('order', ''), - createEnvironmentValue('orderMaker', ''), - createEnvironmentValue('orderTaker', ''), - createEnvironmentValue('orderFeeRecipient', ''), - createEnvironmentValue('orderHash', ''), - ]; - } -} -function getContractAddresses(networkId: number): Addresses { - switch (networkId) { - case networkNameToId.mainnet: - return mainnetAddresses; - case networkNameToId.ropsten: - return ropstenAddresses; - case networkNameToId.rinkeby: - return rinkebyAddresses; - case networkNameToId.kovan: - return kovanAddresses; - default: - throw new Error('Unsupported network id'); - } -} -function convertSchemaIdToKey(schemaId: string): string { - let result = schemaId; - if (_.startsWith(result, '/')) { - result = result.substr(1); - } - result = `${result}Schema`; - return result; -} - -function createEnvironmentValue(key: string, value: string): EnvironmentValue { - return { - key, - value, - enabled: true, - type: 'text', - }; -} diff --git a/packages/sra-report/src/utils.ts b/packages/sra-report/src/utils.ts deleted file mode 100644 index 3a83a7ea0..000000000 --- a/packages/sra-report/src/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { promisify } from '@0xproject/utils'; -import { NewmanRunSummary, run as newmanRun } from 'newman'; - -export const utils = { - newmanRunAsync: promisify<NewmanRunSummary>(newmanRun), -}; diff --git a/packages/sra-report/test/environments/postman_environment.json b/packages/sra-report/test/environments/postman_environment.json deleted file mode 100644 index e26a47e5f..000000000 --- a/packages/sra-report/test/environments/postman_environment.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "id": "f23e415f-99a8-4d47-8796-6400af77d85f", - "name": "SRA Report", - "values": [ - { - "type": "any", - "value": "{\"id\":\"/Number\",\"type\":\"string\",\"pattern\":\"^\\\\d+(\\\\.\\\\d+)?$\"}", - "key": "NumberSchema" - }, - { - "type": "any", - "value": "{\"id\":\"/Address\",\"type\":\"string\",\"pattern\":\"^0x[0-9a-f]{40}$\"}", - "key": "AddressSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/ECSignature\",\"properties\":{\"v\":{\"type\":\"number\",\"minimum\":27,\"maximum\":28},\"r\":{\"$ref\":\"/ECSignatureParameter\"},\"s\":{\"$ref\":\"/ECSignatureParameter\"}},\"required\":[\"v\",\"r\",\"s\"],\"type\":\"object\"}", - "key": "ECSignatureSchema" - }, - { - "type": "any", - "value": "{\"id\":\"/ECSignatureParameter\",\"type\":\"string\",\"pattern\":\"^0[xX][0-9A-Fa-f]{64}$\"}", - "key": "ECSignatureParameterSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/IndexFilterValues\",\"additionalProperties\":{\"oneOf\":[{\"$ref\":\"/Number\"},{\"$ref\":\"/Address\"},{\"$ref\":\"/OrderHashSchema\"}]},\"type\":\"object\"}", - "key": "IndexFilterValuesSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/OrderCancellationRequests\",\"type\":\"array\",\"items\":{\"properties\":{\"order\":{\"$ref\":\"/Order\"},\"takerTokenCancelAmount\":{\"$ref\":\"/Number\"}},\"required\":[\"order\",\"takerTokenCancelAmount\"],\"type\":\"object\"}}", - "key": "OrderCancellationRequestsSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/OrderFillOrKillRequests\",\"type\":\"array\",\"items\":{\"properties\":{\"signedOrder\":{\"$ref\":\"/SignedOrder\"},\"fillTakerAmount\":{\"$ref\":\"/Number\"}},\"required\":[\"signedOrder\",\"fillTakerAmount\"],\"type\":\"object\"}}", - "key": "OrderFillOrKillRequestsSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/OrderFillRequests\",\"type\":\"array\",\"items\":{\"properties\":{\"signedOrder\":{\"$ref\":\"/SignedOrder\"},\"takerTokenFillAmount\":{\"$ref\":\"/Number\"}},\"required\":[\"signedOrder\",\"takerTokenFillAmount\"],\"type\":\"object\"}}", - "key": "OrderFillRequestsSchema" - }, - { - "type": "any", - "value": "{\"id\":\"/OrderHashSchema\",\"type\":\"string\",\"pattern\":\"^0x[0-9a-fA-F]{64}$\"}", - "key": "OrderHashSchemaSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/Order\",\"properties\":{\"maker\":{\"$ref\":\"/Address\"},\"taker\":{\"$ref\":\"/Address\"},\"makerFee\":{\"$ref\":\"/Number\"},\"takerFee\":{\"$ref\":\"/Number\"},\"makerTokenAmount\":{\"$ref\":\"/Number\"},\"takerTokenAmount\":{\"$ref\":\"/Number\"},\"makerTokenAddress\":{\"$ref\":\"/Address\"},\"takerTokenAddress\":{\"$ref\":\"/Address\"},\"salt\":{\"$ref\":\"/Number\"},\"feeRecipient\":{\"$ref\":\"/Address\"},\"expirationUnixTimestampSec\":{\"$ref\":\"/Number\"},\"exchangeContractAddress\":{\"$ref\":\"/Address\"}},\"required\":[\"maker\",\"taker\",\"makerFee\",\"takerFee\",\"makerTokenAmount\",\"takerTokenAmount\",\"salt\",\"feeRecipient\",\"expirationUnixTimestampSec\",\"exchangeContractAddress\"],\"type\":\"object\"}", - "key": "OrderSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/SignedOrder\",\"allOf\":[{\"$ref\":\"/Order\"},{\"properties\":{\"ecSignature\":{\"$ref\":\"/ECSignature\"}},\"required\":[\"ecSignature\"]}]}", - "key": "SignedOrderSchema" - }, - { - "type": "any", - "value": "{\"id\":\"/signedOrdersSchema\",\"type\":\"array\",\"items\":{\"$ref\":\"/SignedOrder\"}}", - "key": "signedOrdersSchemaSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/BlockParam\",\"oneOf\":[{\"type\":\"number\"},{\"enum\":[\"latest\",\"earliest\",\"pending\"]}]}", - "key": "BlockParamSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/BlockRange\",\"properties\":{\"fromBlock\":{\"$ref\":\"/BlockParam\"},\"toBlock\":{\"$ref\":\"/BlockParam\"}},\"type\":\"object\"}", - "key": "BlockRangeSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/Token\",\"properties\":{\"name\":{\"type\":\"string\"},\"symbol\":{\"type\":\"string\"},\"decimals\":{\"type\":\"number\"},\"address\":{\"$ref\":\"/Address\"}},\"required\":[\"name\",\"symbol\",\"decimals\",\"address\"],\"type\":\"object\"}", - "key": "TokenSchema" - }, - { - "type": "any", - "value": "{\"id\":\"/JsNumber\",\"type\":\"number\",\"minimum\":0}", - "key": "JsNumberSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/TxData\",\"properties\":{\"from\":{\"$ref\":\"/Address\"},\"to\":{\"$ref\":\"/Address\"},\"value\":{\"oneOf\":[{\"$ref\":\"/Number\"},{\"$ref\":\"/JsNumber\"}]},\"gas\":{\"oneOf\":[{\"$ref\":\"/Number\"},{\"$ref\":\"/JsNumber\"}]},\"gasPrice\":{\"oneOf\":[{\"$ref\":\"/Number\"},{\"$ref\":\"/JsNumber\"}]},\"data\":{\"type\":\"string\",\"pattern\":\"^0x[0-9a-f]*$\"},\"nonce\":{\"type\":\"number\",\"minimum\":0}},\"required\":[\"from\"],\"type\":\"object\",\"additionalProperties\":false}", - "key": "TxDataSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiErrorResponse\",\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"reason\":{\"type\":\"string\"},\"validationErrors\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"field\":{\"type\":\"string\"},\"code\":{\"type\":\"number\"},\"reason\":{\"type\":\"string\"}},\"required\":[\"field\",\"code\",\"reason\"]}}},\"required\":[\"code\",\"reason\"]}", - "key": "RelayerApiErrorResponseSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiFeesPayload\",\"type\":\"object\",\"properties\":{\"exchangeContractAddress\":{\"$ref\":\"/Address\"},\"maker\":{\"$ref\":\"/Address\"},\"taker\":{\"$ref\":\"/Address\"},\"makerTokenAddress\":{\"$ref\":\"/Address\"},\"takerTokenAddress\":{\"$ref\":\"/Address\"},\"makerTokenAmount\":{\"$ref\":\"/Number\"},\"takerTokenAmount\":{\"$ref\":\"/Number\"},\"expirationUnixTimestampSec\":{\"$ref\":\"/Number\"},\"salt\":{\"$ref\":\"/Number\"}},\"required\":[\"exchangeContractAddress\",\"maker\",\"taker\",\"makerTokenAddress\",\"takerTokenAddress\",\"expirationUnixTimestampSec\",\"salt\"]}", - "key": "RelayerApiFeesPayloadSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiFeesResponse\",\"type\":\"object\",\"properties\":{\"makerFee\":{\"$ref\":\"/Number\"},\"takerFee\":{\"$ref\":\"/Number\"},\"feeRecipient\":{\"$ref\":\"/Address\"}},\"required\":[\"makerFee\",\"takerFee\",\"feeRecipient\"]}", - "key": "RelayerApiFeesResponseSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiOrderBookResponse\",\"type\":\"object\",\"properties\":{\"bids\":{\"$ref\":\"/signedOrdersSchema\"},\"asks\":{\"$ref\":\"/signedOrdersSchema\"}},\"required\":[\"bids\",\"asks\"]}", - "key": "RelayerApiOrderBookResponseSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiTokenPairsResponse\",\"type\":\"array\",\"items\":{\"properties\":{\"tokenA\":{\"$ref\":\"/RelayerApiTokenTradeInfo\"},\"tokenB\":{\"$ref\":\"/RelayerApiTokenTradeInfo\"}},\"required\":[\"tokenA\",\"tokenB\"],\"type\":\"object\"}}", - "key": "RelayerApiTokenPairsResponseSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiTokenTradeInfo\",\"type\":\"object\",\"properties\":{\"address\":{\"$ref\":\"/Address\"},\"minAmount\":{\"$ref\":\"/Number\"},\"maxAmount\":{\"$ref\":\"/Number\"},\"precision\":{\"type\":\"number\"}},\"required\":[\"address\"]}", - "key": "RelayerApiTokenTradeInfoSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiOrderbookChannelSubscribe\",\"type\":\"object\",\"properties\":{\"type\":{\"enum\":[\"subscribe\"]},\"channel\":{\"enum\":[\"orderbook\"]},\"requestId\":{\"type\":\"number\"},\"payload\":{\"$ref\":\"/RelayerApiOrderbookChannelSubscribePayload\"}},\"required\":[\"type\",\"channel\",\"requestId\",\"payload\"]}", - "key": "RelayerApiOrderbookChannelSubscribeSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiOrderbookChannelSubscribePayload\",\"type\":\"object\",\"properties\":{\"baseTokenAddress\":{\"$ref\":\"/Address\"},\"quoteTokenAddress\":{\"$ref\":\"/Address\"},\"snapshot\":{\"type\":\"boolean\"},\"limit\":{\"type\":\"number\"}},\"required\":[\"baseTokenAddress\",\"quoteTokenAddress\"]}", - "key": "RelayerApiOrderbookChannelSubscribePayloadSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiOrderbookChannelUpdate\",\"type\":\"object\",\"properties\":{\"type\":{\"enum\":[\"update\"]},\"channel\":{\"enum\":[\"orderbook\"]},\"requestId\":{\"type\":\"number\"},\"payload\":{\"$ref\":\"/SignedOrder\"}},\"required\":[\"type\",\"channel\",\"requestId\",\"payload\"]}", - "key": "RelayerApiOrderbookChannelUpdateSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiOrderbookChannelSnapshot\",\"type\":\"object\",\"properties\":{\"type\":{\"enum\":[\"snapshot\"]},\"channel\":{\"enum\":[\"orderbook\"]},\"requestId\":{\"type\":\"number\"},\"payload\":{\"$ref\":\"/RelayerApiOrderbookChannelSnapshotPayload\"}},\"required\":[\"type\",\"channel\",\"requestId\",\"payload\"]}", - "key": "RelayerApiOrderbookChannelSnapshotSchema" - }, - { - "type": "any", - "value": - "{\"id\":\"/RelayerApiOrderbookChannelSnapshotPayload\",\"type\":\"object\",\"properties\":{\"bids\":{\"$ref\":\"/signedOrdersSchema\"},\"asks\":{\"$ref\":\"/signedOrdersSchema\"}},\"required\":[\"bids\",\"asks\"]}", - "key": "RelayerApiOrderbookChannelSnapshotPayloadSchema" - }, - { - "type": "any", - "value": - "[\"NumberSchema\",\"AddressSchema\",\"ECSignatureSchema\",\"ECSignatureParameterSchema\",\"IndexFilterValuesSchema\",\"OrderCancellationRequestsSchema\",\"OrderFillOrKillRequestsSchema\",\"OrderFillRequestsSchema\",\"OrderHashSchemaSchema\",\"OrderSchema\",\"SignedOrderSchema\",\"signedOrdersSchemaSchema\",\"BlockParamSchema\",\"BlockRangeSchema\",\"TokenSchema\",\"JsNumberSchema\",\"TxDataSchema\",\"RelayerApiErrorResponseSchema\",\"RelayerApiFeesPayloadSchema\",\"RelayerApiFeesResponseSchema\",\"RelayerApiOrderBookResponseSchema\",\"RelayerApiTokenPairsResponseSchema\",\"RelayerApiTokenTradeInfoSchema\",\"RelayerApiOrderbookChannelSubscribeSchema\",\"RelayerApiOrderbookChannelSubscribePayloadSchema\",\"RelayerApiOrderbookChannelUpdateSchema\",\"RelayerApiOrderbookChannelSnapshotSchema\",\"RelayerApiOrderbookChannelSnapshotPayloadSchema\"]", - "key": "schemaKeys" - }, - { - "type": "any", - "value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "key": "tokenContractAddress1" - }, - { - "type": "any", - "value": "0xe41d2489571d322189246dafa5ebde1f4699f498", - "key": "tokenContractAddress2" - }, - { - "type": "any", - "value": "0x12459c951127e0c374ff9105dda097662a027093", - "key": "exchangeContractAddress" - }, - { - "type": "any", - "value": - "{\"orderHash\":\"0xe91e990bab4c9c6bd60ff3673222390e3da8b7bd9a50eab98a8cb20723b24ee1\",\"exchangeContractAddress\":\"0x12459c951127e0c374ff9105dda097662a027093\",\"maker\":\"0x93690d55b14d701c259ba7960395c095aa52c3a8\",\"taker\":\"0x0000000000000000000000000000000000000000\",\"makerTokenAddress\":\"0x2956356cd2a2bf3202f771f50d3d14a367b48070\",\"takerTokenAddress\":\"0x0abdace70d3790235af448c88547603b945604ea\",\"feeRecipient\":\"0xa258b39954cef5cb142fd567a46cddb31a670124\",\"makerTokenAmount\":\"2926675830000000000\",\"takerTokenAmount\":\"24386933000000000000000\",\"makerFee\":\"18419638100000000000\",\"takerFee\":\"35812978500000000000\",\"expirationUnixTimestampSec\":\"9223372036854775807\",\"salt\":\"89583415499996246176114840147523733506098603782358761236056286417408784066968\",\"ecSignature\":{\"r\":\"0x32eb5bbf713210274ddd885e6b555699bc0189676ff73a4dc98c4cac41d3a6a6\",\"s\":\"0x193eb9440df49dc7817b6142c0be021cd1f9fc0916d86c7b49e9e07a402f3645\",\"v\":28}}", - "key": "order" - }, - { - "type": "any", - "value": "0x93690d55b14d701c259ba7960395c095aa52c3a8", - "key": "orderMaker" - }, - { - "type": "any", - "value": "0x0000000000000000000000000000000000000000", - "key": "orderTaker" - }, - { - "type": "any", - "value": "0xa258b39954cef5cb142fd567a46cddb31a670124", - "key": "orderFeeRecipient" - }, - { - "type": "any", - "value": "0xe91e990bab4c9c6bd60ff3673222390e3da8b7bd9a50eab98a8cb20723b24ee1", - "key": "orderHash" - }, - { - "type": "any", - "value": "https://example.com", - "key": "url" - } - ], - "_postman_variable_scope": "environment", - "_postman_exported_at": "2018-03-10T23:53:03.913Z", - "_postman_exported_using": "Newman/3.9.3" -} diff --git a/packages/sra-report/test/fixtures/v0/token_pairs/default_request.json b/packages/sra-report/test/fixtures/v0/token_pairs/default_request.json deleted file mode 100644 index cd19be1e1..000000000 --- a/packages/sra-report/test/fixtures/v0/token_pairs/default_request.json +++ /dev/null @@ -1,3698 +0,0 @@ -[ - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x01b3ec4aae1b8729529beb4965f27d008788b0eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0371a82e4a9d0a4312f3ee2ac9c6958512891372", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x076c97e1c869072ee22f8c91978c99b4bcb02591", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x09d8b66c48424324b25754a873e290cae5dca439", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0abdace70d3790235af448c88547603b945604ea", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0cf0ee63788a0849fe5297f3407f701e122cc023", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0d8775f648430679a709e98d2b0cb6250d2887ef", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0f513ffb4926ff82d7f60a05069047aca295c413", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0f5d2fb29fb7d3cfee444a200298f468908cc942", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1063ce524265d5a3a624f4914acd573dd89ce988", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x106aa49295b525fcf959aa75ec3f7dcbf5352f1c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x107c4504cd79c5d2696ea0030a8dd4e92601b82e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1183f92a5624d68e85ffb9170f16bf0443b4c242", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12480e24eb5bec1a9d4369cab6a80cad3c0a377a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x168296bb09e24a88805cb9c33356536b980d3fc5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1776e1f26f98b1a5df9cd347953a26dd3cb46671", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27054b13b1b798b345b591a4d22e6562d47ea75a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27695e09149adc738a978e9a678f99e4c39e9eb9", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27dce1ec4d3f72c3e457cc50354f1f975ddef488", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27f610bf36eca0939093343ac28b1534a721dbb4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x2956356cd2a2bf3202f771f50d3d14a367b48070", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x340d2bde5eb28c1eed91b2f790723e3b160613b7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3597bfd533a99c9aa083587b074434e61eb0a258", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3618516f45cd3c913f81f9987af41077932bc40d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x386467f1f3ddbe832448650418311a479eecfc57", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3883f5e181fccaf8410fa61e12b59bad963fb645", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x399a0e6fbeb3d74c85357439f4c8aed9678a5cbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x39bb259f66e1c59d5abef88375979b4d20d98022", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4156d3342d5c385a87d264f90653733592000581", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x419d0d8bdd9af5e606ae2232ed285aff190e711b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x41e5560054824ea6b0732e656e3ad64e20e94e45", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x42d6622dece394b54999fbd73d108123806f6a18", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x44f588aeeb8c44471439d1270b3603c66a9262f1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4d8fc1453a0f359e99c9675954e656d80d996fbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4df47b4969b2911c966506e3592c41389493953b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4df812f6064def1e5e029f1ca858777cc98d2d81", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x514910771af9ca656af840dff83e8264ecf986ca", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x52a7cb918c11a16958be40cba7e31e32a499a465", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x533ef0984b2faa227acc620c67cce12aa39cd8cd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x554c20b7c486beee439277b4540a434566dc4c02", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x56ba2ee7890461f463f7be02aac3099f6d5811a8", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5732046a883704404f284ce41ffadd5b007fd668", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x595832f8fc6bf59c85c527fec3740a1b7a361269", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5af2be193a6abca9c8817001f45744777db30756", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5b2e4a700dfbc560061e957edec8f6eeeb74a320", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5e3346444010135322268a4630d2ed5f8d09446c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x607f4c5bb672230e8672085532f7e901544a7375", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x614ea929892ea43d3ea2c5e3311b01cc589bad6c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6425c6be902d692ae2db752b3c268afadb099d3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6781a0f84c7e9e846dcb84a9a5bd49333067b104", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6810e776880c02933d47db1b9fc05908e5386b96", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x744d70fdbe2ba4cf95131626614a1763df805b9e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7654915a1b82d6d2d0afc37c52af556ea8983c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7b69b78cc7fee48202c208609ae6d1f78ce42e13", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7d4b8cce0591c9044a22ee543533b72e976e36c3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x80fb784b7ed66730e8b1dbd9820afd29931aab03", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x814964b1bceaf24e26296d031eadf134a2ca4105", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x865e3707a580f9db89304005cddd050ade8873eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x88fcfbc22c6d3dbaa25af478c578978339bde77a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8a854288a5976036a725879164ca3e91d30c6a1b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8ae4bf2c33a8e667de34b54938b0ccd03eb8cc06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8eb24319393716668d768dcec29356ae9cffe285", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8f8221afbb33998d8584a2b05749ba73c37a938a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9214ec02cb71cba0ada6896b8da260736a67ab10", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x960b236a07cf122663c4303350609a66a7b288c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x983f6d60db79ea8ca4eb9968c6aff8cfa04b3c63", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9a005c9a89bd72a4bd27721e7a09a3c11d2b03c4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa5fd1a791c4dfcaacc963d4f73c6ae5824149ea7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa8006c4ca56f24d6836727d106349320db7fef82", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa87c3ec87eb802aad080df0adb331e504d327e5d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xab16e0d25c06cb376259cc18c1de4aca57605589", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xac3211a5025414af2866ff09c23fc18bc97e79b1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xacfa209fb73bf3dd5bbfb1101b9bc999c49062a5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb24754be79281553dc1adc160ddf5cd9b74361a4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb3bd49e28f8f832b8d1e246106991e546c323502", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb45a50545beeab73f38f31e5973768c421805e5e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb4efd85c19999d84251304bda99e90b92300bd93", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb5a5f22694352c15b00323844ad545abb2b11028", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb5c0e43a6330b9eb904ec57ea24d70269ae4652e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb62d18dea74045e822352ce4b3ee77319dc5ff2f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb98d4c97425d9908e66e53a6fdf673acca0be986", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xba2184520a1cc49a6159c57e61e1844e085615b6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xba5f11b16b155792cf3b2e6880e8706859a8aeb6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbdc5bac39dbe132b1e030e898ae3830017d7d969", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbf2179859fc6d5bee9bf9158632dc51678a4100e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc27a2f05fa577a83ba0fdb4c38443c0718356501", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc438b4c0dfbb1593be6dee03bbd1a84bb3aa6213", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc66ea802717bfb9833400264dd12c2bceaa34a6d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc997d07b0bc607b6d1bcb6fb9d4a5579c466c3e5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd2d6158683aee4cc838067727209a0aaf4359de3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd4c435f5b09f855c3317c8524cb1f586e42795fa", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd8912c10681d8b21fd3742244f44658dba12264e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe2e6d4be086c6938b53b22144855eef674281639", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe41d2489571d322189246dafa5ebde1f4699f498", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe94327d07fc17907b4db788e5adf2ed424addff6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea097a2b1db00627b2fa17460ad260c016016977", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea1f346faf023f974eb5adaf088bbcdf02d761f4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea38eaa3c86c8f9b751533ba2e562deb9acded40", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeab43193cf0623073ca89db9b712796356fa7414", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeb2da9fac54284cea731d1f10bb34eecb3c00c14", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeb7c20027172e5d143fb030d50f91cece2d1485d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xef2463099360a085f1f10b076ed72ef625497a06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf433089366899d83a9f26a773d59ec7ecf30355e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf6b55acbbc49f4524aa48d19281a9a77c54de10f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf6cfe53d6febaeea051f400ff5fc14f0cbbdaca1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf7b098298f7c69fc14610bf71d5e02c60792894c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xfec0cf7fe078a500abf15f1284958f22049c2c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x01b3ec4aae1b8729529beb4965f27d008788b0eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0371a82e4a9d0a4312f3ee2ac9c6958512891372", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x076c97e1c869072ee22f8c91978c99b4bcb02591", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x09d8b66c48424324b25754a873e290cae5dca439", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0abdace70d3790235af448c88547603b945604ea", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0cf0ee63788a0849fe5297f3407f701e122cc023", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0d8775f648430679a709e98d2b0cb6250d2887ef", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0f513ffb4926ff82d7f60a05069047aca295c413", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0f5d2fb29fb7d3cfee444a200298f468908cc942", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1063ce524265d5a3a624f4914acd573dd89ce988", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x106aa49295b525fcf959aa75ec3f7dcbf5352f1c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x107c4504cd79c5d2696ea0030a8dd4e92601b82e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1183f92a5624d68e85ffb9170f16bf0443b4c242", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12480e24eb5bec1a9d4369cab6a80cad3c0a377a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x168296bb09e24a88805cb9c33356536b980d3fc5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1776e1f26f98b1a5df9cd347953a26dd3cb46671", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27054b13b1b798b345b591a4d22e6562d47ea75a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27695e09149adc738a978e9a678f99e4c39e9eb9", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27dce1ec4d3f72c3e457cc50354f1f975ddef488", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27f610bf36eca0939093343ac28b1534a721dbb4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x2956356cd2a2bf3202f771f50d3d14a367b48070", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x340d2bde5eb28c1eed91b2f790723e3b160613b7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3597bfd533a99c9aa083587b074434e61eb0a258", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3618516f45cd3c913f81f9987af41077932bc40d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x386467f1f3ddbe832448650418311a479eecfc57", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3883f5e181fccaf8410fa61e12b59bad963fb645", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x399a0e6fbeb3d74c85357439f4c8aed9678a5cbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x39bb259f66e1c59d5abef88375979b4d20d98022", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4156d3342d5c385a87d264f90653733592000581", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x419d0d8bdd9af5e606ae2232ed285aff190e711b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x41e5560054824ea6b0732e656e3ad64e20e94e45", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x42d6622dece394b54999fbd73d108123806f6a18", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x44f588aeeb8c44471439d1270b3603c66a9262f1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4d8fc1453a0f359e99c9675954e656d80d996fbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4df47b4969b2911c966506e3592c41389493953b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4df812f6064def1e5e029f1ca858777cc98d2d81", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x514910771af9ca656af840dff83e8264ecf986ca", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x52a7cb918c11a16958be40cba7e31e32a499a465", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x533ef0984b2faa227acc620c67cce12aa39cd8cd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x554c20b7c486beee439277b4540a434566dc4c02", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x56ba2ee7890461f463f7be02aac3099f6d5811a8", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5732046a883704404f284ce41ffadd5b007fd668", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x595832f8fc6bf59c85c527fec3740a1b7a361269", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5af2be193a6abca9c8817001f45744777db30756", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5b2e4a700dfbc560061e957edec8f6eeeb74a320", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5e3346444010135322268a4630d2ed5f8d09446c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x607f4c5bb672230e8672085532f7e901544a7375", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x614ea929892ea43d3ea2c5e3311b01cc589bad6c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6425c6be902d692ae2db752b3c268afadb099d3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6781a0f84c7e9e846dcb84a9a5bd49333067b104", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6810e776880c02933d47db1b9fc05908e5386b96", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x744d70fdbe2ba4cf95131626614a1763df805b9e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7654915a1b82d6d2d0afc37c52af556ea8983c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7b69b78cc7fee48202c208609ae6d1f78ce42e13", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7d4b8cce0591c9044a22ee543533b72e976e36c3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x80fb784b7ed66730e8b1dbd9820afd29931aab03", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x814964b1bceaf24e26296d031eadf134a2ca4105", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x865e3707a580f9db89304005cddd050ade8873eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x88fcfbc22c6d3dbaa25af478c578978339bde77a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8a854288a5976036a725879164ca3e91d30c6a1b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8ae4bf2c33a8e667de34b54938b0ccd03eb8cc06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8eb24319393716668d768dcec29356ae9cffe285", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8f8221afbb33998d8584a2b05749ba73c37a938a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9214ec02cb71cba0ada6896b8da260736a67ab10", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x960b236a07cf122663c4303350609a66a7b288c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x983f6d60db79ea8ca4eb9968c6aff8cfa04b3c63", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9a005c9a89bd72a4bd27721e7a09a3c11d2b03c4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa5fd1a791c4dfcaacc963d4f73c6ae5824149ea7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa8006c4ca56f24d6836727d106349320db7fef82", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa87c3ec87eb802aad080df0adb331e504d327e5d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xab16e0d25c06cb376259cc18c1de4aca57605589", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xac3211a5025414af2866ff09c23fc18bc97e79b1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xacfa209fb73bf3dd5bbfb1101b9bc999c49062a5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb24754be79281553dc1adc160ddf5cd9b74361a4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb3bd49e28f8f832b8d1e246106991e546c323502", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb45a50545beeab73f38f31e5973768c421805e5e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb4efd85c19999d84251304bda99e90b92300bd93", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb5a5f22694352c15b00323844ad545abb2b11028", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb5c0e43a6330b9eb904ec57ea24d70269ae4652e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb62d18dea74045e822352ce4b3ee77319dc5ff2f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb98d4c97425d9908e66e53a6fdf673acca0be986", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xba2184520a1cc49a6159c57e61e1844e085615b6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xba5f11b16b155792cf3b2e6880e8706859a8aeb6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbdc5bac39dbe132b1e030e898ae3830017d7d969", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbf2179859fc6d5bee9bf9158632dc51678a4100e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc27a2f05fa577a83ba0fdb4c38443c0718356501", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc438b4c0dfbb1593be6dee03bbd1a84bb3aa6213", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc66ea802717bfb9833400264dd12c2bceaa34a6d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc997d07b0bc607b6d1bcb6fb9d4a5579c466c3e5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd2d6158683aee4cc838067727209a0aaf4359de3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd4c435f5b09f855c3317c8524cb1f586e42795fa", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd8912c10681d8b21fd3742244f44658dba12264e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe2e6d4be086c6938b53b22144855eef674281639", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe41d2489571d322189246dafa5ebde1f4699f498", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe94327d07fc17907b4db788e5adf2ed424addff6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea097a2b1db00627b2fa17460ad260c016016977", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea1f346faf023f974eb5adaf088bbcdf02d761f4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea38eaa3c86c8f9b751533ba2e562deb9acded40", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeab43193cf0623073ca89db9b712796356fa7414", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeb2da9fac54284cea731d1f10bb34eecb3c00c14", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeb7c20027172e5d143fb030d50f91cece2d1485d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xef2463099360a085f1f10b076ed72ef625497a06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf433089366899d83a9f26a773d59ec7ecf30355e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf6b55acbbc49f4524aa48d19281a9a77c54de10f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf6cfe53d6febaeea051f400ff5fc14f0cbbdaca1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf7b098298f7c69fc14610bf71d5e02c60792894c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xfec0cf7fe078a500abf15f1284958f22049c2c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - } -] diff --git a/packages/sra-report/test/fixtures/v0/token_pairs/malformed.json b/packages/sra-report/test/fixtures/v0/token_pairs/malformed.json deleted file mode 100644 index 19e076c41..000000000 --- a/packages/sra-report/test/fixtures/v0/token_pairs/malformed.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "tokenA": { - "address": "4a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x01b3ec4aae1b8729529beb4965f27d008788b0eb", - "minAmount": "1", - "maxAmount": 999999999999999999999, - "precision": 8 - } - }, - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenX": { - "address": "0x0371a82e4a9d0a4312f3ee2ac9c6958512891372", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - } -] diff --git a/packages/sra-report/test/fixtures/v0/token_pairs/token_a_and_token_b_params.json b/packages/sra-report/test/fixtures/v0/token_pairs/token_a_and_token_b_params.json deleted file mode 100644 index cdb9c477b..000000000 --- a/packages/sra-report/test/fixtures/v0/token_pairs/token_a_and_token_b_params.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe41d2489571d322189246dafa5ebde1f4699f498", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - } -] diff --git a/packages/sra-report/test/fixtures/v0/token_pairs/token_a_param.json b/packages/sra-report/test/fixtures/v0/token_pairs/token_a_param.json deleted file mode 100644 index 7c2e8cb3a..000000000 --- a/packages/sra-report/test/fixtures/v0/token_pairs/token_a_param.json +++ /dev/null @@ -1,1864 +0,0 @@ -[ - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x01b3ec4aae1b8729529beb4965f27d008788b0eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0371a82e4a9d0a4312f3ee2ac9c6958512891372", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x076c97e1c869072ee22f8c91978c99b4bcb02591", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x09d8b66c48424324b25754a873e290cae5dca439", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0abdace70d3790235af448c88547603b945604ea", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0cf0ee63788a0849fe5297f3407f701e122cc023", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0d8775f648430679a709e98d2b0cb6250d2887ef", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0f513ffb4926ff82d7f60a05069047aca295c413", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x0f5d2fb29fb7d3cfee444a200298f468908cc942", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1063ce524265d5a3a624f4914acd573dd89ce988", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x106aa49295b525fcf959aa75ec3f7dcbf5352f1c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x107c4504cd79c5d2696ea0030a8dd4e92601b82e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1183f92a5624d68e85ffb9170f16bf0443b4c242", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12480e24eb5bec1a9d4369cab6a80cad3c0a377a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x168296bb09e24a88805cb9c33356536b980d3fc5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1776e1f26f98b1a5df9cd347953a26dd3cb46671", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27054b13b1b798b345b591a4d22e6562d47ea75a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27695e09149adc738a978e9a678f99e4c39e9eb9", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27dce1ec4d3f72c3e457cc50354f1f975ddef488", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x27f610bf36eca0939093343ac28b1534a721dbb4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x2956356cd2a2bf3202f771f50d3d14a367b48070", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x340d2bde5eb28c1eed91b2f790723e3b160613b7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3597bfd533a99c9aa083587b074434e61eb0a258", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3618516f45cd3c913f81f9987af41077932bc40d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x386467f1f3ddbe832448650418311a479eecfc57", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3883f5e181fccaf8410fa61e12b59bad963fb645", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x399a0e6fbeb3d74c85357439f4c8aed9678a5cbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x39bb259f66e1c59d5abef88375979b4d20d98022", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4156d3342d5c385a87d264f90653733592000581", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x419d0d8bdd9af5e606ae2232ed285aff190e711b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x41e5560054824ea6b0732e656e3ad64e20e94e45", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x42d6622dece394b54999fbd73d108123806f6a18", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x44f588aeeb8c44471439d1270b3603c66a9262f1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4d8fc1453a0f359e99c9675954e656d80d996fbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4df47b4969b2911c966506e3592c41389493953b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x4df812f6064def1e5e029f1ca858777cc98d2d81", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x514910771af9ca656af840dff83e8264ecf986ca", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x52a7cb918c11a16958be40cba7e31e32a499a465", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x533ef0984b2faa227acc620c67cce12aa39cd8cd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x554c20b7c486beee439277b4540a434566dc4c02", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x56ba2ee7890461f463f7be02aac3099f6d5811a8", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5732046a883704404f284ce41ffadd5b007fd668", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x595832f8fc6bf59c85c527fec3740a1b7a361269", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5af2be193a6abca9c8817001f45744777db30756", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5b2e4a700dfbc560061e957edec8f6eeeb74a320", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x5e3346444010135322268a4630d2ed5f8d09446c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x607f4c5bb672230e8672085532f7e901544a7375", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x614ea929892ea43d3ea2c5e3311b01cc589bad6c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6425c6be902d692ae2db752b3c268afadb099d3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6781a0f84c7e9e846dcb84a9a5bd49333067b104", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x6810e776880c02933d47db1b9fc05908e5386b96", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x744d70fdbe2ba4cf95131626614a1763df805b9e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7654915a1b82d6d2d0afc37c52af556ea8983c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7b69b78cc7fee48202c208609ae6d1f78ce42e13", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x7d4b8cce0591c9044a22ee543533b72e976e36c3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x80fb784b7ed66730e8b1dbd9820afd29931aab03", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x814964b1bceaf24e26296d031eadf134a2ca4105", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x865e3707a580f9db89304005cddd050ade8873eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x88fcfbc22c6d3dbaa25af478c578978339bde77a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8a854288a5976036a725879164ca3e91d30c6a1b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8ae4bf2c33a8e667de34b54938b0ccd03eb8cc06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8eb24319393716668d768dcec29356ae9cffe285", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x8f8221afbb33998d8584a2b05749ba73c37a938a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9214ec02cb71cba0ada6896b8da260736a67ab10", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x960b236a07cf122663c4303350609a66a7b288c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x983f6d60db79ea8ca4eb9968c6aff8cfa04b3c63", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9a005c9a89bd72a4bd27721e7a09a3c11d2b03c4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa5fd1a791c4dfcaacc963d4f73c6ae5824149ea7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa8006c4ca56f24d6836727d106349320db7fef82", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xa87c3ec87eb802aad080df0adb331e504d327e5d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xab16e0d25c06cb376259cc18c1de4aca57605589", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xac3211a5025414af2866ff09c23fc18bc97e79b1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xacfa209fb73bf3dd5bbfb1101b9bc999c49062a5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb24754be79281553dc1adc160ddf5cd9b74361a4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb3bd49e28f8f832b8d1e246106991e546c323502", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb45a50545beeab73f38f31e5973768c421805e5e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb4efd85c19999d84251304bda99e90b92300bd93", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb5a5f22694352c15b00323844ad545abb2b11028", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb5c0e43a6330b9eb904ec57ea24d70269ae4652e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb62d18dea74045e822352ce4b3ee77319dc5ff2f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xb98d4c97425d9908e66e53a6fdf673acca0be986", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xba2184520a1cc49a6159c57e61e1844e085615b6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xba5f11b16b155792cf3b2e6880e8706859a8aeb6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbdc5bac39dbe132b1e030e898ae3830017d7d969", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xbf2179859fc6d5bee9bf9158632dc51678a4100e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc27a2f05fa577a83ba0fdb4c38443c0718356501", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc438b4c0dfbb1593be6dee03bbd1a84bb3aa6213", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc66ea802717bfb9833400264dd12c2bceaa34a6d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc997d07b0bc607b6d1bcb6fb9d4a5579c466c3e5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd2d6158683aee4cc838067727209a0aaf4359de3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd4c435f5b09f855c3317c8524cb1f586e42795fa", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xd8912c10681d8b21fd3742244f44658dba12264e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe2e6d4be086c6938b53b22144855eef674281639", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe41d2489571d322189246dafa5ebde1f4699f498", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xe94327d07fc17907b4db788e5adf2ed424addff6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea097a2b1db00627b2fa17460ad260c016016977", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea1f346faf023f974eb5adaf088bbcdf02d761f4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xea38eaa3c86c8f9b751533ba2e562deb9acded40", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeab43193cf0623073ca89db9b712796356fa7414", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeb2da9fac54284cea731d1f10bb34eecb3c00c14", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xeb7c20027172e5d143fb030d50f91cece2d1485d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xef2463099360a085f1f10b076ed72ef625497a06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf433089366899d83a9f26a773d59ec7ecf30355e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf6b55acbbc49f4524aa48d19281a9a77c54de10f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf6cfe53d6febaeea051f400ff5fc14f0cbbdaca1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf7b098298f7c69fc14610bf71d5e02c60792894c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenA": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xfec0cf7fe078a500abf15f1284958f22049c2c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - } -] diff --git a/packages/sra-report/test/fixtures/v0/token_pairs/token_b_param.json b/packages/sra-report/test/fixtures/v0/token_pairs/token_b_param.json deleted file mode 100644 index 1be6cae96..000000000 --- a/packages/sra-report/test/fixtures/v0/token_pairs/token_b_param.json +++ /dev/null @@ -1,1864 +0,0 @@ -[ - { - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x01b3ec4aae1b8729529beb4965f27d008788b0eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x0371a82e4a9d0a4312f3ee2ac9c6958512891372", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x076c97e1c869072ee22f8c91978c99b4bcb02591", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x09d8b66c48424324b25754a873e290cae5dca439", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x0abdace70d3790235af448c88547603b945604ea", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x0cf0ee63788a0849fe5297f3407f701e122cc023", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x0d8775f648430679a709e98d2b0cb6250d2887ef", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x0f513ffb4926ff82d7f60a05069047aca295c413", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x0f5d2fb29fb7d3cfee444a200298f468908cc942", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x1063ce524265d5a3a624f4914acd573dd89ce988", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x106aa49295b525fcf959aa75ec3f7dcbf5352f1c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x107c4504cd79c5d2696ea0030a8dd4e92601b82e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x1183f92a5624d68e85ffb9170f16bf0443b4c242", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x12480e24eb5bec1a9d4369cab6a80cad3c0a377a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x168296bb09e24a88805cb9c33356536b980d3fc5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x1776e1f26f98b1a5df9cd347953a26dd3cb46671", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x27054b13b1b798b345b591a4d22e6562d47ea75a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x27695e09149adc738a978e9a678f99e4c39e9eb9", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x27dce1ec4d3f72c3e457cc50354f1f975ddef488", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x27f610bf36eca0939093343ac28b1534a721dbb4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x2956356cd2a2bf3202f771f50d3d14a367b48070", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x340d2bde5eb28c1eed91b2f790723e3b160613b7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x3597bfd533a99c9aa083587b074434e61eb0a258", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x3618516f45cd3c913f81f9987af41077932bc40d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x386467f1f3ddbe832448650418311a479eecfc57", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x3883f5e181fccaf8410fa61e12b59bad963fb645", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x399a0e6fbeb3d74c85357439f4c8aed9678a5cbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x39bb259f66e1c59d5abef88375979b4d20d98022", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x4156d3342d5c385a87d264f90653733592000581", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x419d0d8bdd9af5e606ae2232ed285aff190e711b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x41e5560054824ea6b0732e656e3ad64e20e94e45", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x42d6622dece394b54999fbd73d108123806f6a18", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x44f588aeeb8c44471439d1270b3603c66a9262f1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x4d8fc1453a0f359e99c9675954e656d80d996fbf", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x4df47b4969b2911c966506e3592c41389493953b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x4df812f6064def1e5e029f1ca858777cc98d2d81", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x514910771af9ca656af840dff83e8264ecf986ca", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x52a7cb918c11a16958be40cba7e31e32a499a465", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x533ef0984b2faa227acc620c67cce12aa39cd8cd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x554c20b7c486beee439277b4540a434566dc4c02", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x56ba2ee7890461f463f7be02aac3099f6d5811a8", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x5732046a883704404f284ce41ffadd5b007fd668", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x595832f8fc6bf59c85c527fec3740a1b7a361269", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x5af2be193a6abca9c8817001f45744777db30756", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x5b2e4a700dfbc560061e957edec8f6eeeb74a320", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x5e3346444010135322268a4630d2ed5f8d09446c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x607f4c5bb672230e8672085532f7e901544a7375", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x614ea929892ea43d3ea2c5e3311b01cc589bad6c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x6425c6be902d692ae2db752b3c268afadb099d3b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x6781a0f84c7e9e846dcb84a9a5bd49333067b104", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x6810e776880c02933d47db1b9fc05908e5386b96", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x744d70fdbe2ba4cf95131626614a1763df805b9e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x7654915a1b82d6d2d0afc37c52af556ea8983c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x7b69b78cc7fee48202c208609ae6d1f78ce42e13", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x7d4b8cce0591c9044a22ee543533b72e976e36c3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x80fb784b7ed66730e8b1dbd9820afd29931aab03", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x814964b1bceaf24e26296d031eadf134a2ca4105", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x865e3707a580f9db89304005cddd050ade8873eb", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x88fcfbc22c6d3dbaa25af478c578978339bde77a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x8a854288a5976036a725879164ca3e91d30c6a1b", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x8ae4bf2c33a8e667de34b54938b0ccd03eb8cc06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x8eb24319393716668d768dcec29356ae9cffe285", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x8f8221afbb33998d8584a2b05749ba73c37a938a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x9214ec02cb71cba0ada6896b8da260736a67ab10", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x960b236a07cf122663c4303350609a66a7b288c0", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x983f6d60db79ea8ca4eb9968c6aff8cfa04b3c63", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x9a005c9a89bd72a4bd27721e7a09a3c11d2b03c4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xa5fd1a791c4dfcaacc963d4f73c6ae5824149ea7", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xa8006c4ca56f24d6836727d106349320db7fef82", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xa87c3ec87eb802aad080df0adb331e504d327e5d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xab16e0d25c06cb376259cc18c1de4aca57605589", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xac3211a5025414af2866ff09c23fc18bc97e79b1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xacfa209fb73bf3dd5bbfb1101b9bc999c49062a5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb24754be79281553dc1adc160ddf5cd9b74361a4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb3bd49e28f8f832b8d1e246106991e546c323502", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb45a50545beeab73f38f31e5973768c421805e5e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb4efd85c19999d84251304bda99e90b92300bd93", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb5a5f22694352c15b00323844ad545abb2b11028", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb5c0e43a6330b9eb904ec57ea24d70269ae4652e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb62d18dea74045e822352ce4b3ee77319dc5ff2f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xb98d4c97425d9908e66e53a6fdf673acca0be986", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xba2184520a1cc49a6159c57e61e1844e085615b6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xba5f11b16b155792cf3b2e6880e8706859a8aeb6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xbdc5bac39dbe132b1e030e898ae3830017d7d969", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xbf2179859fc6d5bee9bf9158632dc51678a4100e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xc27a2f05fa577a83ba0fdb4c38443c0718356501", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xc438b4c0dfbb1593be6dee03bbd1a84bb3aa6213", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xc66ea802717bfb9833400264dd12c2bceaa34a6d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xc997d07b0bc607b6d1bcb6fb9d4a5579c466c3e5", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xd26114cd6ee289accf82350c8d8487fedb8a0c07", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xd2d6158683aee4cc838067727209a0aaf4359de3", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xd4c435f5b09f855c3317c8524cb1f586e42795fa", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xd8912c10681d8b21fd3742244f44658dba12264e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xe2e6d4be086c6938b53b22144855eef674281639", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xe41d2489571d322189246dafa5ebde1f4699f498", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xe94327d07fc17907b4db788e5adf2ed424addff6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xea097a2b1db00627b2fa17460ad260c016016977", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xea1f346faf023f974eb5adaf088bbcdf02d761f4", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xea38eaa3c86c8f9b751533ba2e562deb9acded40", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xeab43193cf0623073ca89db9b712796356fa7414", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xeb2da9fac54284cea731d1f10bb34eecb3c00c14", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xeb7c20027172e5d143fb030d50f91cece2d1485d", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xef2463099360a085f1f10b076ed72ef625497a06", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xf433089366899d83a9f26a773d59ec7ecf30355e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xf6b55acbbc49f4524aa48d19281a9a77c54de10f", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xf6cfe53d6febaeea051f400ff5fc14f0cbbdaca1", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xf7b098298f7c69fc14610bf71d5e02c60792894c", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - }, - { - "tokenB": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - }, - "tokenA": { - "address": "0xfec0cf7fe078a500abf15f1284958f22049c2c7e", - "minAmount": "1", - "maxAmount": "999999999999999999999", - "precision": 8 - } - } -] diff --git a/packages/sra-report/test/postman_collection_v0_test.ts b/packages/sra-report/test/postman_collection_v0_test.ts deleted file mode 100644 index dfb16b10d..000000000 --- a/packages/sra-report/test/postman_collection_v0_test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import 'mocha'; -import * as nock from 'nock'; - -import * as defaultRequestTokenPairsResponseJSON from './fixtures/v0/token_pairs/default_request.json'; -import * as malformedTokenPairsResponseJSON from './fixtures/v0/token_pairs/malformed.json'; -import * as tokenAAndTokenBParamsTokenPairsResponseJSON from './fixtures/v0/token_pairs/token_a_and_token_b_params.json'; -import * as tokenAParamTokenPairsResponseJSON from './fixtures/v0/token_pairs/token_a_param.json'; -import * as tokenBParamTokenPairsResponseJSON from './fixtures/v0/token_pairs/token_b_param.json'; -import { testRunner } from './test_runner'; - -describe('Postman Collection v0', () => { - const testRelayerUrl = 'https://example.com'; - const nockScope = nock(testRelayerUrl); - afterEach(() => { - nock.cleanAll(); - }); - describe('GET /token_pairs', () => { - const postmanCollectionFolderName = 'GET /token_pairs'; - const resourcePath = '/token_pairs'; - describe('default request', () => { - const postmanCollectionRequestName = 'default request'; - const nockInterceptor = nockScope.get(resourcePath); - testRunner.runContentTypeTests(nockInterceptor, postmanCollectionFolderName, postmanCollectionRequestName); - testRunner.runSchemaTests( - nockInterceptor, - postmanCollectionFolderName, - postmanCollectionRequestName, - malformedTokenPairsResponseJSON, - defaultRequestTokenPairsResponseJSON, - ); - }); - describe('tokenA param', () => { - const postmanCollectionRequestName = 'tokenA param'; - const nockInterceptor = nockScope.get(resourcePath).query({ - tokenA: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - }); - testRunner.runContentTypeTests(nockInterceptor, postmanCollectionFolderName, postmanCollectionRequestName); - testRunner.runSchemaTests( - nockInterceptor, - postmanCollectionFolderName, - postmanCollectionRequestName, - malformedTokenPairsResponseJSON, - tokenAParamTokenPairsResponseJSON, - ); - }); - describe('tokenB param', () => { - const postmanCollectionRequestName = 'tokenB param'; - const nockInterceptor = nockScope.get(resourcePath).query({ - tokenB: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - }); - testRunner.runContentTypeTests(nockInterceptor, postmanCollectionFolderName, postmanCollectionRequestName); - testRunner.runSchemaTests( - nockInterceptor, - postmanCollectionFolderName, - postmanCollectionRequestName, - malformedTokenPairsResponseJSON, - tokenBParamTokenPairsResponseJSON, - ); - }); - describe('tokenA and tokenB params', () => { - const postmanCollectionRequestName = 'tokenA and tokenB params'; - const nockInterceptor = nockScope.get(resourcePath).query({ - tokenA: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - tokenB: '0xe41d2489571d322189246dafa5ebde1f4699f498', - }); - testRunner.runContentTypeTests(nockInterceptor, postmanCollectionFolderName, postmanCollectionRequestName); - testRunner.runSchemaTests( - nockInterceptor, - postmanCollectionFolderName, - postmanCollectionRequestName, - malformedTokenPairsResponseJSON, - tokenAAndTokenBParamsTokenPairsResponseJSON, - ); - }); - }); -}); diff --git a/packages/sra-report/test/test_runner.ts b/packages/sra-report/test/test_runner.ts deleted file mode 100644 index 8094018f2..000000000 --- a/packages/sra-report/test/test_runner.ts +++ /dev/null @@ -1,143 +0,0 @@ -import * as chai from 'chai'; -import * as chaiAsPromised from 'chai-as-promised'; -import * as dirtyChai from 'dirty-chai'; -import * as _ from 'lodash'; -import 'mocha'; -import { - NewmanRunExecution, - NewmanRunExecutionAssertion, - NewmanRunExecutionAssertionError, - NewmanRunSummary, -} from 'newman'; -import * as nock from 'nock'; - -import * as sraReportCollectionJSON from '../../postman_collections/sra_report.postman_collection.json'; -import { utils } from '../src/utils'; - -import * as postmanEnvironmentJSON from './environments/postman_environment.json'; - -chai.config.includeStack = true; -chai.use(dirtyChai); -chai.use(chaiAsPromised); -const expect = chai.expect; - -const CONTENT_TYPE_ASSERTION_NAME = 'Has Content-Type header with value application/json'; -const SCHEMA_ASSERTION_NAME = 'Schema is valid'; -const SUCCESS_STATUS = 200; -const baseNewmanRunOptions = { - collection: sraReportCollectionJSON, - environment: postmanEnvironmentJSON, - reporter: { - cli: { - noConsole: true, - }, - }, -}; - -export const testRunner = { - runContentTypeTests( - nockInterceptor: nock.Interceptor, - postmanCollectionFolderName: string, - postmanCollectionRequestName: string, - ): void { - const newmanRunOptions = { - ...baseNewmanRunOptions, - folder: postmanCollectionFolderName, - }; - describe(CONTENT_TYPE_ASSERTION_NAME, () => { - it('fails when there are no headers', async () => { - nockInterceptor.reply(SUCCESS_STATUS, {}); - const summary = await utils.newmanRunAsync(newmanRunOptions); - const error = findAssertionErrorIfExists( - summary, - postmanCollectionRequestName, - CONTENT_TYPE_ASSERTION_NAME, - ); - const errorMessage = _.get(error, 'message'); - expect(error).to.not.be.undefined(); - expect(errorMessage).to.equal(`expected response to have header with key 'Content-Type'`); - }); - it('fails when Content-Type header exists but not with value application/json', async () => { - const headers = { - 'Content-Type': 'text/html', - }; - nockInterceptor.reply(SUCCESS_STATUS, {}, headers); - const summary = await utils.newmanRunAsync(newmanRunOptions); - const error = findAssertionErrorIfExists( - summary, - postmanCollectionRequestName, - CONTENT_TYPE_ASSERTION_NAME, - ); - const errorMessage = _.get(error, 'message'); - expect(error).to.not.be.undefined(); - expect(errorMessage).to.equal(`expected 'text/html' to include 'application/json'`); - }); - it('passes when Content-Type header exists with value application/json', async () => { - const headers = { - 'Content-Type': 'charset=utf-8; application/json', - }; - nockInterceptor.reply(SUCCESS_STATUS, {}, headers); - const summary = await utils.newmanRunAsync(newmanRunOptions); - const error = findAssertionErrorIfExists( - summary, - postmanCollectionRequestName, - CONTENT_TYPE_ASSERTION_NAME, - ); - expect(error).to.be.undefined(); - }); - }); - }, - runSchemaTests( - nockInterceptor: nock.Interceptor, - postmanCollectionFolderName: string, - postmanCollectionRequestName: string, - malformedJson: object, - correctJson: object, - ): void { - const newmanRunOptions = { - ...baseNewmanRunOptions, - folder: postmanCollectionFolderName, - }; - describe(SCHEMA_ASSERTION_NAME, () => { - it('fails when schema is invalid', async () => { - nockInterceptor.reply(SUCCESS_STATUS, malformedJson); - const summary = await utils.newmanRunAsync(newmanRunOptions); - const error = findAssertionErrorIfExists(summary, postmanCollectionRequestName, SCHEMA_ASSERTION_NAME); - const errorMessage = _.get(error, 'message'); - expect(error).to.not.be.undefined(); - expect(errorMessage).to.equal('expected false to be true'); - }); - it('passes when schema is valid', async () => { - nockInterceptor.reply(SUCCESS_STATUS, correctJson); - const summary = await utils.newmanRunAsync(newmanRunOptions); - const error = findAssertionErrorIfExists(summary, postmanCollectionRequestName, SCHEMA_ASSERTION_NAME); - expect(error).to.be.undefined(); - }); - }); - }, -}; - -function findAssertionErrorIfExists( - summary: NewmanRunSummary, - postmanCollectionRequestName: string, - postmanCollectionAssertionName: string, -): NewmanRunExecutionAssertionError | undefined { - const matchingExecutionIfExists = _.find(summary.run.executions, (execution: NewmanRunExecution) => { - return execution.item.name === postmanCollectionRequestName; - }); - if (_.isUndefined(matchingExecutionIfExists)) { - return undefined; - } - const matchingAssertionIfExists = _.find( - matchingExecutionIfExists.assertions, - (assertion: NewmanRunExecutionAssertion) => { - return assertion.assertion === postmanCollectionAssertionName; - }, - ); - if (_.isUndefined(matchingAssertionIfExists)) { - return undefined; - } else { - const error = matchingAssertionIfExists.error; - return error; - } -} diff --git a/packages/sra-report/tsconfig.json b/packages/sra-report/tsconfig.json deleted file mode 100644 index 2ee711adc..000000000 --- a/packages/sra-report/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": "." - }, - "include": ["./src/**/*", "./test/**/*"] -} diff --git a/packages/sra-report/tslint.json b/packages/sra-report/tslint.json deleted file mode 100644 index ffaefe83a..000000000 --- a/packages/sra-report/tslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["@0xproject/tslint-config"] -} diff --git a/packages/sra-spec/CHANGELOG.json b/packages/sra-spec/CHANGELOG.json index 333a1dde0..a068df3fb 100644 --- a/packages/sra-spec/CHANGELOG.json +++ b/packages/sra-spec/CHANGELOG.json @@ -6,7 +6,8 @@ "note": "Make @loopback/openapi-v3-types a 'dependency' so it's available to users of the library", "pr": 1105 } - ] + ], + "timestamp": 1539871071 }, { "version": "1.0.6", diff --git a/packages/sra-spec/CHANGELOG.md b/packages/sra-spec/CHANGELOG.md index 4d27f20df..ba4cddec2 100644 --- a/packages/sra-spec/CHANGELOG.md +++ b/packages/sra-spec/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.7 - _October 18, 2018_ + + * Make @loopback/openapi-v3-types a 'dependency' so it's available to users of the library (#1105) + ## v1.0.6 - _October 4, 2018_ * Dependencies updated @@ -38,6 +42,6 @@ CHANGELOG * Add takerAddress to /orders parameters (#974) -## v1.0.1-rc.4 - _August 13, 2018_ +## v1.0.1-rc.4 - _August 14, 2018_ * Add inital spec for SRA v2 (#916) diff --git a/packages/sra-spec/README.md b/packages/sra-spec/README.md index 7eee6396b..4575aaf66 100644 --- a/packages/sra-spec/README.md +++ b/packages/sra-spec/README.md @@ -1,4 +1,4 @@ -## @0xproject/sra-spec +## @0x/sra-spec Contains the Standard Relayer API [OpenAPI Spec](https://github.com/OAI/OpenAPI-Specification). @@ -9,7 +9,7 @@ A deployed [ReDoc](https://github.com/Rebilly/ReDoc) static site with the API ca ## Usage ``` -import { api } from '@0xproject/sra-spec'; +import { api } from '@0x/sra-spec'; ``` ## Installation @@ -53,13 +53,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/sra-spec yarn build +PKG=@0x/sra-spec yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/sra-spec yarn watch +PKG=@0x/sra-spec yarn watch ``` ### Static Site diff --git a/packages/sra-spec/package.json b/packages/sra-spec/package.json index c3ddde36e..0c55465d7 100644 --- a/packages/sra-spec/package.json +++ b/packages/sra-spec/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/sra-spec", - "version": "1.0.6", + "name": "@0x/sra-spec", + "version": "1.0.7", "engines": { "node": ">=6.12" }, @@ -35,11 +35,11 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/sra-spec/README.md", "dependencies": { - "@0xproject/json-schemas": "^1.0.7", + "@0x/json-schemas": "^2.0.0", "@loopback/openapi-v3-types": "^0.8.2" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/mocha": "^2.2.42", "@types/node": "^10.5.3", "chai": "^4.0.1", diff --git a/packages/sra-spec/src/json-schemas.ts b/packages/sra-spec/src/json-schemas.ts index 47cca9b04..9eb32de59 100644 --- a/packages/sra-spec/src/json-schemas.ts +++ b/packages/sra-spec/src/json-schemas.ts @@ -1,4 +1,4 @@ -import { schemas as jsonSchemas } from '@0xproject/json-schemas'; +import { schemas as jsonSchemas } from '@0x/json-schemas'; // Only include schemas we actually need const { diff --git a/packages/sra-spec/src/md/introduction.md b/packages/sra-spec/src/md/introduction.md index f27186f41..824df8998 100644 --- a/packages/sra-spec/src/md/introduction.md +++ b/packages/sra-spec/src/md/introduction.md @@ -1,7 +1,3 @@ -# Testing - -Use the [sra-report](https://github.com/0xProject/0x-monorepo/tree/development/packages/sra-report) command line tool to test your API for SRA compliance. - # Schemas The [JSON schemas](http://json-schema.org/) for the API payloads and responses can be found in [@0xproject/json-schemas](https://github.com/0xProject/0x.js/tree/development/packages/json-schemas). Examples of each payload and response can be found in the library's [test suite](https://github.com/0xProject/0x.js/blob/development/packages/json-schemas/test/schema_test.ts#L1). diff --git a/packages/sra-spec/tslint.json b/packages/sra-spec/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/sra-spec/tslint.json +++ b/packages/sra-spec/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/subproviders/CHANGELOG.json b/packages/subproviders/CHANGELOG.json index 6aeeeb333..b145bbbe5 100644 --- a/packages/subproviders/CHANGELOG.json +++ b/packages/subproviders/CHANGELOG.json @@ -14,7 +14,8 @@ "note": "Make web3-provider-engine types a 'dependency' so it's available to users of the library", "pr": 1105 } - ] + ], + "timestamp": 1539871071 }, { "version": "2.0.7", diff --git a/packages/subproviders/CHANGELOG.md b/packages/subproviders/CHANGELOG.md index 872948ad7..f9e3e63a6 100644 --- a/packages/subproviders/CHANGELOG.md +++ b/packages/subproviders/CHANGELOG.md @@ -5,6 +5,12 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.1.0 - _October 18, 2018_ + + * Add `MetamaskSubprovider` to handle inconsistent JSON RPC behaviour (#1102) + * Add support for `eth_signTypedData` in wallets Mnemonic, Private and EthLightWallet (#1102) + * Make web3-provider-engine types a 'dependency' so it's available to users of the library (#1105) + ## v2.0.7 - _October 4, 2018_ * Dependencies updated @@ -37,7 +43,7 @@ CHANGELOG * Export types: `PartialTxParams`, `JSONRPCRequestPayloadWithMethod`, `ECSignatureString`, `AccountFetchingConfigs`, `LedgerEthereumClientFactoryAsync`, `OnNextCompleted`, `MnemonicWalletSubproviderConfigs`, LedgerGetAddressResult, `JSONRPCRequestPayload`, `Provider`, `JSONRPCResponsePayload` and `JSONRPCErrorCallback` (#924) -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Dependencies updated diff --git a/packages/subproviders/README.md b/packages/subproviders/README.md index 90c9b7bbe..6f97d760e 100644 --- a/packages/subproviders/README.md +++ b/packages/subproviders/README.md @@ -1,4 +1,4 @@ -## @0xproject/subproviders +## @0x/subproviders A few useful web3 subproviders including a LedgerSubprovider useful for adding Ledger Nano S support. @@ -9,14 +9,14 @@ We have written up a [Wiki](https://0xproject.com/wiki#Web3-Provider-Examples) a ## Installation ``` -yarn add @0xproject/subproviders +yarn add @0x/subproviders ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -45,13 +45,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/subproviders yarn build +PKG=@0x/subproviders yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/subproviders yarn watch +PKG=@0x/subproviders yarn watch ``` ### Clean diff --git a/packages/subproviders/package.json b/packages/subproviders/package.json index 1fe1ee4ad..4eef09fe6 100644 --- a/packages/subproviders/package.json +++ b/packages/subproviders/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/subproviders", - "version": "2.0.7", + "name": "@0x/subproviders", + "version": "2.1.0", "engines": { "node": ">=6.12" }, @@ -29,11 +29,11 @@ } }, "dependencies": { - "@0xproject/assert": "^1.0.13", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/assert": "^1.0.14", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "@ledgerhq/hw-app-eth": "^4.3.0", "@ledgerhq/hw-transport-u2f": "^4.3.0", "@types/eth-lightwallet": "^3.0.0", @@ -43,7 +43,7 @@ "bip39": "^2.5.0", "bn.js": "^4.11.8", "eth-lightwallet": "^3.0.1", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-tx": "^1.3.5", "ethereumjs-util": "^5.1.1", "ganache-core": "^2.2.1", @@ -54,7 +54,7 @@ "web3-provider-engine": "14.0.6" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/bip39": "^2.4.0", "@types/bn.js": "^4.11.0", "@types/ethereumjs-tx": "^1.0.0", diff --git a/packages/subproviders/src/index.ts b/packages/subproviders/src/index.ts index 9f4dac58b..050027f96 100644 --- a/packages/subproviders/src/index.ts +++ b/packages/subproviders/src/index.ts @@ -48,14 +48,7 @@ export { LedgerGetAddressResult, } from './types'; -export { - ECSignature, - EIP712Object, - EIP712ObjectValue, - EIP712TypedData, - EIP712Types, - EIP712Parameter, -} from '@0xproject/types'; +export { ECSignature, EIP712Object, EIP712ObjectValue, EIP712TypedData, EIP712Types, EIP712Parameter } from '@0x/types'; export { JSONRPCRequestPayload, diff --git a/packages/subproviders/src/subproviders/base_wallet_subprovider.ts b/packages/subproviders/src/subproviders/base_wallet_subprovider.ts index 409a0d330..e9d104074 100644 --- a/packages/subproviders/src/subproviders/base_wallet_subprovider.ts +++ b/packages/subproviders/src/subproviders/base_wallet_subprovider.ts @@ -1,5 +1,5 @@ -import { assert } from '@0xproject/assert'; -import { addressUtils } from '@0xproject/utils'; +import { assert } from '@0x/assert'; +import { addressUtils } from '@0x/utils'; import { JSONRPCRequestPayload, JSONRPCResponsePayload } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts b/packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts index a1d93ac49..15cd713af 100644 --- a/packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts +++ b/packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts @@ -1,4 +1,4 @@ -import { EIP712TypedData } from '@0xproject/types'; +import { EIP712TypedData } from '@0x/types'; import * as lightwallet from 'eth-lightwallet'; import { PartialTxParams } from '../types'; diff --git a/packages/subproviders/src/subproviders/ledger.ts b/packages/subproviders/src/subproviders/ledger.ts index ee8edde92..28e348f90 100644 --- a/packages/subproviders/src/subproviders/ledger.ts +++ b/packages/subproviders/src/subproviders/ledger.ts @@ -1,5 +1,5 @@ -import { assert } from '@0xproject/assert'; -import { addressUtils } from '@0xproject/utils'; +import { assert } from '@0x/assert'; +import { addressUtils } from '@0x/utils'; import EthereumTx = require('ethereumjs-tx'); import ethUtil = require('ethereumjs-util'); import HDNode = require('hdkey'); diff --git a/packages/subproviders/src/subproviders/metamask_subprovider.ts b/packages/subproviders/src/subproviders/metamask_subprovider.ts index 46fc2a9cd..ba207d4cc 100644 --- a/packages/subproviders/src/subproviders/metamask_subprovider.ts +++ b/packages/subproviders/src/subproviders/metamask_subprovider.ts @@ -1,4 +1,4 @@ -import { marshaller, Web3Wrapper } from '@0xproject/web3-wrapper'; +import { marshaller, Web3Wrapper } from '@0x/web3-wrapper'; import { JSONRPCRequestPayload, Provider } from 'ethereum-types'; import * as ethUtil from 'ethereumjs-util'; diff --git a/packages/subproviders/src/subproviders/mnemonic_wallet.ts b/packages/subproviders/src/subproviders/mnemonic_wallet.ts index 04a11c7be..140e3d515 100644 --- a/packages/subproviders/src/subproviders/mnemonic_wallet.ts +++ b/packages/subproviders/src/subproviders/mnemonic_wallet.ts @@ -1,6 +1,6 @@ -import { assert } from '@0xproject/assert'; -import { EIP712TypedData } from '@0xproject/types'; -import { addressUtils } from '@0xproject/utils'; +import { assert } from '@0x/assert'; +import { EIP712TypedData } from '@0x/types'; +import { addressUtils } from '@0x/utils'; import * as bip39 from 'bip39'; import HDNode = require('hdkey'); import * as _ from 'lodash'; diff --git a/packages/subproviders/src/subproviders/private_key_wallet.ts b/packages/subproviders/src/subproviders/private_key_wallet.ts index e89c4c186..dca7e6810 100644 --- a/packages/subproviders/src/subproviders/private_key_wallet.ts +++ b/packages/subproviders/src/subproviders/private_key_wallet.ts @@ -1,6 +1,6 @@ -import { assert } from '@0xproject/assert'; -import { EIP712TypedData } from '@0xproject/types'; -import { signTypedDataUtils } from '@0xproject/utils'; +import { assert } from '@0x/assert'; +import { EIP712TypedData } from '@0x/types'; +import { signTypedDataUtils } from '@0x/utils'; import EthereumTx = require('ethereumjs-tx'); import * as ethUtil from 'ethereumjs-util'; import * as _ from 'lodash'; diff --git a/packages/subproviders/src/subproviders/redundant_subprovider.ts b/packages/subproviders/src/subproviders/redundant_subprovider.ts index 59a2986f8..58312f203 100644 --- a/packages/subproviders/src/subproviders/redundant_subprovider.ts +++ b/packages/subproviders/src/subproviders/redundant_subprovider.ts @@ -1,4 +1,4 @@ -import { promisify } from '@0xproject/utils'; +import { promisify } from '@0x/utils'; import { JSONRPCRequestPayload } from 'ethereum-types'; import * as _ from 'lodash'; diff --git a/packages/subproviders/src/subproviders/rpc_subprovider.ts b/packages/subproviders/src/subproviders/rpc_subprovider.ts index 18d6da307..437518e12 100644 --- a/packages/subproviders/src/subproviders/rpc_subprovider.ts +++ b/packages/subproviders/src/subproviders/rpc_subprovider.ts @@ -1,6 +1,6 @@ -import { assert } from '@0xproject/assert'; -import { StatusCodes } from '@0xproject/types'; -import { fetchAsync } from '@0xproject/utils'; +import { assert } from '@0x/assert'; +import { StatusCodes } from '@0x/types'; +import { fetchAsync } from '@0x/utils'; import { JSONRPCRequestPayload } from 'ethereum-types'; import JsonRpcError = require('json-rpc-error'); diff --git a/packages/subproviders/src/subproviders/signer.ts b/packages/subproviders/src/subproviders/signer.ts index eda7db42e..9bd5cbdf1 100644 --- a/packages/subproviders/src/subproviders/signer.ts +++ b/packages/subproviders/src/subproviders/signer.ts @@ -1,4 +1,4 @@ -import { marshaller, Web3Wrapper } from '@0xproject/web3-wrapper'; +import { marshaller, Web3Wrapper } from '@0x/web3-wrapper'; import { JSONRPCRequestPayload, Provider } from 'ethereum-types'; import { Callback, ErrorCallback } from '../types'; diff --git a/packages/subproviders/src/subproviders/subprovider.ts b/packages/subproviders/src/subproviders/subprovider.ts index dcf880c79..cd6780e0c 100644 --- a/packages/subproviders/src/subproviders/subprovider.ts +++ b/packages/subproviders/src/subproviders/subprovider.ts @@ -1,4 +1,4 @@ -import { promisify } from '@0xproject/utils'; +import { promisify } from '@0x/utils'; import { JSONRPCRequestPayload, JSONRPCResponsePayload, Provider } from 'ethereum-types'; import { Callback, ErrorCallback, JSONRPCRequestPayloadWithMethod } from '../types'; diff --git a/packages/subproviders/src/types.ts b/packages/subproviders/src/types.ts index e8a47ad34..ed3aea176 100644 --- a/packages/subproviders/src/types.ts +++ b/packages/subproviders/src/types.ts @@ -1,4 +1,4 @@ -import { ECSignature } from '@0xproject/types'; +import { ECSignature } from '@0x/types'; import { JSONRPCRequestPayload } from 'ethereum-types'; import HDNode = require('hdkey'); diff --git a/packages/subproviders/test/integration/ledger_subprovider_test.ts b/packages/subproviders/test/integration/ledger_subprovider_test.ts index 527ee5b22..b072e611b 100644 --- a/packages/subproviders/test/integration/ledger_subprovider_test.ts +++ b/packages/subproviders/test/integration/ledger_subprovider_test.ts @@ -1,5 +1,5 @@ -import { DoneCallback } from '@0xproject/types'; -import { promisify } from '@0xproject/utils'; +import { DoneCallback } from '@0x/types'; +import { promisify } from '@0x/utils'; import Eth from '@ledgerhq/hw-app-eth'; // HACK: This dependency is optional and tslint skips optional dependencies // tslint:disable-next-line:no-implicit-dependencies diff --git a/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts b/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts index 05f213cf5..a5cef30dc 100644 --- a/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts +++ b/packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts @@ -1,7 +1,7 @@ import * as chai from 'chai'; import FixtureSubprovider = require('web3-provider-engine/subproviders/fixture'); -import { promisify } from '@0xproject/utils'; +import { promisify } from '@0x/utils'; import EthereumTx = require('ethereumjs-tx'); import { NonceTrackerSubprovider, Web3ProviderEngine } from '../../src'; diff --git a/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts b/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts index e30d2f74e..fb4e43f9e 100644 --- a/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts +++ b/packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts @@ -1,4 +1,4 @@ -import { DoneCallback } from '@0xproject/types'; +import { DoneCallback } from '@0x/types'; import * as chai from 'chai'; import { JSONRPCResponsePayload } from 'ethereum-types'; import * as Sinon from 'sinon'; diff --git a/packages/subproviders/test/utils/report_callback_errors.ts b/packages/subproviders/test/utils/report_callback_errors.ts index eaefea7c3..6eb7420c3 100644 --- a/packages/subproviders/test/utils/report_callback_errors.ts +++ b/packages/subproviders/test/utils/report_callback_errors.ts @@ -1,4 +1,4 @@ -import { DoneCallback } from '@0xproject/types'; +import { DoneCallback } from '@0x/types'; export const reportCallbackErrors = (done: DoneCallback) => { return (f: (...args: any[]) => void) => { diff --git a/packages/subproviders/tslint.json b/packages/subproviders/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/subproviders/tslint.json +++ b/packages/subproviders/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/testnet-faucets/README.md b/packages/testnet-faucets/README.md index a92b93fc0..8b85e3517 100644 --- a/packages/testnet-faucets/README.md +++ b/packages/testnet-faucets/README.md @@ -1,4 +1,4 @@ -## @0xproject/testnet-faucets +## @0x/testnet-faucets This faucet dispenses 0.1 test ether to one recipient per second and 0.1 test ZRX every 5 seconds. It has a max queue size of 1000. @@ -31,13 +31,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/testnet-faucets yarn build +PKG=@0x/testnet-faucets yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/testnet-faucets yarn watch +PKG=@0x/testnet-faucets yarn watch ``` ### Clean diff --git a/packages/testnet-faucets/package.json b/packages/testnet-faucets/package.json index a113889cc..e683ae25a 100644 --- a/packages/testnet-faucets/package.json +++ b/packages/testnet-faucets/package.json @@ -1,7 +1,7 @@ { "private": true, - "name": "@0xproject/testnet-faucets", - "version": "1.0.51", + "name": "@0x/testnet-faucets", + "version": "1.0.52", "engines": { "node": ">=6.12" }, @@ -18,13 +18,13 @@ "author": "Fabio Berger", "license": "Apache-2.0", "dependencies": { - "0x.js": "^1.0.8", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "0x.js": "^2.0.0", + "@0x/subproviders": "^2.1.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "body-parser": "^1.17.1", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-tx": "^1.3.5", "ethereumjs-util": "^5.1.1", "express": "^4.15.2", @@ -32,7 +32,7 @@ "rollbar": "^0.6.5" }, "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/body-parser": "^1.16.1", "@types/express": "^4.0.35", "@types/lodash": "4.14.104", diff --git a/packages/testnet-faucets/src/ts/dispatch_queue.ts b/packages/testnet-faucets/src/ts/dispatch_queue.ts index 0a13df7c9..3d0958fbf 100644 --- a/packages/testnet-faucets/src/ts/dispatch_queue.ts +++ b/packages/testnet-faucets/src/ts/dispatch_queue.ts @@ -1,4 +1,4 @@ -import { intervalUtils, logUtils } from '@0xproject/utils'; +import { intervalUtils, logUtils } from '@0x/utils'; import * as _ from 'lodash'; import { errorReporter } from './error_reporter'; diff --git a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts index fa63ab63e..32f5cb623 100644 --- a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts +++ b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts @@ -1,6 +1,6 @@ import { ERC20TokenWrapper } from '0x.js'; -import { BigNumber, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import { configs } from './configs'; diff --git a/packages/testnet-faucets/src/ts/error_reporter.ts b/packages/testnet-faucets/src/ts/error_reporter.ts index 49c37b6eb..d5358aed0 100644 --- a/packages/testnet-faucets/src/ts/error_reporter.ts +++ b/packages/testnet-faucets/src/ts/error_reporter.ts @@ -1,4 +1,4 @@ -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import * as express from 'express'; import rollbar = require('rollbar'); diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts index 5cc52e489..2dfa3c3af 100644 --- a/packages/testnet-faucets/src/ts/handler.ts +++ b/packages/testnet-faucets/src/ts/handler.ts @@ -11,9 +11,9 @@ import { SignedOrder, Web3ProviderEngine, } from '0x.js'; -import { NonceTrackerSubprovider, PrivateKeyWalletSubprovider } from '@0xproject/subproviders'; -import { logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { NonceTrackerSubprovider, PrivateKeyWalletSubprovider } from '@0x/subproviders'; +import { logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as express from 'express'; import * as _ from 'lodash'; diff --git a/packages/testnet-faucets/src/ts/parameter_transformer.ts b/packages/testnet-faucets/src/ts/parameter_transformer.ts index 7320b1d1c..bed8eb99e 100644 --- a/packages/testnet-faucets/src/ts/parameter_transformer.ts +++ b/packages/testnet-faucets/src/ts/parameter_transformer.ts @@ -1,4 +1,4 @@ -import { addressUtils } from '@0xproject/utils'; +import { addressUtils } from '@0x/utils'; import { NextFunction, Request, Response } from 'express'; import * as _ from 'lodash'; diff --git a/packages/testnet-faucets/tslint.json b/packages/testnet-faucets/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/testnet-faucets/tslint.json +++ b/packages/testnet-faucets/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/tslint-config/CHANGELOG.json b/packages/tslint-config/CHANGELOG.json index 2a9b22922..99fbc7989 100644 --- a/packages/tslint-config/CHANGELOG.json +++ b/packages/tslint-config/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "1.0.9", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "timestamp": 1538693146, "version": "1.0.8", "changes": [ diff --git a/packages/tslint-config/CHANGELOG.md b/packages/tslint-config/CHANGELOG.md index 0486cb523..f0b429d29 100644 --- a/packages/tslint-config/CHANGELOG.md +++ b/packages/tslint-config/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.0.9 - _October 18, 2018_ + + * Dependencies updated + ## v1.0.8 - _October 4, 2018_ * Dependencies updated @@ -17,7 +21,7 @@ CHANGELOG * Dependencies updated -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Dependencies updated diff --git a/packages/tslint-config/README.md b/packages/tslint-config/README.md index d630ec84d..5614e5e54 100644 --- a/packages/tslint-config/README.md +++ b/packages/tslint-config/README.md @@ -1,11 +1,11 @@ -## @0xproject/tslint-config +## @0x/tslint-config TSLint configuration and custom linter rules used by 0xProject. ## Installation ```bash -yarn add --dev @0xproject/tslint-config +yarn add --dev @0x/tslint-config ``` ## Usage @@ -14,7 +14,7 @@ Add the following to your `tslint.json` file ```json { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } ``` @@ -43,13 +43,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/tslint-config yarn build +PKG=@0x/tslint-config yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/tslint-config yarn watch +PKG=@0x/tslint-config yarn watch ``` ### Clean diff --git a/packages/tslint-config/package.json b/packages/tslint-config/package.json index 9cd2ef88c..0a8c1b245 100644 --- a/packages/tslint-config/package.json +++ b/packages/tslint-config/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/tslint-config", - "version": "1.0.8", + "name": "@0x/tslint-config", + "version": "1.0.9", "engines": { "node": ">=6.12" }, diff --git a/packages/types/CHANGELOG.json b/packages/types/CHANGELOG.json index 106dc3281..84a06faa8 100644 --- a/packages/types/CHANGELOG.json +++ b/packages/types/CHANGELOG.json @@ -14,7 +14,8 @@ "note": "Add `AssetData` union type (`type AssetData = ERC20AssetData | ERC721AssetData`)", "pr": 1131 } - ] + ], + "timestamp": 1539871071 }, { "timestamp": 1538693146, diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index aeb056903..d1b8ea79c 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -5,6 +5,12 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.2.0 - _October 18, 2018_ + + * Added `EIP712Parameter` `EIP712Types` `EIP712TypedData` for EIP712 signing (#1102) + * Added `ZeroExTransaction` type for Exchange executeTransaction (#1102) + * Add `AssetData` union type (`type AssetData = ERC20AssetData | ERC721AssetData`) (#1131) + ## v1.1.4 - _October 4, 2018_ * Dependencies updated @@ -44,7 +50,7 @@ CHANGELOG * Add revert reasons for ERC721Token (#933) -## v1.0.1-rc.4 - _August 13, 2018_ +## v1.0.1-rc.4 - _August 14, 2018_ * Added SignerType to handle different signing prefix scenarios (#914) diff --git a/packages/types/README.md b/packages/types/README.md index c091b8302..136eb1940 100644 --- a/packages/types/README.md +++ b/packages/types/README.md @@ -1,25 +1,25 @@ -## @0xproject/types +## @0x/types Typescript types shared across 0x projects and packages ## Installation ```bash -yarn add -D @0xproject/types +yarn add -D @0x/types ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` ## Usage ```javascript -import { TransactionReceipt, TxData, TxDataPayable } from '@0xproject/types'; +import { TransactionReceipt, TxData, TxDataPayable } from '@0x/types'; ``` ## Contributing @@ -47,13 +47,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/types yarn build +PKG=@0x/types yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/types yarn watch +PKG=@0x/types yarn watch ``` ### Clean diff --git a/packages/types/package.json b/packages/types/package.json index 104f22178..fdd68a486 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/types", - "version": "1.1.4", + "name": "@0x/types", + "version": "1.2.0", "engines": { "node": ">=6.12" }, @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/types/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "make-promises-safe": "^1.1.0", "shx": "^0.2.2", "tslint": "5.11.0", @@ -32,7 +32,7 @@ "dependencies": { "@types/node": "*", "bignumber.js": "~4.1.0", - "ethereum-types": "^1.0.11" + "ethereum-types": "^1.1.1" }, "publishConfig": { "access": "public" diff --git a/packages/types/tslint.json b/packages/types/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/types/tslint.json +++ b/packages/types/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/typescript-typings/CHANGELOG.json b/packages/typescript-typings/CHANGELOG.json index 4a85fd592..e21e788b5 100644 --- a/packages/typescript-typings/CHANGELOG.json +++ b/packages/typescript-typings/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "3.0.3", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "timestamp": 1538693146, "version": "3.0.2", "changes": [ diff --git a/packages/typescript-typings/CHANGELOG.md b/packages/typescript-typings/CHANGELOG.md index 71ab1113b..df58bfc57 100644 --- a/packages/typescript-typings/CHANGELOG.md +++ b/packages/typescript-typings/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v3.0.3 - _October 18, 2018_ + + * Dependencies updated + ## v3.0.2 - _October 4, 2018_ * Dependencies updated @@ -33,7 +37,7 @@ CHANGELOG * Dependencies updated -## v1.0.4 - _August 13, 2018_ +## v1.0.4 - _August 14, 2018_ * Dependencies updated diff --git a/packages/typescript-typings/README.md b/packages/typescript-typings/README.md index 439cb6484..e3b4c044f 100644 --- a/packages/typescript-typings/README.md +++ b/packages/typescript-typings/README.md @@ -1,11 +1,11 @@ -## @0xproject/typescript-typings +## @0x/typescript-typings Type repository for external packages used by 0x. This is like our small version of [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped) ## Installation ```bash -yarn add -D @0xproject/typescript-typings +yarn add -D @0x/typescript-typings ``` ## Usage @@ -13,7 +13,7 @@ yarn add -D @0xproject/typescript-typings Add the following line within an `compilerOptions` section of your `tsconfig.json` ```json -"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"] +"typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"] ``` This will allow the TS compiler to first look into that repo and then fallback to DT types. @@ -43,13 +43,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/typescript-typings yarn build +PKG=@0x/typescript-typings yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/typescript-typings yarn watch +PKG=@0x/typescript-typings yarn watch ``` ### Clean diff --git a/packages/typescript-typings/package.json b/packages/typescript-typings/package.json index e03d78d51..6b9e67602 100644 --- a/packages/typescript-typings/package.json +++ b/packages/typescript-typings/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/typescript-typings", - "version": "3.0.2", + "name": "@0x/typescript-typings", + "version": "3.0.3", "engines": { "node": ">=6.12" }, @@ -27,7 +27,7 @@ "@types/bn.js": "^4.11.0", "@types/react": "*", "bignumber.js": "~4.1.0", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "popper.js": "1.14.3" }, "devDependencies": { diff --git a/packages/utils/CHANGELOG.json b/packages/utils/CHANGELOG.json index 237ebeecc..7594581d4 100644 --- a/packages/utils/CHANGELOG.json +++ b/packages/utils/CHANGELOG.json @@ -1,5 +1,14 @@ [ { + "timestamp": 1539871071, + "version": "2.0.3", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { "timestamp": 1538693146, "version": "2.0.2", "changes": [ diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index fa731ecf0..45b2cd0c2 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v2.0.3 - _October 18, 2018_ + + * Dependencies updated + ## v2.0.2 - _October 4, 2018_ * Dependencies updated @@ -41,7 +45,7 @@ CHANGELOG * Dependencies updated -## v1.0.5 - _August 13, 2018_ +## v1.0.5 - _August 14, 2018_ * Increased BigNumber decimal precision from 20 to 78 (#807) * Store different ABIs for events with same function signature and different amount of indexed arguments (#933) diff --git a/packages/utils/README.md b/packages/utils/README.md index c9a2f5846..0b15f00c5 100644 --- a/packages/utils/README.md +++ b/packages/utils/README.md @@ -1,25 +1,25 @@ -## @0xproject/utils +## @0x/utils Utils to be shared across 0x projects and packages ## Installation ```bash -yarn add @0xproject/utils +yarn add @0x/utils ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` ## Usage ```javascript -import { addressUtils, bigNumberConfigs, classUtils, intervalUtils, promisify } from '@0xproject/utils'; +import { addressUtils, bigNumberConfigs, classUtils, intervalUtils, promisify } from '@0x/utils'; ``` ## Troubleshooting @@ -62,13 +62,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/utils yarn build +PKG=@0x/utils yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/utils yarn watch +PKG=@0x/utils yarn watch ``` ### Clean diff --git a/packages/utils/package.json b/packages/utils/package.json index f365cf97f..f89cfda17 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/utils", - "version": "2.0.2", + "name": "@0x/utils", + "version": "2.0.3", "engines": { "node": ">=6.12" }, @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/utils/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/detect-node": "2.0.0", "@types/lodash": "4.14.104", "@types/mocha": "^2.2.42", @@ -41,13 +41,13 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", "@types/node": "*", "abortcontroller-polyfill": "^1.1.9", "bignumber.js": "~4.1.0", "detect-node": "2.0.3", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-util": "^5.1.1", "ethers": "~4.0.4", "isomorphic-fetch": "^2.2.1", diff --git a/packages/utils/src/abi_decoder.ts b/packages/utils/src/abi_decoder.ts index c0b2c7950..2da46db35 100644 --- a/packages/utils/src/abi_decoder.ts +++ b/packages/utils/src/abi_decoder.ts @@ -9,7 +9,7 @@ import { RawLog, SolidityTypes, } from 'ethereum-types'; -import { ethers } from 'ethers'; +import * as ethers from 'ethers'; import * as _ from 'lodash'; import { addressUtils } from './address_utils'; diff --git a/packages/utils/src/sign_typed_data_utils.ts b/packages/utils/src/sign_typed_data_utils.ts index cd5bcb42f..6963b9084 100644 --- a/packages/utils/src/sign_typed_data_utils.ts +++ b/packages/utils/src/sign_typed_data_utils.ts @@ -2,7 +2,7 @@ import * as ethUtil from 'ethereumjs-util'; import * as ethers from 'ethers'; import * as _ from 'lodash'; -import { EIP712Object, EIP712ObjectValue, EIP712TypedData, EIP712Types } from '@0xproject/types'; +import { EIP712Object, EIP712ObjectValue, EIP712TypedData, EIP712Types } from '@0x/types'; export const signTypedDataUtils = { /** diff --git a/packages/utils/tslint.json b/packages/utils/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/utils/tslint.json +++ b/packages/utils/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/web3-wrapper/CHANGELOG.json b/packages/web3-wrapper/CHANGELOG.json index be5c1fef6..6b554110f 100644 --- a/packages/web3-wrapper/CHANGELOG.json +++ b/packages/web3-wrapper/CHANGELOG.json @@ -1,5 +1,15 @@ [ { + "version": "3.1.1", + "changes": [ + { + "note": + "Fix bug in `getTransactionByHashAsync` which was causing the return value to have the wrong type (raw fields instead of unmarshalled fields).", + "pr": 1177 + } + ] + }, + { "version": "3.1.0", "changes": [ { @@ -11,7 +21,8 @@ "Web3Wrapper now throws when an RPC request contains an error field in the response. Previously errors could be swallowed and undefined returned.", "pr": 1102 } - ] + ], + "timestamp": 1539871071 }, { "version": "3.0.3", diff --git a/packages/web3-wrapper/CHANGELOG.md b/packages/web3-wrapper/CHANGELOG.md index 8f1dc0f3f..90d62953a 100644 --- a/packages/web3-wrapper/CHANGELOG.md +++ b/packages/web3-wrapper/CHANGELOG.md @@ -5,6 +5,11 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v3.1.0 - _October 18, 2018_ + + * Add `signTypedData` to perform EIP712 `eth_signTypedData`. (#1102) + * Web3Wrapper now throws when an RPC request contains an error field in the response. Previously errors could be swallowed and undefined returned. (#1102) + ## v3.0.3 - _October 4, 2018_ * Dependencies updated @@ -40,7 +45,7 @@ CHANGELOG * Stop exporting types: `CallTxDataBaseRPC` and `AbstractBlockRPC` (#924) * Export `AbiDecoder` class (#924) -## v1.2.0 - _August 13, 2018_ +## v1.2.0 - _August 14, 2018_ * Export marshaller to convert between RPC and user-space data formats (#938) * Export RPC types (#938) @@ -80,7 +85,7 @@ CHANGELOG * Dependencies updated -## v0.7.0 - _June 3, 2018_ +## v0.7.0 - _June 4, 2018_ * Add `web3Wrapper.getContractCodeAsync` (#675) * Add `web3Wrapper.getTransactionTraceAsync` (#675) diff --git a/packages/web3-wrapper/README.md b/packages/web3-wrapper/README.md index 06c788101..4402de19c 100644 --- a/packages/web3-wrapper/README.md +++ b/packages/web3-wrapper/README.md @@ -1,4 +1,4 @@ -## @0xproject/web3-wrapper +## @0x/web3-wrapper Web3-wrapper is a JSON-RPC client for Ethereum nodes. It is a type-safe alternative to [Web3.js](https://github.com/ethereum/web3.js/) written in TypeScript. @@ -7,14 +7,14 @@ Web3-wrapper is a JSON-RPC client for Ethereum nodes. It is a type-safe alternat ## Installation ```bash -yarn add @0xproject/web3-wrapper +yarn add @0x/web3-wrapper ``` If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: ```json "compilerOptions": { - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], } ``` @@ -43,13 +43,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/web3-wrapper yarn build +PKG=@0x/web3-wrapper yarn build ``` Or continuously rebuild on change: ```bash -PKG=@0xproject/web3-wrapper yarn watch +PKG=@0x/web3-wrapper yarn watch ``` ### Clean diff --git a/packages/web3-wrapper/package.json b/packages/web3-wrapper/package.json index 4d033e130..579957747 100644 --- a/packages/web3-wrapper/package.json +++ b/packages/web3-wrapper/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/web3-wrapper", - "version": "3.0.3", + "name": "@0x/web3-wrapper", + "version": "3.1.0", "engines": { "node": ">=6.12" }, @@ -35,7 +35,7 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/web3-wrapper/README.md", "devDependencies": { - "@0xproject/tslint-config": "^1.0.8", + "@0x/tslint-config": "^1.0.9", "@types/ganache-core": "^2.1.0", "@types/lodash": "4.14.104", "chai": "^4.0.1", @@ -53,11 +53,11 @@ "typescript": "3.0.1" }, "dependencies": { - "@0xproject/assert": "^1.0.13", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "ethereum-types": "^1.0.11", + "@0x/assert": "^1.0.14", + "@0x/json-schemas": "^2.0.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "ethereum-types": "^1.1.1", "ethereumjs-util": "^5.1.1", "ethers": "~4.0.4", "lodash": "^4.17.5" diff --git a/packages/web3-wrapper/src/index.ts b/packages/web3-wrapper/src/index.ts index 9bef06fd4..679563a2b 100644 --- a/packages/web3-wrapper/src/index.ts +++ b/packages/web3-wrapper/src/index.ts @@ -1,7 +1,7 @@ export { Web3Wrapper } from './web3_wrapper'; export { marshaller } from './marshaller'; -export { AbiDecoder } from '@0xproject/utils'; +export { AbiDecoder } from '@0x/utils'; export { BlockParam, diff --git a/packages/web3-wrapper/src/marshaller.ts b/packages/web3-wrapper/src/marshaller.ts index 572a322d6..299c6a64c 100644 --- a/packages/web3-wrapper/src/marshaller.ts +++ b/packages/web3-wrapper/src/marshaller.ts @@ -1,4 +1,4 @@ -import { addressUtils } from '@0xproject/utils'; +import { addressUtils } from '@0x/utils'; import { BlockParam, BlockParamLiteral, diff --git a/packages/web3-wrapper/src/utils.ts b/packages/web3-wrapper/src/utils.ts index 0b568aac5..c68587632 100644 --- a/packages/web3-wrapper/src/utils.ts +++ b/packages/web3-wrapper/src/utils.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; export const utils = { diff --git a/packages/web3-wrapper/src/web3_wrapper.ts b/packages/web3-wrapper/src/web3_wrapper.ts index 726246f1a..56877fef3 100644 --- a/packages/web3-wrapper/src/web3_wrapper.ts +++ b/packages/web3-wrapper/src/web3_wrapper.ts @@ -1,6 +1,6 @@ -import { assert } from '@0xproject/assert'; -import { schemas } from '@0xproject/json-schemas'; -import { AbiDecoder, addressUtils, BigNumber, intervalUtils, promisify } from '@0xproject/utils'; +import { assert } from '@0x/assert'; +import { schemas } from '@0x/json-schemas'; +import { AbiDecoder, addressUtils, BigNumber, intervalUtils, promisify } from '@0x/utils'; import { BlockParam, BlockParamLiteral, @@ -23,7 +23,13 @@ import { import * as _ from 'lodash'; import { marshaller } from './marshaller'; -import { BlockWithoutTransactionDataRPC, BlockWithTransactionDataRPC, NodeType, Web3WrapperErrors } from './types'; +import { + BlockWithoutTransactionDataRPC, + BlockWithTransactionDataRPC, + NodeType, + TransactionRPC, + Web3WrapperErrors, +} from './types'; import { utils } from './utils'; const BASE_TEN = 10; @@ -145,7 +151,7 @@ export class Web3Wrapper { if (_.isUndefined((provider as any).sendAsync)) { // Web3@1.0 provider doesn't support synchronous http requests, // so it only has an async `send` method, instead of a `send` and `sendAsync` in web3@0.x.x` - // We re-assign the send method so that Web3@1.0 providers work with @0xproject/web3-wrapper + // We re-assign the send method so that Web3@1.0 providers work with @0x/web3-wrapper (provider as any).sendAsync = (provider as any).send; } this.abiDecoder = new AbiDecoder([]); @@ -228,10 +234,11 @@ export class Web3Wrapper { */ public async getTransactionByHashAsync(txHash: string): Promise<Transaction> { assert.isHexString('txHash', txHash); - const transaction = await this.sendRawPayloadAsync<Transaction>({ + const transactionRpc = await this.sendRawPayloadAsync<TransactionRPC>({ method: 'eth_getTransactionByHash', params: [txHash], }); + const transaction = marshaller.unmarshalTransaction(transactionRpc); return transaction; } /** diff --git a/packages/web3-wrapper/tslint.json b/packages/web3-wrapper/tslint.json index ffaefe83a..dd9053357 100644 --- a/packages/web3-wrapper/tslint.json +++ b/packages/web3-wrapper/tslint.json @@ -1,3 +1,3 @@ { - "extends": ["@0xproject/tslint-config"] + "extends": ["@0x/tslint-config"] } diff --git a/packages/website/README.md b/packages/website/README.md index 2edc17cd9..d82d045a6 100644 --- a/packages/website/README.md +++ b/packages/website/README.md @@ -33,13 +33,13 @@ yarn install To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: ```bash -PKG=@0xproject/website yarn build +PKG=@0x/website yarn build ``` ### Run dev server ```bash -PKG=@0xproject/website yarn watch +PKG=@0x/website yarn watch ``` Visit [0xproject.localhost:3572](http://0xproject.localhost:3572) in your browser. diff --git a/packages/website/less/all.less b/packages/website/less/all.less index c62db0d20..3747e4860 100644 --- a/packages/website/less/all.less +++ b/packages/website/less/all.less @@ -34,17 +34,7 @@ a { } } -#documentation { - p { - line-height: 1.5; - } - - .comment { - p { - margin: 0px; - } - } - +#scroll_container { .typeTooltip { border: 1px solid lightgray; opacity: 1; @@ -83,6 +73,7 @@ a { code { border: 1px solid #e3eefe; + border-radius: 4px; font-family: 'Roboto Mono'; background-color: #f2f6ff !important; // lightBlue } diff --git a/packages/website/md/docs/asset_buyer/installation.md b/packages/website/md/docs/asset_buyer/installation.md index 483ee2b65..3c0c95068 100644 --- a/packages/website/md/docs/asset_buyer/installation.md +++ b/packages/website/md/docs/asset_buyer/installation.md @@ -1,17 +1,17 @@ -**Install** +#### Install ```bash -yarn add @0xproject/asset-buyer +yarn add @0x/asset-buyer ``` -**Import** +#### Import ```javascript -import { AssetBuyer } from '@0xproject/asset-buyer'; +import { AssetBuyer } from '@0x/asset-buyer'; ``` or ```javascript -var AssetBuyer = require('@0xproject/asset-buyer').AssetBuyer; +var AssetBuyer = require('@0x/asset-buyer').AssetBuyer; ``` diff --git a/packages/website/md/docs/asset_buyer/introduction.md b/packages/website/md/docs/asset_buyer/introduction.md index a40d20cc9..a59539ac6 100644 --- a/packages/website/md/docs/asset_buyer/introduction.md +++ b/packages/website/md/docs/asset_buyer/introduction.md @@ -1 +1 @@ -Welcome to the [@0xproject/asset-buyer](https://github.com/0xProject/0x-monorepo/tree/development/packages/asset-buyer) documentation! AssetBuyer is a library that provides an easy way to buy any asset with ETH in one click, leveraging 0x liquidity and the [Forwarder contract](https://0xproject.com/docs/contracts#Forwarder). +Welcome to the [asset-buyer](https://github.com/0xProject/0x-monorepo/tree/development/packages/asset-buyer) documentation! AssetBuyer is a library that provides an easy way to buy any asset with ETH in one click, leveraging 0x liquidity and the [Forwarder contract](https://0xproject.com/docs/contracts#Forwarder). diff --git a/packages/website/md/docs/asset_buyer/usage.md b/packages/website/md/docs/asset_buyer/usage.md index 6462d938e..209c15062 100644 --- a/packages/website/md/docs/asset_buyer/usage.md +++ b/packages/website/md/docs/asset_buyer/usage.md @@ -1,4 +1,4 @@ -**Construction** +#### Construction Connecting to a standard relayer API compliant url: @@ -16,7 +16,7 @@ const orders = []; // get these from your own API, a relayer, a friend, from any const assetBuyer = AssetBuyer.getAssetBuyerForProvidedOrders(provider, orders); ``` -**Get a quote** +#### Get a quote A [BuyQuote](#types-BuyQuote) object contains enough information to display buy information to an end user @@ -30,7 +30,7 @@ console.log(quoteInfo.feeAmount); // a portion of the total ethAmount above that console.log(quoteInfo.ethPerAssetPrice); // the rate that this quote provides (e.g. 0.0035ETH / REP) ``` -**Perform a buy** +#### Perform a buy Pass the [BuyQuote](#types-BuyQuote) object from above back to the assetBuyer in order to initiate the buy transaction diff --git a/packages/website/md/docs/connect/1.0.0/installation.md b/packages/website/md/docs/connect/1/installation.md index 950bf92ca..950bf92ca 100644 --- a/packages/website/md/docs/connect/1.0.0/installation.md +++ b/packages/website/md/docs/connect/1/installation.md diff --git a/packages/website/md/docs/connect/1.0.0/introduction.md b/packages/website/md/docs/connect/1/introduction.md index 4e3039442..4e3039442 100644 --- a/packages/website/md/docs/connect/1.0.0/introduction.md +++ b/packages/website/md/docs/connect/1/introduction.md diff --git a/packages/website/md/docs/connect/2.0.0/introduction.md b/packages/website/md/docs/connect/2/introduction.md index 8e251b327..8e251b327 100644 --- a/packages/website/md/docs/connect/2.0.0/introduction.md +++ b/packages/website/md/docs/connect/2/introduction.md diff --git a/packages/website/md/docs/connect/3/installation.md b/packages/website/md/docs/connect/3/installation.md new file mode 100644 index 000000000..6797d9633 --- /dev/null +++ b/packages/website/md/docs/connect/3/installation.md @@ -0,0 +1,15 @@ +**Install** + +```bash +npm install @0x/connect --save +``` + +**Import** + +```javascript +import { HttpClient } from '@0x/connect'; +``` + +### Wiki + +Check out our [0x Connect introduction tutorial](https://0xproject.com/wiki#Intro-Tutorial) for information on how to integrate relayers into your application. diff --git a/packages/website/md/docs/contract_wrappers/installation.md b/packages/website/md/docs/contract_wrappers/1/installation.md index d5c7fbdba..d5c7fbdba 100644 --- a/packages/website/md/docs/contract_wrappers/installation.md +++ b/packages/website/md/docs/contract_wrappers/1/installation.md diff --git a/packages/website/md/docs/contract_wrappers/introduction.md b/packages/website/md/docs/contract_wrappers/1/introduction.md index ccc81b373..ccc81b373 100644 --- a/packages/website/md/docs/contract_wrappers/introduction.md +++ b/packages/website/md/docs/contract_wrappers/1/introduction.md diff --git a/packages/website/md/docs/contract_wrappers/2/installation.md b/packages/website/md/docs/contract_wrappers/2/installation.md new file mode 100644 index 000000000..50610550a --- /dev/null +++ b/packages/website/md/docs/contract_wrappers/2/installation.md @@ -0,0 +1,11 @@ +**Install** + +```bash +npm install @0x/contract-wrappers --save +``` + +**Import** + +```javascript +import { ContractWrappers } from '@0x/contract-wrappers'; +``` diff --git a/packages/website/md/docs/json_schemas/1.0.0/installation.md b/packages/website/md/docs/json_schemas/1/installation.md index 50a37bae1..50a37bae1 100644 --- a/packages/website/md/docs/json_schemas/1.0.0/installation.md +++ b/packages/website/md/docs/json_schemas/1/installation.md diff --git a/packages/website/md/docs/json_schemas/1.0.0/introduction.md b/packages/website/md/docs/json_schemas/1/introduction.md index 5b2e90387..5b2e90387 100644 --- a/packages/website/md/docs/json_schemas/1.0.0/introduction.md +++ b/packages/website/md/docs/json_schemas/1/introduction.md diff --git a/packages/website/md/docs/json_schemas/1.0.0/schemas.md b/packages/website/md/docs/json_schemas/1/schemas.md index fcf5d8df6..fcf5d8df6 100644 --- a/packages/website/md/docs/json_schemas/1.0.0/schemas.md +++ b/packages/website/md/docs/json_schemas/1/schemas.md diff --git a/packages/website/md/docs/json_schemas/1.0.0/usage.md b/packages/website/md/docs/json_schemas/1/usage.md index 68b801153..68b801153 100644 --- a/packages/website/md/docs/json_schemas/1.0.0/usage.md +++ b/packages/website/md/docs/json_schemas/1/usage.md diff --git a/packages/website/md/docs/json_schemas/2.0.0/schemas.md b/packages/website/md/docs/json_schemas/2.0.0/schemas.md deleted file mode 100644 index ec7cf6f15..000000000 --- a/packages/website/md/docs/json_schemas/2.0.0/schemas.md +++ /dev/null @@ -1,40 +0,0 @@ -Basic Schemas - -* [Address type](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/address.json) -* [Number type](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/number.json) -* [Hex type](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/hex.json) -* [JS number](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/js_number.json) - -0x Protocol Schemas - -* [Order](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/order_schema.json) -* [SignedOrder](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/signed_order_schema.json) -* [OrderHash](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/order_hash_schema.json) -* [ECSignature](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/ec_signature_schema.json) - -0x.js Schemas - -* [BlockParam](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/block_param_schema.json) -* [BlockRange](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/block_range_schema.json) -* [IndexFilter Values](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/index_filter_values_schema.json) -* [OrderFillRequests](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/order_fill_requests_schema.json) -* [OrderCancellationRequests](https://github.com/0xProjet/0x-monorepo/blob/development/packages/json-schemas/schemas/order_cancel_schema.json) -* [OrderFillOrKillRequests](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json) -* [SignedOrders](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/signed_orders_schema.json) -* [Token](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/token_schema.json) -* [TxData](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/tx_data_schema.json) - -Standard Relayer API Schemas - -* [Paginated collection](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/paginated_collection_schema.json) -* [Error response](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_error_response_schema.json) -* [Order config payload](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json) -* [Order config response](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json) -* [Orders channel subscribe payload](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json) -* [Orders channel subscribe](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json) -* [Orders channel update](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json) -* [Orderbook response](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.json) -* [Asset pairs](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_asset_pairs_schema.json) -* [Trade info](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_asset_trade_info_schema.json) -* [Asset pairs response](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_asset_pairs_response_schema.json) -* [Fee recipients response](https://github.com/0xProject/0x-monorepo/blob/development/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json) diff --git a/packages/website/md/docs/json_schemas/2/schemas.md b/packages/website/md/docs/json_schemas/2/schemas.md new file mode 100644 index 000000000..8ea6c8e85 --- /dev/null +++ b/packages/website/md/docs/json_schemas/2/schemas.md @@ -0,0 +1,40 @@ +Basic Schemas + +* [Address type](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/address_schema.json) +* [Number type](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/number_schema.json) +* [Hex type](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/hex_schema.json) +* [JS number](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/js_number.json) + +0x Protocol Schemas + +* [Order](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_schema.json) +* [SignedOrder](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/signed_order_schema.json) +* [OrderHash](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_hash_schema.json) +* [ECSignature](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/ec_signature_schema.json) + +0x.js Schemas + +* [BlockParam](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/block_param_schema.json) +* [BlockRange](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/block_range_schema.json) +* [IndexFilter Values](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/index_filter_values_schema.json) +* [OrderFillRequests](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_fill_requests_schema.json) +* [OrderCancellationRequests](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_cancel_schema.json) +* [OrderFillOrKillRequests](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json) +* [SignedOrders](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/signed_orders_schema.json) +* [Token](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/token_schema.json) +* [TxData](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/tx_data_schema.json) + +Standard Relayer API Schemas + +* [Paginated collection](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/paginated_collection_schema.json) +* [Error response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_error_response_schema.json) +* [Order config payload](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json) +* [Order config response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json) +* [Orders channel subscribe payload](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json) +* [Orders channel subscribe](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json) +* [Orders channel update](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json) +* [Orderbook response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.json) +* [Asset pairs](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_asset_data_pairs_schema.json) +* [Trade info](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json) +* [Asset pairs response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json) +* [Fee recipients response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json) diff --git a/packages/website/md/docs/json_schemas/3/installation.md b/packages/website/md/docs/json_schemas/3/installation.md new file mode 100644 index 000000000..a99886113 --- /dev/null +++ b/packages/website/md/docs/json_schemas/3/installation.md @@ -0,0 +1,17 @@ +**Install** + +```bash +yarn add @0x/json-schemas +``` + +**Import** + +```javascript +import { schemas } from '@0x/json-schemas'; +``` + +or + +```javascript +var schemas = require('@0x/json-schemas').schemas; +``` diff --git a/packages/website/md/docs/json_schemas/3/introduction.md b/packages/website/md/docs/json_schemas/3/introduction.md new file mode 100644 index 000000000..0039d014a --- /dev/null +++ b/packages/website/md/docs/json_schemas/3/introduction.md @@ -0,0 +1,3 @@ +Welcome to the [json-schemas](https://github.com/0xProject/0x-monorepo/tree/development/packages/json-schemas) documentation! This package provides JSON schemas for validating 0x Protocol & Standard Relayer API data structures. It provides both the raw JSON schemas and a schema validator class to interact with them from a JS project. + +If you are not using a Javascript-based language for your project, you can use a Javascript environment to render the JSON schemas within this package and use them together with a [JSON Schema](http://json-schema.org/) implementation in your [language of choice](http://json-schema.org/implementations.html) (e.g Python, Haskell, Go, C, C++, Rust, Ruby, Scala, etc...). diff --git a/packages/website/md/docs/json_schemas/3/schemas.md b/packages/website/md/docs/json_schemas/3/schemas.md new file mode 100644 index 000000000..99aff7b5a --- /dev/null +++ b/packages/website/md/docs/json_schemas/3/schemas.md @@ -0,0 +1,41 @@ +Basic Schemas + +* [Address type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/address_schema.json) +* [Number type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/number_schema.json) +* [Whole number type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/whole_number_schema.json) +* [Hex type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/hex_schema.json) +* [JS number](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/js_number.json) + +0x Protocol Schemas + +* [Order](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_schema.json) +* [SignedOrder](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/signed_order_schema.json) +* [OrderHash](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_hash_schema.json) +* [ECSignature](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/ec_signature_schema.json) + +0x.js Schemas + +* [BlockParam](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/block_param_schema.json) +* [BlockRange](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/block_range_schema.json) +* [IndexFilter Values](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/index_filter_values_schema.json) +* [OrderFillRequests](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_fill_requests_schema.json) +* [OrderCancellationRequests](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_cancel_schema.json) +* [OrderFillOrKillRequests](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json) +* [SignedOrders](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/signed_orders_schema.json) +* [Token](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/token_schema.json) +* [TxData](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/tx_data_schema.json) + +Standard Relayer API Schemas + +* [Paginated collection](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/paginated_collection_schema.json) +* [Error response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_error_response_schema.json) +* [Order config payload](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json) +* [Order config response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json) +* [Orders channel subscribe payload](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json) +* [Orders channel subscribe](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json) +* [Orders channel update](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json) +* [Orderbook response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.json) +* [Asset pairs](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_asset_data_pairs_schema.json) +* [Trade info](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json) +* [Asset pairs response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json) +* [Fee recipients response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json) diff --git a/packages/website/md/docs/json_schemas/3/usage.md b/packages/website/md/docs/json_schemas/3/usage.md new file mode 100644 index 000000000..2b72eeaad --- /dev/null +++ b/packages/website/md/docs/json_schemas/3/usage.md @@ -0,0 +1,14 @@ +The following example shows you how to validate a 0x order using the `@0x/json-schemas` package. + +```javascript +import {SchemaValidator, ValidatorResult, schemas} from '@0x/json-schemas'; + +const {orderSchema} = schemas; +const validator = new SchemaValidator(); + +const order = { + ... +}; +const validatorResult: ValidatorResult = validator.validate(order, orderSchema); // Contains all errors +const isValid: boolean = validator.isValid(order, orderSchema); // Only returns boolean +``` diff --git a/packages/website/md/docs/order_utils/1.0.0/installation.md b/packages/website/md/docs/order_utils/1/installation.md index 68a7cf960..68a7cf960 100644 --- a/packages/website/md/docs/order_utils/1.0.0/installation.md +++ b/packages/website/md/docs/order_utils/1/installation.md diff --git a/packages/website/md/docs/order_utils/1.0.0/introduction.md b/packages/website/md/docs/order_utils/1/introduction.md index d5f3f2925..d5f3f2925 100644 --- a/packages/website/md/docs/order_utils/1.0.0/introduction.md +++ b/packages/website/md/docs/order_utils/1/introduction.md diff --git a/packages/website/md/docs/order_utils/2/installation.md b/packages/website/md/docs/order_utils/2/installation.md new file mode 100644 index 000000000..d4bac6a53 --- /dev/null +++ b/packages/website/md/docs/order_utils/2/installation.md @@ -0,0 +1,17 @@ +**Install** + +```bash +yarn add @0x/order-utils +``` + +**Import** + +```javascript +import { createSignedOrderAsync } from '@0x/order-utils'; +``` + +or + +```javascript +var createSignedOrderAsync = require('@0x/order-utils').createSignedOrderAsync; +``` diff --git a/packages/website/md/docs/order_utils/2/introduction.md b/packages/website/md/docs/order_utils/2/introduction.md new file mode 100644 index 000000000..567896603 --- /dev/null +++ b/packages/website/md/docs/order_utils/2/introduction.md @@ -0,0 +1 @@ +Welcome to the [order-utils](https://github.com/0xProject/0x-monorepo/tree/development/packages/order-utils) documentation! Order utils is a set of utils around creating, signing, validating 0x orders. diff --git a/packages/website/md/docs/order_watcher/installation.md b/packages/website/md/docs/order_watcher/1/installation.md index 4b28f583d..4b28f583d 100644 --- a/packages/website/md/docs/order_watcher/installation.md +++ b/packages/website/md/docs/order_watcher/1/installation.md diff --git a/packages/website/md/docs/order_watcher/introduction.md b/packages/website/md/docs/order_watcher/1/introduction.md index f922d922f..f922d922f 100644 --- a/packages/website/md/docs/order_watcher/introduction.md +++ b/packages/website/md/docs/order_watcher/1/introduction.md diff --git a/packages/website/md/docs/order_watcher/2/installation.md b/packages/website/md/docs/order_watcher/2/installation.md new file mode 100644 index 000000000..883eb40e5 --- /dev/null +++ b/packages/website/md/docs/order_watcher/2/installation.md @@ -0,0 +1,17 @@ +**Install** + +```bash +yarn add @0x/order-watcher +``` + +**Import** + +```javascript +import { OrderWatcher } from '@0x/order-watcher'; +``` + +or + +```javascript +var OrderWatcher = require('@0x/order-utils').OrderWatcher; +``` diff --git a/packages/website/md/docs/order_watcher/2/introduction.md b/packages/website/md/docs/order_watcher/2/introduction.md new file mode 100644 index 000000000..b2d574053 --- /dev/null +++ b/packages/website/md/docs/order_watcher/2/introduction.md @@ -0,0 +1 @@ +Welcome to the [order-watcher](https://github.com/0xProject/0x-monorepo/tree/development/packages/order-watcher) documentation! OrderWatcher is a daemon that efficiently watches a set of orders, emitting events whenever the validity of an order changes. It can be used by relayers to prune an orderbook, or by traders to keep orders fetched from a Relayer up-to-date. diff --git a/packages/website/md/docs/smart_contracts/1.0.0/introduction.md b/packages/website/md/docs/smart_contracts/1/introduction.md index 79a8f00fd..79a8f00fd 100644 --- a/packages/website/md/docs/smart_contracts/1.0.0/introduction.md +++ b/packages/website/md/docs/smart_contracts/1/introduction.md diff --git a/packages/website/md/docs/smart_contracts/2.0.0/introduction.md b/packages/website/md/docs/smart_contracts/2/introduction.md index 4aa31db3d..4aa31db3d 100644 --- a/packages/website/md/docs/smart_contracts/2.0.0/introduction.md +++ b/packages/website/md/docs/smart_contracts/2/introduction.md diff --git a/packages/website/md/docs/sol-compiler/installation.md b/packages/website/md/docs/sol-compiler/1/installation.md index 9c8561d9b..9c8561d9b 100644 --- a/packages/website/md/docs/sol-compiler/installation.md +++ b/packages/website/md/docs/sol-compiler/1/installation.md diff --git a/packages/website/md/docs/sol-compiler/introduction.md b/packages/website/md/docs/sol-compiler/1/introduction.md index fcd80f47b..fcd80f47b 100644 --- a/packages/website/md/docs/sol-compiler/introduction.md +++ b/packages/website/md/docs/sol-compiler/1/introduction.md diff --git a/packages/website/md/docs/sol-compiler/usage.md b/packages/website/md/docs/sol-compiler/1/usage.md index 79c9b32ba..79c9b32ba 100644 --- a/packages/website/md/docs/sol-compiler/usage.md +++ b/packages/website/md/docs/sol-compiler/1/usage.md diff --git a/packages/website/md/docs/sol-compiler/2/installation.md b/packages/website/md/docs/sol-compiler/2/installation.md new file mode 100644 index 000000000..7e7b690fe --- /dev/null +++ b/packages/website/md/docs/sol-compiler/2/installation.md @@ -0,0 +1,23 @@ +#### CLI Installation + +```bash +yarn global add @0x/sol-compiler +``` + +#### API Installation + +```bash +yarn add @0x/sol-compiler +``` + +**Import** + +```typescript +import { Compiler } from '@0x/sol-compiler'; +``` + +or + +```javascript +var Compiler = require('@0x/sol-compiler').Compiler; +``` diff --git a/packages/website/md/docs/sol-compiler/2/usage.md b/packages/website/md/docs/sol-compiler/2/usage.md new file mode 100644 index 000000000..68e5a988f --- /dev/null +++ b/packages/website/md/docs/sol-compiler/2/usage.md @@ -0,0 +1,24 @@ +#### CLI Usage + +```bash +$ sol-compiler +Options: + --version Show version number [boolean] + --contracts-dir path of contracts directory to compile [string] + --artifacts-dir path to write contracts artifacts to [string] + --contracts comma separated list of contracts to compile + [string] [default: "*"] + --help Show help [boolean] +``` + +#### API Usage + +```typescript +import { Compiler } from '@0x/sol-compiler'; + +const compiler = new Compiler(); + +(async () => { + await compiler.compileAllAsync(); +})().catch(console.log); +``` diff --git a/packages/website/md/docs/sol_cov/installation.md b/packages/website/md/docs/sol_cov/1/installation.md index b9ce25a5f..b9ce25a5f 100644 --- a/packages/website/md/docs/sol_cov/installation.md +++ b/packages/website/md/docs/sol_cov/1/installation.md diff --git a/packages/website/md/docs/sol_cov/introduction.md b/packages/website/md/docs/sol_cov/1/introduction.md index 7064a3554..7064a3554 100644 --- a/packages/website/md/docs/sol_cov/introduction.md +++ b/packages/website/md/docs/sol_cov/1/introduction.md diff --git a/packages/website/md/docs/sol_cov/usage.md b/packages/website/md/docs/sol_cov/1/usage.md index c747005fb..c747005fb 100644 --- a/packages/website/md/docs/sol_cov/usage.md +++ b/packages/website/md/docs/sol_cov/1/usage.md diff --git a/packages/website/md/docs/sol_cov/2/installation.md b/packages/website/md/docs/sol_cov/2/installation.md new file mode 100644 index 000000000..1d4557cf5 --- /dev/null +++ b/packages/website/md/docs/sol_cov/2/installation.md @@ -0,0 +1,17 @@ +**Install** + +```bash +yarn add @0x/sol-cov +``` + +**Import** + +```javascript +import { CoverageSubprovider } from '@0x/sol-cov'; +``` + +or + +```javascript +var CoverageSubprovider = require('@0x/sol-cov').CoverageSubprovider; +``` diff --git a/packages/website/md/docs/sol_cov/2/introduction.md b/packages/website/md/docs/sol_cov/2/introduction.md new file mode 100644 index 000000000..ac3256845 --- /dev/null +++ b/packages/website/md/docs/sol_cov/2/introduction.md @@ -0,0 +1 @@ +Welcome to the [sol-cov](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-cov) documentation! Sol-cov is a Solidity coverage tool for your smart contract tests. diff --git a/packages/website/md/docs/sol_cov/2/usage.md b/packages/website/md/docs/sol_cov/2/usage.md new file mode 100644 index 000000000..d1c76474b --- /dev/null +++ b/packages/website/md/docs/sol_cov/2/usage.md @@ -0,0 +1,62 @@ +Sol-cov uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `CoverageSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with ProviderEngine, please read the [Web3 Provider explained](https://0xproject.com/wiki#Web3-Provider-Explained) wiki article. + +The CoverageSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot. + +Coverage subprovider needs some info about your contracts (`srcMap`, `bytecode`). It gets that info from your project's artifacts. Some frameworks have their own artifact format. Some artifact formats don't actually contain all the neccessary data. + +In order to use `CoverageSubprovider` with your favorite framework you need to pass an `artifactsAdapter` to it. + +### Sol-compiler + +If you are generating your artifacts with [@0x/sol-compiler](https://0xproject.com/docs/sol-compiler) you can use the `SolCompilerArtifactsAdapter` we've implemented for you. + +```typescript +import { SolCompilerArtifactsAdapter } from '@0x/sol-cov'; +const artifactsPath = 'src/artifacts'; +const contractsPath = 'src/contracts'; +const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contractsPath); +``` + +### Truffle + +If your project is using [Truffle](https://truffleframework.com/), we've written a `TruffleArtifactsAdapter`for you. + +```typescript +import { TruffleArtifactAdapter } from '@0x/sol-cov'; +const contractsPath = 'src/contracts'; +const artifactAdapter = new TruffleArtifactAdapter(contractsDir); +``` + +Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`. + +### Other framework/toolset + +You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`. +Look at the code of the two adapters above for examples. + +### Usage + +```typescript +import { CoverageSubprovider } from '@0x/sol-cov'; +import ProviderEngine = require('web3-provider-engine'); + +const provider = new ProviderEngine(); + +const artifactsPath = 'src/artifacts'; +const contractsPath = 'src/contracts'; +const networkId = 50; +// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from. +const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631'; +const isVerbose = true; +const coverageSubprovider = new CoverageSubprovider(artifactsAdapter, defaultFromAddress, isVerbose); + +provider.addProvider(coverageSubprovider); +``` + +After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call: + +```typescript +await coverageSubprovider.writeCoverageAsync(); +``` + +This will create a `coverage.json` file in a `coverage` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/coverage.json.md) - so you can use it with any of the existing Istanbul reporters. diff --git a/packages/website/md/docs/subproviders/installation.md b/packages/website/md/docs/subproviders/1/installation.md index a049ff0ec..a049ff0ec 100644 --- a/packages/website/md/docs/subproviders/installation.md +++ b/packages/website/md/docs/subproviders/1/installation.md diff --git a/packages/website/md/docs/subproviders/introduction.md b/packages/website/md/docs/subproviders/1/introduction.md index 835201064..835201064 100644 --- a/packages/website/md/docs/subproviders/introduction.md +++ b/packages/website/md/docs/subproviders/1/introduction.md diff --git a/packages/website/md/docs/subproviders/ledger_node_hid.md b/packages/website/md/docs/subproviders/1/ledger_node_hid.md index 3089817af..3089817af 100644 --- a/packages/website/md/docs/subproviders/ledger_node_hid.md +++ b/packages/website/md/docs/subproviders/1/ledger_node_hid.md diff --git a/packages/website/md/docs/subproviders/2/installation.md b/packages/website/md/docs/subproviders/2/installation.md new file mode 100644 index 000000000..025dd0dee --- /dev/null +++ b/packages/website/md/docs/subproviders/2/installation.md @@ -0,0 +1,15 @@ +```bash +npm install @0x/subproviders --save +``` + +**Import** + +```typescript +import { LedgerSubprovider } from '@0x/subproviders'; +``` + +or + +```javascript +var LedgerSubprovider = require('@0x/subproviders').LedgerSubprovider; +``` diff --git a/packages/website/md/docs/web3_wrapper/installation.md b/packages/website/md/docs/web3_wrapper/1/installation.md index 92794d9b0..92794d9b0 100644 --- a/packages/website/md/docs/web3_wrapper/installation.md +++ b/packages/website/md/docs/web3_wrapper/1/installation.md diff --git a/packages/website/md/docs/web3_wrapper/introduction.md b/packages/website/md/docs/web3_wrapper/1/introduction.md index 17bd316f1..17bd316f1 100644 --- a/packages/website/md/docs/web3_wrapper/introduction.md +++ b/packages/website/md/docs/web3_wrapper/1/introduction.md diff --git a/packages/website/md/docs/web3_wrapper/2/installation.md b/packages/website/md/docs/web3_wrapper/2/installation.md new file mode 100644 index 000000000..14c4f066c --- /dev/null +++ b/packages/website/md/docs/web3_wrapper/2/installation.md @@ -0,0 +1,25 @@ +**Install** + +```bash +npm install @0x/web3-wrapper --save +``` + +**Import** + +```javascript +import { Web3Wrapper } from '@0x/web3-wrapper'; +``` + +or + +```javascript +var Web3Wrapper = require('@0x/web3-wrapper').Web3Wrapper; +``` + +If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: + +``` +"include": [ + "./node_modules/web3-typescript-typings/index.d.ts", +] +``` diff --git a/packages/website/package.json b/packages/website/package.json index efab95c80..771b1b908 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { - "name": "@0xproject/website", - "version": "0.0.54", + "name": "@0x/website", + "version": "0.0.55", "engines": { "node": ">=6.12" }, @@ -19,23 +19,22 @@ "author": "Fabio Berger", "license": "Apache-2.0", "dependencies": { - "0x.js": "^0.38.6", - "@0xproject/contract-wrappers": "^2.0.2", - "@0xproject/json-schemas": "^1.0.7", - "@0xproject/order-utils": "^1.0.7", - "@0xproject/react-docs": "^1.0.13", - "@0xproject/react-shared": "^1.0.15", - "@0xproject/subproviders": "^2.0.7", - "@0xproject/types": "^1.1.4", - "@0xproject/typescript-typings": "^3.0.2", - "@0xproject/utils": "^2.0.2", - "@0xproject/web3-wrapper": "^3.0.3", + "@0x/contract-wrappers": "^3.0.0", + "@0x/json-schemas": "^2.0.0", + "@0x/order-utils": "^2.0.0", + "@0x/react-docs": "^1.0.14", + "@0x/react-shared": "^1.0.17", + "@0x/subproviders": "^2.1.0", + "@0x/types": "^1.2.0", + "@0x/typescript-typings": "^3.0.3", + "@0x/utils": "^2.0.3", + "@0x/web3-wrapper": "^3.1.0", "accounting": "^0.4.1", "basscss": "^8.0.3", "blockies": "^0.0.2", "bowser": "^1.9.3", "deep-equal": "^1.0.1", - "ethereum-types": "^1.0.11", + "ethereum-types": "^1.1.1", "ethereumjs-util": "^5.1.1", "find-versions": "^2.0.0", "jsonschema": "^1.2.0", @@ -53,8 +52,7 @@ "react-helmet": "^5.2.0", "react-popper": "^1.0.0-beta.6", "react-redux": "^5.0.3", - "react-router-dom": "^4.1.1", - "react-scroll": "0xproject/react-scroll#similar-to-pr-330", + "react-scroll": "0xproject/react-scroll#pr-330-and-replace-state", "react-tooltip": "^3.2.7", "react-typist": "^2.0.4", "redux": "^3.6.0", @@ -83,7 +81,6 @@ "@types/react-dom": "^16.0.7", "@types/react-helmet": "^5.0.6", "@types/react-redux": "^4.4.37", - "@types/react-router-dom": "^4.0.4", "@types/react-scroll": "1.5.3", "@types/react-tap-event-plugin": "0.0.30", "@types/redux": "^3.6.0", diff --git a/packages/website/public/css/basscss_responsive_custom.css b/packages/website/public/css/basscss_responsive_custom.css index 5f8bd9117..92a681cb1 100644 --- a/packages/website/public/css/basscss_responsive_custom.css +++ b/packages/website/public/css/basscss_responsive_custom.css @@ -26,6 +26,10 @@ .sm-right { float: right; } + .sm-justify-end { + ms-flex-pack: end; + justify-content: flex-end; + } } @media (min-width: 52em) { @@ -54,6 +58,10 @@ .md-right { float: right; } + .md-justify-end { + ms-flex-pack: end; + justify-content: flex-end; + } } @media (min-width: 64em) { @@ -82,4 +90,8 @@ .lg-right { float: right; } + .lg-justify-end { + ms-flex-pack: end; + justify-content: flex-end; + } } diff --git a/packages/website/public/images/developers/tutorials/0x_order_basics.svg b/packages/website/public/images/developers/tutorials/0x_order_basics.svg new file mode 100644 index 000000000..57b04dfa5 --- /dev/null +++ b/packages/website/public/images/developers/tutorials/0x_order_basics.svg @@ -0,0 +1 @@ +<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72"><defs><style>.cls-1{fill:#3289f1;}.cls-2{fill:#fff;}</style></defs><title>Artboard 1</title><path class="cls-1" d="M62.64,26.77a0,0,0,0,0,0,0A2.44,2.44,0,0,0,62,25.28L48.2,11.43a2.38,2.38,0,0,0-1.53-.71H35.45a16.12,16.12,0,0,1,.44,3.5H45v9.26a5,5,0,0,0,5,5h9.15V65.41A2.16,2.16,0,0,1,57,67.57H21.8a2.16,2.16,0,0,1-2.15-2.16V31.46H19a16.81,16.81,0,0,1-2.86-.24V65.41a5.67,5.67,0,0,0,5.65,5.66H57a5.67,5.67,0,0,0,5.66-5.66V27A1.48,1.48,0,0,0,62.64,26.77ZM50,25a1.49,1.49,0,0,1-1.49-1.49V16.71L56.69,25Z"/><path class="cls-1" d="M48,11.23a1.75,1.75,0,0,0-1.34-.51,2.38,2.38,0,0,1,1.53.71ZM62.14,25.47,62,25.28a2.44,2.44,0,0,1,.69,1.46A1.71,1.71,0,0,0,62.14,25.47Z"/><path class="cls-2" d="M17.26,12.83V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Z"/><path class="cls-2" d="M17.26,12.83V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Zm0,0V13a1.33,1.33,0,0,1,.14-.19Z"/><path class="cls-1" d="M32.65,14.21a13.47,13.47,0,0,0-.55-3.5,13.66,13.66,0,1,0-16,17.23,13.47,13.47,0,0,0,2.86.3c.22,0,.43,0,.64,0a13.67,13.67,0,0,0,13-13.64C32.66,14.46,32.66,14.33,32.65,14.21Zm-13,10.51-.64,0a9.94,9.94,0,0,1-2.86-.41A10.15,10.15,0,1,1,28.39,10.71a9.92,9.92,0,0,1,.76,3.5c0,.12,0,.25,0,.37A10.17,10.17,0,0,1,19.65,24.72Z"/><path class="cls-1" d="M25,12.83v3.5H20.76v4.22h-3.5V16.33H13v-3.5h4.22V13a1.33,1.33,0,0,1,.14-.19h-.14V8.61h3.5v4.22Z"/><path class="cls-1" d="M17.4,12.83a1.33,1.33,0,0,0-.14.19v-.19Z"/><path class="cls-1" d="M17.4,12.83a1.33,1.33,0,0,0-.14.19v-.19Z"/><rect class="cls-1" x="27.4" y="35.38" width="22" height="3.5"/><rect class="cls-1" x="27.4" y="55.38" width="22" height="3.5"/><rect class="cls-1" x="27.4" y="45.38" width="16" height="3.5"/></svg>
\ No newline at end of file diff --git a/packages/website/public/images/developers/tutorials/build_a_relayer.svg b/packages/website/public/images/developers/tutorials/build_a_relayer.svg new file mode 100644 index 000000000..afda40d88 --- /dev/null +++ b/packages/website/public/images/developers/tutorials/build_a_relayer.svg @@ -0,0 +1,3 @@ +<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M70.0766 46.9825C70.3778 45.294 70.4782 43.6054 70.4782 41.8174C70.4782 30.8913 64.9564 20.8591 55.72 14.8993C54.8164 14.3034 53.712 14.6013 53.1096 15.4953C52.5073 16.3892 52.8085 17.4819 53.6116 18.0778C61.8441 23.3423 66.6631 32.2819 66.6631 41.9168C66.6631 43.208 66.5627 44.4993 66.362 45.7906C65.7596 45.6913 65.0568 45.592 64.4544 45.592C58.1295 45.592 52.9089 50.6577 52.9089 57.0148C52.9089 63.3718 58.0291 68.4376 64.4544 68.4376C70.8798 68.4376 76 63.3718 76 57.0148C76 52.6443 73.5905 48.9691 70.0766 46.9825ZM64.4544 64.6631C60.1374 64.6631 56.7239 61.1866 56.7239 57.0148C56.7239 52.7436 60.2378 49.3664 64.4544 49.3664C68.7715 49.3664 72.1849 52.843 72.1849 57.0148C72.2853 61.1866 68.7715 64.6631 64.4544 64.6631ZM50.3989 67.5436C46.4835 69.4309 42.2668 70.3248 37.9498 70.3248C31.5244 70.3248 25.2999 68.2389 20.2801 64.2658C21.9868 62.2792 23.0912 59.6966 23.0912 56.8161C23.0912 50.5584 17.9709 45.3933 11.5456 45.3933C5.22061 45.3933 6.1277e-06 50.4591 6.1277e-06 56.8161C6.1277e-06 63.1731 5.12022 68.2389 11.5456 68.2389C13.6539 68.2389 15.5614 67.6429 17.2682 66.6497C23.0912 71.4174 30.3197 74 37.8494 74C42.7688 74 47.4875 72.9074 51.9049 70.8215C52.8085 70.4242 53.21 69.2322 52.8085 68.3383C52.5073 67.5436 51.3025 67.1463 50.3989 67.5436ZM3.81505 56.9154C3.81505 52.6443 7.32894 49.2671 11.5456 49.2671C15.7622 49.2671 19.2761 52.7436 19.2761 56.9154C19.2761 61.1866 15.7622 64.5638 11.5456 64.5638C7.32894 64.5638 3.81505 61.1866 3.81505 56.9154ZM7.42933 42.5128C7.42933 42.5128 7.52972 42.5128 7.42933 42.5128C8.53369 42.5128 9.33685 41.7181 9.33685 40.7248C9.63804 31.0899 14.8586 22.349 23.1915 17.3826C24.3963 16.6873 25.6011 16.0913 26.8058 15.5946C28.5126 19.7664 32.6288 22.8456 37.5482 22.8456C43.8732 22.8456 49.0938 17.7799 49.0938 11.4228C49.0938 5.06578 43.9736 1.21251e-05 37.5482 1.21251e-05C31.2233 1.21251e-05 26.0026 5.06578 26.0026 11.4228C26.0026 11.6215 26.0026 11.7208 26.0026 11.9195C24.3963 12.6148 22.79 13.3101 21.1836 14.3034C11.7464 19.9651 5.92339 29.7987 5.5218 40.7248C5.6222 41.6188 6.42536 42.5128 7.42933 42.5128ZM37.5482 3.67516C41.8653 3.67516 45.2787 7.15168 45.2787 11.3235C45.2787 15.5946 41.7649 18.9718 37.5482 18.9718C33.2312 18.9718 29.8177 15.4953 29.8177 11.3235C29.8177 7.15168 33.3316 3.67516 37.5482 3.67516Z" fill="#3289F1"/> +</svg> diff --git a/packages/website/public/images/developers/tutorials/build_a_trading_bot.svg b/packages/website/public/images/developers/tutorials/build_a_trading_bot.svg new file mode 100644 index 000000000..960616bfe --- /dev/null +++ b/packages/website/public/images/developers/tutorials/build_a_trading_bot.svg @@ -0,0 +1,6 @@ +<svg width="72" height="72" viewBox="0 0 72 72" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M72 36.63C72 35.1978 71.4436 33.8243 70.4532 32.8116C69.4628 31.7989 68.1195 31.23 66.7188 31.23H65.6626V23.76C65.6626 21.8504 64.9207 20.0191 63.6002 18.6688C62.2796 17.3186 60.4886 16.56 58.621 16.56H37.7604V1.8C37.7604 1.32261 37.5749 0.864774 37.2448 0.527208C36.9146 0.189643 36.4669 0 36 0C35.5331 0 35.0854 0.189643 34.7552 0.527208C34.4251 0.864774 34.2396 1.32261 34.2396 1.8V16.56H13.379C11.5114 16.56 9.72038 17.3186 8.39983 18.6688C7.07929 20.0191 6.33741 21.8504 6.33741 23.76V31.23H5.28117C3.88052 31.23 2.53723 31.7989 1.54682 32.8116C0.556407 33.8243 3.35768e-07 35.1978 3.35768e-07 36.63V47.25C3.35768e-07 48.6822 0.556407 50.0557 1.54682 51.0684C2.53723 52.0811 3.88052 52.65 5.28117 52.65H6.33741V64.8C6.33741 66.7096 7.07929 68.5409 8.39983 69.8912C9.72038 71.2414 11.5114 72 13.379 72H58.621C60.4886 72 62.2796 71.2414 63.6002 69.8912C64.9207 68.5409 65.6626 66.7096 65.6626 64.8V52.65H66.7188C68.1195 52.65 69.4628 52.0811 70.4532 51.0684C71.4436 50.0557 72 48.6822 72 47.25V36.63ZM68.4792 47.25C68.4792 47.7274 68.2937 48.1852 67.9636 48.5228C67.6335 48.8604 67.1857 49.05 66.7188 49.05H63.9022C63.4353 49.05 62.9876 49.2396 62.6574 49.5772C62.3273 49.9148 62.1418 50.3726 62.1418 50.85V64.8C62.1418 65.7548 61.7709 66.6705 61.1106 67.3456C60.4503 68.0207 59.5548 68.4 58.621 68.4H13.379C12.4452 68.4 11.5497 68.0207 10.8894 67.3456C10.2291 66.6705 9.85819 65.7548 9.85819 64.8V50.85C9.85819 50.3726 9.67272 49.9148 9.34258 49.5772C9.01245 49.2396 8.56468 49.05 8.0978 49.05H5.28117C4.81429 49.05 4.36653 48.8604 4.03639 48.5228C3.70625 48.1852 3.52078 47.7274 3.52078 47.25V36.63C3.52078 36.1526 3.70625 35.6948 4.03639 35.3572C4.36653 35.0196 4.81429 34.83 5.28117 34.83H8.0978C8.56468 34.83 9.01245 34.6404 9.34258 34.3028C9.67272 33.9652 9.85819 33.5074 9.85819 33.03V23.76C9.85819 22.8052 10.2291 21.8895 10.8894 21.2144C11.5497 20.5393 12.4452 20.16 13.379 20.16H58.621C59.5548 20.16 60.4503 20.5393 61.1106 21.2144C61.7709 21.8895 62.1418 22.8052 62.1418 23.76V33.03C62.1418 33.5074 62.3273 33.9652 62.6574 34.3028C62.9876 34.6404 63.4353 34.83 63.9022 34.83H66.7188C67.1857 34.83 67.6335 35.0196 67.9636 35.3572C68.2937 35.6948 68.4792 36.1526 68.4792 36.63V47.25Z" fill="#3289F1"/> +<path d="M32.2998 38.5204C32.2998 36.9718 31.8507 35.458 31.0092 34.1703C30.1678 32.8827 28.9718 31.8791 27.5726 31.2865C26.1733 30.6938 24.6336 30.5388 23.1481 30.8409C21.6627 31.143 20.2982 31.8887 19.2273 32.9838C18.1563 34.0788 17.427 35.474 17.1315 36.9929C16.836 38.5117 16.9877 40.0861 17.5673 41.5168C18.1469 42.9476 19.1284 44.1705 20.3877 45.0308C21.647 45.8912 23.1275 46.3504 24.6421 46.3504C26.673 46.3504 28.6208 45.5255 30.0569 44.0571C31.493 42.5887 32.2998 40.5971 32.2998 38.5204ZM24.6421 42.7504C24.0988 42.7504 23.5609 42.641 23.0589 42.4284C22.557 42.2159 22.101 41.9043 21.7168 41.5115C21.3327 41.1187 21.028 40.6524 20.8201 40.1392C20.6122 39.626 20.5052 39.0759 20.5052 38.5204C20.5052 37.3986 20.941 36.3226 21.7168 35.5294C22.4927 34.7361 23.5449 34.2904 24.6421 34.2904C25.7393 34.2904 26.7915 34.7361 27.5673 35.5294C28.3431 36.3226 28.779 37.3986 28.779 38.5204C28.779 39.6423 28.3431 40.7182 27.5673 41.5115C26.7915 42.3048 25.7393 42.7504 24.6421 42.7504Z" fill="#3289F1"/> +<path d="M47.3533 30.6001C45.8177 30.5823 44.3116 31.0316 43.0263 31.8909C41.741 32.7503 40.7345 33.9809 40.1347 35.4264C39.5349 36.8719 39.3689 38.4671 39.6578 40.0093C39.9466 41.5515 40.6773 42.9711 41.757 44.0878C42.8367 45.2045 44.2166 45.9678 45.7215 46.2807C47.2264 46.5937 48.7882 46.4422 50.2087 45.8455C51.6292 45.2487 52.8442 44.2338 53.6992 42.9294C54.5543 41.6251 55.0109 40.0904 55.011 38.5201C55.0226 37.4843 54.8331 36.4565 54.4535 35.4961C54.0739 34.5357 53.5117 33.6618 52.7994 32.9252C52.0872 32.1886 51.2391 31.6037 50.3042 31.2046C49.3694 30.8055 48.3664 30.6001 47.3533 30.6001ZM47.3533 42.7501C46.2561 42.7501 45.2039 42.3045 44.428 41.5112C43.6522 40.7179 43.2164 39.642 43.2164 38.5201C43.2164 37.9646 43.3234 37.4146 43.5313 36.9014C43.7392 36.3882 44.0439 35.9218 44.428 35.5291C44.8122 35.1363 45.2682 34.8247 45.7701 34.6121C46.2721 34.3995 46.81 34.2901 47.3533 34.2901C47.8965 34.2901 48.4345 34.3995 48.9364 34.6121C49.4383 34.8247 49.8944 35.1363 50.2785 35.5291C50.6627 35.9218 50.9674 36.3882 51.1753 36.9014C51.3832 37.4146 51.4902 37.9646 51.4902 38.5201C51.4902 39.642 51.0543 40.7179 50.2785 41.5112C49.5027 42.3045 48.4505 42.7501 47.3533 42.7501Z" fill="#3289F1"/> +<path d="M46.7424 55.7109H25.2656V59.3109H46.7424V55.7109Z" fill="#3289F1"/> +</svg> diff --git a/packages/website/public/images/developers/tutorials/develop_on_ethereum.svg b/packages/website/public/images/developers/tutorials/develop_on_ethereum.svg new file mode 100644 index 000000000..e2c492ecd --- /dev/null +++ b/packages/website/public/images/developers/tutorials/develop_on_ethereum.svg @@ -0,0 +1,4 @@ +<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M14.0349 38.5774C14.0366 38.5844 14.0366 38.5914 14.0383 38.5975C14.0459 38.6273 14.0595 38.6553 14.0688 38.6842C14.079 38.7148 14.085 38.7463 14.0977 38.7761C14.1003 38.7813 14.1045 38.7848 14.1062 38.7901C14.1461 38.8802 14.1979 38.9625 14.2582 39.0387C14.2752 39.0597 14.293 39.0781 14.3109 39.0973C14.3627 39.1534 14.4187 39.2041 14.4816 39.2488C14.4994 39.2619 14.5164 39.2768 14.5351 39.289C14.5436 39.2943 14.5503 39.3013 14.5588 39.3065L36.3144 52.3229C36.4876 52.4262 36.6812 52.4779 36.874 52.4779C36.9173 52.4779 36.9589 52.4656 37.0014 52.4603C37.0439 52.4656 37.0863 52.4779 37.1288 52.4779C37.3224 52.4779 37.5152 52.4262 37.6884 52.3229L59.444 39.3065C59.703 39.1516 59.8898 38.896 59.9645 38.5975C60.0384 38.299 59.9934 37.9821 59.8389 37.7178L38.0859 0.552394C37.8659 0.177746 37.4642 -0.0148298 37.0515 0.014932C36.6065 -0.0594723 36.1564 0.147984 35.9195 0.552394L14.1631 37.7187C14.1487 37.7432 14.1402 37.7703 14.1274 37.7966C14.1087 37.8351 14.0884 37.8718 14.0739 37.9121C14.0629 37.9427 14.0569 37.9751 14.0476 38.0075C14.0366 38.0478 14.0247 38.0881 14.0179 38.1292C14.0128 38.1607 14.0128 38.1931 14.0102 38.2255C14.0068 38.2684 14.0026 38.3104 14.0043 38.3542C14.0051 38.3874 14.0111 38.4198 14.0153 38.4531C14.0213 38.4942 14.0247 38.5354 14.0349 38.5774ZM38.2455 5.27838L56.1991 35.9496L38.2455 27.7826V5.27838ZM38.2455 30.2957L56.3197 38.5179L38.2455 49.3319V30.2957ZM35.759 5.27838V27.6662L17.898 35.7912L35.759 5.27838ZM35.759 30.1802V49.331L17.5744 38.4522L35.759 30.1802Z" fill="#3289F1"/> +<path d="M58.3132 42.4975L36.9993 55.5568L15.6854 42.4975C15.2327 42.2192 14.651 42.3076 14.2943 42.7076C13.9368 43.1085 13.9011 43.7125 14.2085 44.1546L35.9641 75.5182C36.1772 75.8263 36.5186 75.9996 36.8719 75.9996C36.9144 75.9996 36.9568 75.9839 36.9993 75.9786C37.0418 75.9839 37.0842 75.9996 37.1267 75.9996C37.48 75.9996 37.8205 75.8263 38.0345 75.5182L59.79 44.1546C60.0975 43.7125 60.0609 43.1085 59.7043 42.7076C59.3467 42.3076 58.7659 42.22 58.3132 42.4975ZM35.756 71.2649L19.1145 47.2743L35.756 57.4703V71.2649ZM38.2426 71.2649V57.4703L54.884 47.2743L38.2426 71.2649Z" fill="#3289F1"/> +</svg> diff --git a/packages/website/public/images/developers/tutorials/use_shared_liquidity.svg b/packages/website/public/images/developers/tutorials/use_shared_liquidity.svg new file mode 100644 index 000000000..c402964aa --- /dev/null +++ b/packages/website/public/images/developers/tutorials/use_shared_liquidity.svg @@ -0,0 +1,3 @@ +<svg width="70" height="74" viewBox="0 0 70 74" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M47.5152 52.7109C46.8864 53.3447 46.3452 54.0413 45.8772 54.7779L25.1416 42.092C25.69 40.7084 26.0008 39.2038 26.0008 37.6255C26.0008 36.0472 25.69 34.5426 25.1428 33.159L45.8832 20.5699C48.0132 23.9418 51.7475 26.1889 56.0002 26.1889C62.6169 26.1889 68 20.7634 68 14.0945C68 7.42558 62.6169 2 56.0002 2C49.3835 2 44.0004 7.42558 44.0004 14.0945C44.0004 15.6135 44.292 17.0625 44.8008 18.4025L24.0328 31.0086C21.8872 27.7141 18.1937 25.531 13.9998 25.531C7.3831 25.531 2 30.9566 2 37.6255C2 44.2944 7.3831 49.72 13.9998 49.72C18.1937 49.72 21.886 47.5369 24.0316 44.2424L44.796 56.9452C44.28 58.307 43.9992 59.762 43.9992 61.2629C43.9992 64.4934 45.2472 67.5315 47.514 69.8149C49.8527 72.1721 52.9259 73.3513 55.999 73.3513C59.0722 73.3513 62.1453 72.1721 64.4841 69.8149C66.7508 67.5303 67.9988 64.4934 67.9988 61.2629C67.9988 58.0325 66.7508 54.9944 64.4841 52.7109C59.8054 47.9941 52.1939 47.9941 47.5152 52.7109ZM56.0002 4.41889C61.2933 4.41889 65.6 8.7596 65.6 14.0945C65.6 19.4293 61.2933 23.7701 56.0002 23.7701C50.7071 23.7701 46.4004 19.4293 46.4004 14.0945C46.4004 8.7596 50.7059 4.41889 56.0002 4.41889ZM14.001 47.3011C8.70788 47.3011 4.40116 42.9604 4.40116 37.6255C4.40116 32.2906 8.70788 27.9499 14.001 27.9499C19.2941 27.9499 23.6008 32.2906 23.6008 37.6255C23.6008 42.9604 19.2941 47.3011 14.001 47.3011ZM62.7873 68.1048C59.0446 71.877 52.9547 71.877 49.2119 68.1048C47.3988 66.2773 46.4004 63.8463 46.4004 61.2629C46.4004 58.6795 47.3988 56.2486 49.2119 54.4211C51.0839 52.5343 53.5415 51.5922 56.0002 51.5922C58.459 51.5922 60.9165 52.5343 62.7885 54.4211C64.6017 56.2486 65.6 58.6795 65.6 61.2629C65.6 63.8463 64.6017 66.2773 62.7873 68.1048Z" fill="#3289F1" stroke="#3289F1" stroke-width="0.5"/> +</svg> diff --git a/packages/website/public/images/docs_logo.svg b/packages/website/public/images/docs_logo.svg new file mode 100644 index 000000000..e3c4b628b --- /dev/null +++ b/packages/website/public/images/docs_logo.svg @@ -0,0 +1,24 @@ +<svg width="278" height="72" viewBox="0 0 278 72" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect width="139" height="35.9999" fill="black" fill-opacity="0" transform="scale(2)"/> +<rect width="74.0872" height="35.9999" fill="black" fill-opacity="0" transform="scale(2)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M115.234 33.6875L105.219 40.5522C105.477 44.3244 107.146 46.2101 110.226 46.2101C113.565 46.2101 115.234 43.9618 115.234 39.4642V33.6875ZM105.176 36.8338L115.191 29.9691C115.076 28.0041 114.607 26.5499 113.783 25.6069C112.959 24.6642 111.759 24.1924 110.183 24.1924C108.507 24.1924 107.253 24.7398 106.422 25.8345C105.591 26.9293 105.176 28.6109 105.176 30.8789V36.8338ZM120.394 38.6336C120.394 40.4934 120.16 42.1322 119.695 43.5498C119.229 44.9677 118.559 46.1546 117.686 47.1106C116.812 48.067 115.744 48.7892 114.483 49.277C113.222 49.7647 111.804 50.0089 110.228 50.0089C108.666 50.0089 107.255 49.7647 105.994 49.277C104.733 48.7892 103.662 48.067 102.781 47.1106C101.9 46.1546 101.22 44.9677 100.74 43.5498C100.259 42.1322 100.02 40.4934 100.02 38.6336V31.7491C100.02 29.8895 100.256 28.2511 100.729 26.8332C101.202 25.4156 101.879 24.2285 102.76 23.2721C103.641 22.3161 104.708 21.5941 105.962 21.1059C107.215 20.6182 108.623 20.374 110.185 20.374C111.761 20.374 113.179 20.6182 114.44 21.1059C115.701 21.5941 116.772 22.3161 117.653 23.2721C118.535 24.2285 119.212 25.4156 119.684 26.8332C120.157 28.2511 120.394 29.8895 120.394 31.7491V38.6336Z" fill="black"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M137.01 35.3006L142.385 27.7822H147.925L139.968 38.7311L148.175 50.0084H142.655L137.073 42.2232L131.511 50.0084H125.949L134.156 38.7311L126.199 27.7822H131.719L137.01 35.3006Z" fill="black"/> +<rect width="36" height="35.9999" fill="black" fill-opacity="0" transform="scale(2)"/> +<rect width="22.5701" height="11.8348" fill="black" fill-opacity="0" transform="translate(18.0508 48.3301) scale(2)"/> +<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="18" y="48" width="46" height="24"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M18.0508 71.9997H63.191V48.3301H18.0508V71.9997Z" fill="white"/> +</mask> +<g mask="url(#mask0)"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M18.0508 67.1184C22.6601 69.8386 27.9385 71.5522 33.6161 71.9239C41.4577 72.4369 48.8759 70.3221 55.038 66.3361C58.1021 64.354 60.8534 61.9089 63.191 59.0905C61.2524 56.3622 59.1896 53.547 57.0111 50.6788L55.2311 48.3301C52.8884 52.0707 49.5201 55.0686 45.5555 56.9441L39.4742 50.9207L18.0508 67.1184Z" fill="black"/> +</g> +<rect width="11.6916" height="22.7346" fill="black" fill-opacity="0" transform="translate(0 18.6299) scale(2)"/> +<mask id="mask1" mask-type="alpha" maskUnits="userSpaceOnUse" x="0" y="18" width="24" height="47"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M0 18.6299V64.099H23.3833V18.6299L0 18.6299Z" fill="white"/> +</mask> +<g mask="url(#mask1)"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M4.72039 18.6299C2.09283 23.2496 0.437543 28.5247 0.0749777 34.193C-0.432648 42.134 1.66198 49.6455 5.60982 55.8826C7.56303 58.9691 9.97065 61.7416 12.7445 64.099C15.4422 62.1375 18.2268 60.0505 21.0641 57.847L23.3833 56.0501C19.6922 53.6805 16.7332 50.2769 14.8817 46.271L20.8743 40.0586L4.72039 18.6299Z" fill="black"/> +</g> +<path fill-rule="evenodd" clip-rule="evenodd" d="M54.0006 4.9803C49.4018 2.20541 44.1346 0.455949 38.4679 0.0772542C30.6434 -0.445638 23.2417 1.71125 17.096 5.77624C14.0546 7.78768 11.3231 10.2669 9 13.123C10.9328 15.9011 12.9892 18.7682 15.1602 21.69L16.9306 24.0783C19.2665 20.2759 22.622 17.2279 26.5714 15.3216L26.5759 15.3196L32.2882 21.07L54.0006 4.9803Z" fill="black"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M67.3574 53.7131C69.9376 49.2175 71.5681 44.0992 71.9269 38.5992C72.4342 30.8203 70.3437 23.4613 66.4027 17.3486C64.4432 14.3092 62.0259 11.58 59.2397 9.26074C56.5427 11.1839 53.7595 13.2301 50.9238 15.3915L48.6016 17.1569C52.3061 19.4848 55.2749 22.8335 57.1283 26.7755L57.1639 26.8575L51.3951 32.7948L67.3574 53.7131Z" fill="black"/> +<path d="M164.041 38.1836C164.041 34.6172 164.886 31.7526 166.576 29.5898C168.266 27.4128 170.479 26.3242 173.215 26.3242C175.936 26.3242 178.092 27.2552 179.682 29.1172V17H183.656V50H180.004L179.811 47.5078C178.221 49.4557 176.008 50.4297 173.172 50.4297C170.479 50.4297 168.281 49.3268 166.576 47.1211C164.886 44.9154 164.041 42.0365 164.041 38.4844V38.1836ZM168.016 38.6348C168.016 41.2702 168.56 43.3327 169.648 44.8223C170.737 46.3118 172.241 47.0566 174.16 47.0566C176.681 47.0566 178.521 45.9251 179.682 43.6621V32.9844C178.493 30.793 176.667 29.6973 174.203 29.6973C172.255 29.6973 170.737 30.4492 169.648 31.9531C168.56 33.457 168.016 35.6842 168.016 38.6348ZM188.791 38.1621C188.791 35.8848 189.235 33.8366 190.123 32.0176C191.025 30.1986 192.271 28.7949 193.861 27.8066C195.465 26.8184 197.292 26.3242 199.34 26.3242C202.505 26.3242 205.062 27.4199 207.01 29.6113C208.972 31.8027 209.953 34.7174 209.953 38.3555V38.6348C209.953 40.8978 209.516 42.9316 208.643 44.7363C207.783 46.5267 206.544 47.9232 204.926 48.9258C203.322 49.9284 201.474 50.4297 199.383 50.4297C196.232 50.4297 193.675 49.334 191.713 47.1426C189.765 44.9512 188.791 42.0508 188.791 38.4414V38.1621ZM192.787 38.6348C192.787 41.2129 193.382 43.2826 194.57 44.8438C195.773 46.4049 197.378 47.1855 199.383 47.1855C201.402 47.1855 203.007 46.3978 204.195 44.8223C205.384 43.2324 205.979 41.0124 205.979 38.1621C205.979 35.6126 205.37 33.5501 204.152 31.9746C202.949 30.3848 201.345 29.5898 199.34 29.5898C197.378 29.5898 195.795 30.3704 194.592 31.9316C193.389 33.4928 192.787 35.7272 192.787 38.6348ZM224.262 47.1855C225.68 47.1855 226.919 46.7559 227.979 45.8965C229.038 45.0371 229.626 43.9629 229.74 42.6738H233.5C233.428 44.0059 232.97 45.2734 232.125 46.4766C231.28 47.6797 230.148 48.6393 228.73 49.3555C227.327 50.0716 225.837 50.4297 224.262 50.4297C221.096 50.4297 218.576 49.377 216.699 47.2715C214.837 45.1517 213.906 42.2585 213.906 38.5918V37.9258C213.906 35.6628 214.322 33.6504 215.152 31.8887C215.983 30.127 217.172 28.7591 218.719 27.7852C220.28 26.8112 222.12 26.3242 224.24 26.3242C226.847 26.3242 229.01 27.1048 230.729 28.666C232.462 30.2272 233.385 32.2539 233.5 34.7461H229.74C229.626 33.2422 229.053 32.0104 228.021 31.0508C227.005 30.0768 225.744 29.5898 224.24 29.5898C222.221 29.5898 220.652 30.3203 219.535 31.7812C218.432 33.2279 217.881 35.3262 217.881 38.0762V38.8281C217.881 41.5065 218.432 43.569 219.535 45.0156C220.638 46.4622 222.214 47.1855 224.262 47.1855ZM251.504 43.834C251.504 42.7598 251.096 41.929 250.279 41.3418C249.477 40.7402 248.066 40.2246 246.047 39.7949C244.042 39.3652 242.445 38.8496 241.256 38.248C240.081 37.6465 239.208 36.9303 238.635 36.0996C238.076 35.2689 237.797 34.2806 237.797 33.1348C237.797 31.2298 238.599 29.6185 240.203 28.3008C241.822 26.9831 243.884 26.3242 246.391 26.3242C249.026 26.3242 251.16 27.0046 252.793 28.3652C254.44 29.7259 255.264 31.4661 255.264 33.5859H251.268C251.268 32.4974 250.802 31.5592 249.871 30.7715C248.954 29.9837 247.794 29.5898 246.391 29.5898C244.944 29.5898 243.812 29.9049 242.996 30.5352C242.18 31.1654 241.771 31.9889 241.771 33.0059C241.771 33.9655 242.151 34.6888 242.91 35.1758C243.669 35.6628 245.037 36.1283 247.014 36.5723C249.005 37.0163 250.616 37.5462 251.848 38.1621C253.079 38.778 253.989 39.5228 254.576 40.3965C255.178 41.2559 255.479 42.3086 255.479 43.5547C255.479 45.6315 254.648 47.3001 252.986 48.5605C251.325 49.8066 249.169 50.4297 246.52 50.4297C244.658 50.4297 243.01 50.1003 241.578 49.4414C240.146 48.7826 239.021 47.8659 238.205 46.6914C237.403 45.5026 237.002 44.2207 237.002 42.8457H240.977C241.048 44.1777 241.578 45.2376 242.566 46.0254C243.569 46.7988 244.887 47.1855 246.52 47.1855C248.023 47.1855 249.227 46.8848 250.129 46.2832C251.046 45.6673 251.504 44.8509 251.504 43.834Z" fill="#666666"/> +</svg> diff --git a/packages/website/public/images/landing/0x_homepage.svg b/packages/website/public/images/landing/0x_homepage.svg index 061ac8939..d2ccef8f4 100644 --- a/packages/website/public/images/landing/0x_homepage.svg +++ b/packages/website/public/images/landing/0x_homepage.svg @@ -1,24 +1,18 @@ <svg width="410" height="254" viewBox="0 0 410 254" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect width="410" height="254" fill="black" fill-opacity="0"/> -<rect width="410" height="254" fill="black" fill-opacity="0"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M409.979 122.524C410.195 134.531 408.758 137.636 404.251 140.251L210.864 252.464C207.334 254.512 202.985 254.512 199.455 252.464L6.06657 140.251C1.55911 137.635 -1.2295 135.189 0.536218 121.797L409.979 122.524Z" fill="#D0CAFF"/> -<rect width="98.1672" height="56.8942" fill="black" fill-opacity="0" transform="translate(87.1703 125.679)"/> <path d="M178.097 125.679L87.1703 178.372" stroke="#C4AED9" stroke-width="1.32046" stroke-linecap="round"/> <path d="M181.659 127.746L90.732 180.439" stroke="#C4AED9" stroke-width="1.32046" stroke-linecap="round"/> <path d="M185.338 129.88L94.41 182.573" stroke="#C4AED9" stroke-width="1.32046" stroke-linecap="round"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M199.455 245.823L6.06657 133.61C-1.53963 129.196 -1.53963 118.163 6.06657 113.749L199.453 1.53604C202.984 -0.512014 207.333 -0.512014 210.863 1.53604L404.251 113.75C411.858 118.163 411.858 129.197 404.251 133.611L210.864 245.823C207.334 247.871 202.985 247.871 199.455 245.823Z" fill="#F0EEFF"/> -<rect width="107.203" height="36.2243" fill="black" fill-opacity="0" transform="translate(79.7358 74.3805)"/> <path d="M79.7358 107.066L133.382 75.8612C136.304 73.965 139.326 73.974 141.767 75.4102L186.939 101.973" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> <path d="M82.4662 108.801L134.79 78.5156C136.798 77.3507 139.273 77.3583 141.274 78.5356L184.001 103.681" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> <path d="M85.1381 110.605L134.534 82.5144C136.541 81.3495 139.017 81.3571 141.017 82.5348L180.403 105.714" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> -<rect width="100.727" height="37.9813" fill="black" fill-opacity="0" transform="translate(226.643 123.734)"/> -<path d="M327.37 126.923L270.289 160.234C267.367 162.131 264.345 162.121 261.903 160.685L226.643 140.288" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> -<path d="M323.336 125.886L268.881 157.58C266.873 158.745 264.398 158.737 262.397 157.56L229.58 138.58" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> -<path d="M319.925 123.734L269.137 153.581C267.129 154.746 264.654 154.739 262.653 153.561L233.178 136.547" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M322.112 124.6C313.477 119.589 313.477 111.465 322.112 106.454C330.747 101.444 344.748 101.444 353.383 106.454C362.018 111.465 362.018 119.589 353.383 124.6C344.748 129.611 330.747 129.611 322.112 124.6Z" stroke="#DBDBFF" stroke-width="2"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M50.8048 126.749C42.1698 121.739 42.1698 113.614 50.8048 108.604C59.4403 103.593 73.4409 103.593 82.0764 108.604C90.7115 113.614 90.7115 121.739 82.0764 126.749C73.4409 131.76 59.4403 131.76 50.8048 126.749Z" stroke="#DBDBFF" stroke-width="2"/> +<path d="M330.5 124L270.289 160.234C267.367 162.131 264.345 162.121 261.903 160.685L226.643 140.288" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> +<path d="M325.5 123.5L268.881 157.58C266.873 158.745 264.398 158.737 262.397 157.56L229.58 138.58" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> +<path d="M322.5 122L269.137 153.581C267.129 154.746 264.654 154.739 262.653 153.561L233.178 136.547" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M323.711 121.778C316.096 117.482 316.096 110.517 323.711 106.222C331.327 101.926 343.673 101.926 351.289 106.222C358.904 110.517 358.904 117.482 351.289 121.778C343.673 126.074 331.327 126.074 323.711 121.778Z" stroke="#DBDBFF" stroke-width="2"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M52.7112 125.924C45.0963 121.824 45.0963 115.176 52.7112 111.075C60.3266 106.975 72.6734 106.975 80.2888 111.075C87.9038 115.176 87.9038 121.824 80.2888 125.924C72.6734 130.025 60.3266 130.025 52.7112 125.924Z" stroke="#DBDBFF" stroke-width="2"/> <g opacity="0.372566"> -<rect width="34.2587" height="23.7724" fill="black" fill-opacity="0" transform="translate(169.644 179.583)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M171.171 194.759L170.656 194.461C170.619 194.439 170.596 194.399 170.596 194.357V192.616C170.596 192.524 170.695 192.466 170.775 192.513L171.29 192.811C171.327 192.833 171.35 192.872 171.35 192.915V194.655C171.35 194.748 171.251 194.805 171.171 194.759Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M172.622 195.59L172.107 195.291C172.07 195.269 172.047 195.23 172.047 195.187V193.447C172.047 193.354 172.146 193.297 172.226 193.343L172.741 193.642C172.778 193.663 172.801 193.703 172.801 193.745V195.486C172.801 195.578 172.702 195.635 172.622 195.59Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M174.073 196.42L173.558 196.122C173.521 196.1 173.499 196.06 173.499 196.018V194.277C173.499 194.185 173.598 194.127 173.677 194.174L174.192 194.472C174.23 194.494 174.252 194.533 174.252 194.576V196.316C174.252 196.409 174.153 196.466 174.073 196.42Z" fill="#8C87C4"/> @@ -56,7 +50,6 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M288.178 149.398C288.178 152.004 286.076 154.116 283.483 154.116C280.891 154.116 278.789 152.004 278.789 149.398C278.789 146.792 280.891 144.68 283.483 144.68C286.076 144.68 288.178 146.792 288.178 149.398Z" fill="#8CB6FF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M302.505 141.805C302.505 144.411 300.403 146.523 297.811 146.523C295.218 146.523 293.116 144.411 293.116 141.805C293.116 139.199 295.218 137.087 297.811 137.087C300.403 137.087 302.505 139.199 302.505 141.805Z" fill="#8CB6FF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M315.374 133.208C315.374 135.813 313.272 137.926 310.679 137.926C308.086 137.926 305.984 135.813 305.984 133.208C305.984 130.602 308.086 128.489 310.679 128.489C313.272 128.489 315.374 130.602 315.374 133.208Z" fill="#8CB6FF"/> -<rect width="94.7557" height="54.8453" fill="black" fill-opacity="0" transform="translate(89.638 130.896)"/> <path d="M177.154 130.896L89.638 182.735" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> <path d="M180.715 132.963L93.2464 184.097" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> <path d="M184.394 135.097L96.4554 185.742" stroke="#DBDBFF" stroke-width="1.32046" stroke-linecap="round"/> @@ -89,7 +82,6 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M230.792 106.981C229.705 104.573 227.673 102.272 224.657 100.277C220.492 97.5232 215.09 95.7649 209.349 95.0321C206.508 94.6693 203.586 94.5587 200.688 94.7034C200.256 96.2311 199.844 97.8272 199.468 99.4797C199.366 99.9231 199.271 100.376 199.175 100.826C202.597 100.386 206.182 100.522 209.476 101.217L209.48 101.218L209.558 104.945L230.792 106.981Z" fill="white"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M210.774 127.184C214.812 126.542 218.668 125.381 222.022 123.674C226.764 121.26 229.793 118.129 231.057 114.802C231.686 113.147 231.878 111.444 231.626 109.757C228.994 109.506 226.244 109.268 223.397 109.051C222.632 108.992 221.851 108.936 221.073 108.881C221.837 110.871 221.602 112.957 220.398 114.873L220.371 114.912L213.699 114.981L210.774 127.184Z" fill="white"/> <g opacity="0.372566"> -<rect width="57.1535" height="39.6589" fill="black" fill-opacity="0" transform="translate(180.849 191.194)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M183.395 216.512L182.537 216.014C182.475 215.978 182.437 215.912 182.437 215.842V212.937C182.437 212.784 182.603 212.687 182.735 212.764L183.593 213.262C183.655 213.298 183.693 213.364 183.693 213.435V216.34C183.693 216.493 183.527 216.589 183.395 216.512Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M185.816 217.898L184.958 217.399C184.896 217.364 184.858 217.298 184.858 217.227V214.323C184.858 214.169 185.024 214.073 185.156 214.15L186.014 214.648C186.076 214.683 186.114 214.75 186.114 214.821V217.725C186.114 217.879 185.948 217.974 185.816 217.898Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M188.237 219.284L187.379 218.785C187.317 218.75 187.279 218.684 187.279 218.613V215.709C187.279 215.555 187.445 215.459 187.577 215.536L188.435 216.034C188.497 216.069 188.535 216.135 188.535 216.207V219.111C188.535 219.264 188.369 219.36 188.237 219.284Z" fill="#8C87C4"/> @@ -116,7 +108,6 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M208.63 225.495L181.646 209.837C180.584 209.221 180.584 207.682 181.646 207.065L208.63 191.408C209.123 191.122 209.73 191.122 210.222 191.408L237.207 207.065C238.268 207.682 238.268 209.221 237.207 209.837L210.222 225.495C209.73 225.781 209.123 225.781 208.63 225.495Z" fill="#A59EF7"/> </g> <g opacity="0.327785"> -<rect width="73.5288" height="51.0612" fill="black" fill-opacity="0" transform="translate(200.318 30.1121)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M203.593 62.7101L202.489 62.0689C202.41 62.0228 202.361 61.9378 202.361 61.8468V58.1075C202.361 57.9094 202.574 57.7857 202.744 57.8848L203.848 58.5259C203.927 58.5721 203.976 58.657 203.976 58.7487V62.4879C203.976 62.6855 203.763 62.8085 203.593 62.7101Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M206.707 64.4942L205.603 63.8524C205.524 63.8069 205.475 63.722 205.475 63.6303V59.8916C205.475 59.6935 205.688 59.5698 205.858 59.6689L206.963 60.31C207.042 60.3556 207.09 60.4411 207.09 60.5328V64.2721C207.09 64.4696 206.878 64.5926 206.707 64.4942Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M209.822 66.2782L208.718 65.6365C208.638 65.5909 208.59 65.506 208.59 65.4143V61.6757C208.59 61.4775 208.803 61.3539 208.973 61.4529L210.077 62.0941C210.156 62.1396 210.205 62.2245 210.205 62.3168V66.0555C210.205 66.253 209.992 66.3767 209.822 66.2782Z" fill="#8C87C4"/> @@ -143,11 +134,10 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M236.058 74.2755L201.342 54.1153C199.977 53.3227 199.977 51.3408 201.342 50.547L236.058 30.388C236.692 30.0201 237.473 30.0201 238.107 30.388L272.823 50.547C274.188 51.3408 274.188 53.3227 272.823 54.1153L238.107 74.2755C237.473 74.6435 236.692 74.6435 236.058 74.2755Z" fill="#A59EF7"/> </g> <g opacity="0.120697"> -<rect width="28.3611" height="20.2117" fill="black" fill-opacity="0" transform="translate(79.9083 149.104)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M81.1767 162.008L80.746 161.754C80.7152 161.736 80.6961 161.702 80.6961 161.666V160.186C80.6961 160.107 80.7792 160.058 80.8455 160.098L81.2762 160.351C81.3072 160.37 81.3261 160.403 81.3261 160.44V161.92C81.3261 161.998 81.243 162.047 81.1767 162.008Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M82.3781 162.714L81.9474 162.46C81.9166 162.442 81.8975 162.408 81.8975 162.372V160.892C81.8975 160.814 81.9806 160.765 82.0469 160.804L82.4776 161.058C82.5084 161.076 82.5275 161.11 82.5275 161.146V162.626C82.5275 162.704 82.4444 162.753 82.3781 162.714Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M83.5795 163.42L83.1488 163.166C83.1178 163.148 83.0989 163.114 83.0989 163.078V161.598C83.0989 161.52 83.182 161.471 83.2483 161.51L83.679 161.764C83.7098 161.782 83.7288 161.815 83.7288 161.852V163.332C83.7288 163.41 83.6458 163.459 83.5795 163.42Z" fill="#8C87C4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M84.7809 164.126L84.3502 163.872C84.3191 163.854 84.3003 163.821 84.3003 163.784V162.304C84.3003 162.226 84.3833 162.177 84.4497 162.216L84.8804 162.47C84.9111 162.488 84.9302 162.522 84.9302 162.558V164.038C84.9302 164.116 84.8472 164.165 84.7809 164.126Z" fill="#8C87C4"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M84.7808 164.126L84.3502 163.872C84.3191 163.854 84.3003 163.821 84.3003 163.784V162.304C84.3003 162.226 84.3833 162.177 84.4497 162.216L84.8803 162.47C84.9111 162.488 84.9302 162.522 84.9302 162.558V164.038C84.9302 164.116 84.8472 164.165 84.7808 164.126Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M85.9823 164.832L85.5516 164.578C85.5205 164.56 85.5017 164.527 85.5017 164.49V163.01C85.5017 162.932 85.5847 162.883 85.6511 162.922L86.0817 163.176C86.1125 163.194 86.1316 163.228 86.1316 163.264V164.744C86.1316 164.822 86.0486 164.871 85.9823 164.832Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M87.1837 165.538L86.753 165.285C86.7219 165.266 86.7031 165.233 86.7031 165.196V163.717C86.7031 163.638 86.7861 163.589 86.8525 163.628L87.2832 163.882C87.3139 163.9 87.333 163.934 87.333 163.97V165.45C87.333 165.529 87.25 165.577 87.1837 165.538Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M88.385 166.245L87.9543 165.991C87.9233 165.972 87.9045 165.939 87.9045 165.903V164.423C87.9045 164.344 87.9875 164.295 88.0538 164.335L88.4845 164.588C88.5153 164.606 88.5344 164.64 88.5344 164.676V166.157C88.5344 166.235 88.4514 166.284 88.385 166.245Z" fill="#8C87C4"/> @@ -170,7 +160,6 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M93.6938 166.586L80.3033 158.606C79.7767 158.292 79.7767 157.507 80.3033 157.193L93.6938 149.214C93.9383 149.068 94.2394 149.068 94.4839 149.214L107.874 157.193C108.401 157.507 108.401 158.292 107.874 158.606L94.4839 166.586C94.2396 166.731 93.9383 166.731 93.6938 166.586Z" fill="#A59EF7"/> </g> <g opacity="0.120697"> -<rect width="28.3611" height="20.2117" fill="black" fill-opacity="0" transform="translate(99.2107 137.283)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M100.479 150.186L100.048 149.932C100.018 149.914 99.9986 149.88 99.9986 149.844V148.364C99.9986 148.286 100.082 148.237 100.148 148.276L100.579 148.53C100.61 148.548 100.629 148.582 100.629 148.618V150.098C100.629 150.176 100.545 150.225 100.479 150.186Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M101.681 150.892L101.25 150.638C101.219 150.62 101.2 150.587 101.2 150.55V149.07C101.2 148.992 101.283 148.943 101.349 148.982L101.78 149.236C101.811 149.254 101.83 149.288 101.83 149.324V150.804C101.83 150.882 101.747 150.931 101.681 150.892Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M102.882 151.598L102.451 151.344C102.42 151.326 102.401 151.293 102.401 151.256V149.777C102.401 149.698 102.484 149.649 102.551 149.688L102.981 149.942C103.012 149.96 103.031 149.994 103.031 150.03V151.51C103.031 151.588 102.948 151.637 102.882 151.598Z" fill="#8C87C4"/> @@ -197,7 +186,6 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M112.996 154.764L99.6058 146.784C99.0791 146.47 99.0791 145.686 99.6058 145.371L112.996 137.392C113.241 137.246 113.542 137.246 113.786 137.392L127.177 145.371C127.703 145.686 127.703 146.47 127.177 146.784L113.786 154.764C113.542 154.91 113.241 154.91 112.996 154.764Z" fill="#A59EF7"/> </g> <g opacity="0.120697"> -<rect width="28.3611" height="20.2117" fill="black" fill-opacity="0" transform="translate(268.643 57.7552)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M269.912 70.6586L269.481 70.4048C269.45 70.3865 269.431 70.3529 269.431 70.3169V68.8367C269.431 68.7583 269.514 68.7093 269.581 68.7486L270.011 69.0024C270.042 69.0206 270.061 69.0542 270.061 69.0905V70.5707C270.061 70.6488 269.978 70.6975 269.912 70.6586Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M271.113 71.3648L270.683 71.1108C270.652 71.0927 270.633 71.0591 270.633 71.0228V69.5429C270.633 69.4645 270.716 69.4156 270.782 69.4548L271.213 69.7086C271.243 69.7266 271.263 69.7604 271.263 69.7967V71.2769C271.263 71.355 271.18 71.4038 271.113 71.3648Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M272.315 72.071L271.884 71.8169C271.853 71.7989 271.834 71.7653 271.834 71.729V70.2491C271.834 70.1707 271.917 70.1217 271.983 70.161L272.414 70.4147C272.445 70.4328 272.464 70.4664 272.464 70.5029V71.9828C272.464 72.061 272.381 72.1099 272.315 72.071Z" fill="#8C87C4"/> @@ -224,7 +212,6 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M282.429 75.2366L269.038 67.2565C268.512 66.9428 268.512 66.1582 269.038 65.844L282.429 57.8644C282.673 57.7188 282.974 57.7188 283.219 57.8644L296.609 65.844C297.136 66.1582 297.136 66.9428 296.609 67.2565L283.219 75.2366C282.975 75.3822 282.673 75.3822 282.429 75.2366Z" fill="#A59EF7"/> </g> <g opacity="0.327785"> -<rect width="49.9817" height="34.933" fill="black" fill-opacity="0" transform="translate(180.671 11.4867)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M182.898 33.788L182.147 33.3494C182.093 33.3176 182.06 33.2598 182.06 33.1975V30.6391C182.06 30.5041 182.205 30.4195 182.32 30.4867L183.071 30.9253C183.125 30.957 183.158 31.0149 183.158 31.0784V33.6362C183.158 33.7712 183.013 33.8552 182.898 33.788Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M185.015 35.0087L184.264 34.57C184.21 34.5383 184.177 34.4798 184.177 34.4176V31.8592C184.177 31.7248 184.322 31.6395 184.438 31.7073L185.188 32.146C185.242 32.1777 185.275 32.2356 185.275 32.2984V34.8562C185.275 34.9919 185.13 35.0759 185.015 35.0087Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M187.132 36.2287L186.381 35.7901C186.327 35.759 186.295 35.7005 186.295 35.6383V33.0798C186.295 32.9448 186.439 32.8602 186.555 32.9274L187.306 33.3667C187.359 33.3978 187.392 33.4563 187.392 33.5191V36.0769C187.392 36.2119 187.247 36.2966 187.132 36.2287Z" fill="#8C87C4"/> @@ -251,7 +238,6 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M204.966 41.7003L181.368 27.9082C180.439 27.3656 180.439 26.0092 181.368 25.4673L204.966 11.6752C205.397 11.4238 205.927 11.4238 206.358 11.6752L229.957 25.4673C230.885 26.0099 230.885 27.3656 229.957 27.9082L206.358 41.7003C205.927 41.9517 205.397 41.9517 204.966 41.7003Z" fill="#A59EF7"/> </g> <g opacity="0.327785"> -<rect width="34.9717" height="24.8959" fill="black" fill-opacity="0" transform="translate(167.802 36.5651)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M169.36 52.459L168.834 52.1463C168.797 52.1237 168.774 52.0822 168.774 52.0375V50.215C168.774 50.1181 168.875 50.0584 168.956 50.1062L169.482 50.4188C169.52 50.4415 169.543 50.4824 169.543 50.5277V52.3501C169.543 52.4464 169.442 52.5068 169.36 52.459Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M170.842 53.3282L170.316 53.0156C170.278 52.9936 170.255 52.952 170.255 52.9074V51.0849C170.255 50.988 170.357 50.9283 170.437 50.9761L170.963 51.2887C171.001 51.3108 171.024 51.3523 171.024 51.3976V53.22C171.024 53.3163 170.923 53.3767 170.842 53.3282Z" fill="#8C87C4"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M172.323 54.1982L171.797 53.8855C171.76 53.8635 171.737 53.822 171.737 53.7773V51.9542C171.737 51.8573 171.838 51.7976 171.919 51.846L172.445 52.1586C172.483 52.1807 172.505 52.2222 172.505 52.2669V54.09C172.505 54.1862 172.405 54.2466 172.323 54.1982Z" fill="#8C87C4"/> @@ -277,109 +263,78 @@ <path fill-rule="evenodd" clip-rule="evenodd" d="M167.808 47.5141L167.819 49.6951C167.747 50.0902 167.904 50.5224 168.289 50.7514L184.801 60.5809C185.102 60.7608 185.474 60.7608 185.775 60.5809L202.286 50.752C202.671 50.523 202.828 50.0902 202.757 49.6951L202.768 47.5141" fill="#8B81E6"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M184.801 58.0974L168.289 48.2686C167.64 47.8817 167.64 46.9154 168.289 46.5285L184.801 36.6996C185.102 36.5203 185.473 36.5203 185.775 36.6996L202.287 46.5285C202.936 46.9154 202.936 47.8823 202.287 48.2686L185.775 58.0974C185.474 58.2767 185.102 58.2767 184.801 58.0974Z" fill="#A59EF7"/> </g> -<rect width="29.9899" height="49.737" fill="black" fill-opacity="0" transform="translate(189.659 18.6826)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M189.659 43.6672L204.642 52.5638V18.6826L189.659 43.6672Z" fill="#6659FF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M204.672 18.6826V52.5638L219.649 43.6672L204.672 18.6826Z" fill="#5135E6"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M189.659 46.6247L204.861 68.4196L204.642 55.5213L189.659 46.6247Z" fill="#6659FF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M204.672 54.7454L204.917 67.4584L219.482 45.55L204.672 54.7454Z" fill="#4259DB"/> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(318.852 99.4725)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(318.852 99.4725)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M350.888 120.595C343.56 124.699 331.678 124.699 324.349 120.595C317.02 116.492 317.02 109.838 324.349 105.734C331.677 101.631 343.56 101.631 350.888 105.735C358.217 109.838 358.217 116.492 350.888 120.595Z" fill="#7F95EF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M318.852 112.846H356.385V109.662H318.852V112.846Z" fill="#838DB7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M350.888 117.411C343.56 121.515 331.678 121.515 324.349 117.411C317.02 113.307 317.02 106.654 324.349 102.55C331.677 98.4465 343.56 98.4465 350.888 102.55C358.217 106.654 358.217 113.307 350.888 117.411Z" fill="#93A8FF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M326.211 115.967C319.911 112.485 319.911 106.839 326.211 103.358C332.511 99.8757 342.726 99.8757 349.026 103.358C355.326 106.84 355.326 112.485 349.026 115.967C342.726 119.449 332.511 119.449 326.211 115.967Z" fill="#9ABFFF"/> <g opacity="0.370867"> -<rect width="19.296" height="11.091" fill="black" fill-opacity="0" transform="translate(327.431 104.017)"/> <g opacity="0.653363"> -<rect width="14.9457" height="5.18221" fill="black" fill-opacity="0" transform="translate(327.431 109.926)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M342.161 110.157C342.497 110.398 342.355 110.571 342.298 110.734C341.315 113.539 336.078 115.549 331.129 115.025C328.909 114.79 327.621 114.016 327.452 112.816C327.266 111.493 328.324 110.596 330.572 110.173C331.906 109.922 333.285 109.901 334.667 109.943C337.204 110.021 339.711 110.353 342.161 110.157Z" fill="#4562DF"/> </g> <g opacity="0.653363"> -<rect width="14.909" height="5.19137" fill="black" fill-opacity="0" transform="translate(331.818 104.017)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M331.818 108.942C332.063 106.358 336.216 104.162 340.869 104.029C341.632 104.007 342.397 104.01 343.152 104.108C345.409 104.4 346.637 105.208 346.723 106.465C346.805 107.672 345.734 108.521 343.592 108.934C342.419 109.16 341.201 109.235 339.972 109.201C337.284 109.128 334.63 108.791 331.818 108.942Z" fill="#4562DF"/> </g> </g> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(318.852 95.1737)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(318.852 95.1737)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M350.888 116.296C343.56 120.4 331.678 120.4 324.349 116.296C317.02 112.193 317.02 105.539 324.349 101.436C331.677 97.332 343.56 97.332 350.888 101.436C358.217 105.539 358.217 112.193 350.888 116.296Z" fill="#7F95EF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M318.852 108.548H356.385V105.363H318.852V108.548Z" fill="#838DB7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M350.888 113.112C343.56 117.216 331.678 117.216 324.349 113.112C317.02 109.008 317.02 102.355 324.349 98.2514C331.677 94.1478 343.56 94.1478 350.888 98.2515C358.217 102.355 358.217 109.009 350.888 113.112Z" fill="#93A8FF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M326.211 111.668C319.911 108.186 319.911 102.541 326.211 99.0588C332.511 95.5769 342.726 95.5769 349.026 99.0588C355.326 102.541 355.326 108.186 349.026 111.668C342.726 115.15 332.511 115.15 326.211 111.668Z" fill="#9ABFFF"/> <g opacity="0.370867"> -<rect width="19.296" height="11.091" fill="black" fill-opacity="0" transform="translate(327.431 99.7187)"/> <g opacity="0.653363"> -<rect width="14.9457" height="5.18221" fill="black" fill-opacity="0" transform="translate(327.431 105.627)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M342.161 105.859C342.497 106.1 342.355 106.272 342.298 106.435C341.315 109.24 336.078 111.251 331.129 110.726C328.909 110.491 327.621 109.717 327.452 108.517C327.266 107.194 328.324 106.297 330.572 105.874C331.906 105.624 333.285 105.603 334.667 105.644C337.204 105.722 339.711 106.054 342.161 105.859Z" fill="#4562DF"/> </g> <g opacity="0.653363"> -<rect width="14.909" height="5.19137" fill="black" fill-opacity="0" transform="translate(331.818 99.7187)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M331.818 104.643C332.063 102.059 336.216 99.8633 340.869 99.7298C341.632 99.7079 342.397 99.7109 343.152 99.8089C345.409 100.102 346.637 100.909 346.723 102.166C346.805 103.373 345.734 104.222 343.592 104.635C342.419 104.861 341.201 104.936 339.972 104.903C337.284 104.829 334.63 104.492 331.818 104.643Z" fill="#4562DF"/> </g> </g> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(47.5456 103.771)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(47.5456 103.771)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M79.5817 124.894C72.253 128.998 60.3709 128.998 53.0422 124.894C45.7135 120.79 45.7134 114.137 53.0421 110.033C60.3708 105.93 72.2529 105.93 79.5816 110.033C86.9103 114.137 86.9104 120.79 79.5817 124.894Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M47.5456 117.145H85.0782V113.961H47.5456V117.145Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M53.0422 121.71C45.7135 117.606 45.7134 110.953 53.0421 106.849C60.3708 102.745 72.2529 102.745 79.5816 106.849C86.9103 110.953 86.9104 117.606 79.5817 121.71C72.253 125.813 60.3709 125.813 53.0422 121.71Z" fill="#86F7D1"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M54.9046 120.265C48.6045 116.784 48.6044 111.138 54.9046 107.656C61.2046 104.174 71.4191 104.174 77.7192 107.656C84.0193 111.138 84.0194 116.784 77.7193 120.266C71.4192 123.747 61.2047 123.747 54.9046 120.265Z" fill="#95FFDA"/> -<rect width="26.809" height="10.7469" fill="black" fill-opacity="0" transform="translate(52.9074 109.145)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M78.1519 112.724C78.1579 112.71 78.1629 112.697 78.1681 112.684C78.1741 112.687 78.1793 112.69 78.1852 112.692L78.2281 112.712L78.1519 112.724ZM75.2505 115.293C74.8038 115.693 74.3155 116.07 73.7899 116.421C73.5585 116.576 73.3192 116.726 73.0736 116.871C71.4102 116.816 70.5534 116.576 70.1138 116.331C69.5898 116.039 69.6552 115.742 69.6552 115.742C69.6552 115.702 69.6552 115.662 69.6711 115.622C69.6711 115.622 69.6791 115.586 69.7054 115.531C69.7421 115.454 69.8139 115.34 69.9495 115.225C70.1816 115.027 70.6037 114.83 71.3568 114.828H71.3703C71.5698 114.824 71.7692 114.842 71.9367 114.886C72.7345 115.083 72.216 115.45 72.216 115.45C72.2758 115.446 72.3364 115.44 72.3978 115.433C73.3567 115.315 74.4376 114.814 74.2502 113.976C74.2079 113.785 74.0682 113.615 73.8744 113.464C73.3862 113.083 72.5533 112.83 72.0795 112.708C71.8632 112.653 71.7213 112.625 71.7213 112.625C71.7452 112.557 71.7532 112.504 71.7532 112.464C71.7532 112.456 71.7532 112.449 71.7515 112.442C71.7476 112.377 71.7213 112.352 71.7213 112.352C66.7753 110.986 62.9222 111.281 62.9222 111.281L63.8795 111.718C63.8755 111.718 63.8723 111.718 63.8684 111.718C63.7758 111.715 63.6761 111.715 63.5844 111.715C62.2306 111.737 60.9685 111.926 59.8908 112.241C57.7728 112.857 56.3649 113.954 56.3649 115.207C56.3649 115.265 56.3687 115.322 56.3752 115.376C56.3464 115.351 56.3186 115.326 56.2898 115.3C56.1422 115.169 56.0042 115.039 55.875 114.911C54.8969 113.945 54.4 113.097 54.1861 112.662C59.0388 110.884 64.9445 109.989 65.7701 109.872C66.0015 109.905 66.6285 109.999 67.5188 110.155C68.5295 110.333 69.8785 110.592 71.3719 110.935C73.2681 111.372 75.3956 111.944 77.3542 112.66C77.11 113.151 76.5037 114.17 75.2505 115.293ZM67.8363 112.25C69.1517 112.246 70.3396 112.388 71.2092 112.628C71.1812 112.624 70.7249 112.558 70.2615 112.53C70.0221 112.643 69.8147 112.691 69.7509 112.705C69.7429 112.709 69.7349 112.712 69.7349 112.712C68.3389 112.578 67.8363 112.25 67.8363 112.25ZM78.3792 112.23C73.4834 110.339 67.3313 109.373 66.1507 109.199L65.7677 109.145L65.3928 109.198C64.2081 109.373 58.0481 110.34 53.1515 112.233L52.9074 112.327L52.9672 112.482C53.0685 112.733 53.6549 114.058 55.291 115.528C56.3425 116.47 57.6284 117.296 59.1131 117.985C60.9223 118.822 63.0339 119.442 65.3929 119.83L65.7758 119.892L66.0246 119.847L66.1571 119.826C68.5016 119.441 70.6133 118.82 72.4345 117.982C73.9111 117.301 75.197 116.474 76.2572 115.524C77.903 114.049 78.5212 112.682 78.5842 112.468H78.585L78.644 112.316L78.3792 112.23Z" fill="#6CF0D1"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.9765 112.492L78.644 112.548C78.6703 112.485 78.6928 112.425 78.7153 112.369C78.7416 112.382 78.7636 112.392 78.7899 112.405L78.9765 112.492Z" fill="#000CA5"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.7893 112.405C78.7631 112.392 78.7411 112.382 78.7148 112.369C78.6923 112.425 78.6698 112.485 78.644 112.548L78.9759 112.492L78.7893 112.405Z" fill="#000CA5"/> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(47.5456 99.4725)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(47.5456 99.4725)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M79.5817 120.595C72.253 124.699 60.3709 124.699 53.0422 120.595C45.7135 116.492 45.7134 109.838 53.0421 105.734C60.3708 101.631 72.2529 101.631 79.5816 105.735C86.9103 109.838 86.9104 116.492 79.5817 120.595Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M47.5456 112.846H85.0782V109.662H47.5456V112.846Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M53.0422 117.411C45.7135 113.307 45.7134 106.654 53.0421 102.55C60.3708 98.4465 72.2529 98.4465 79.5816 102.55C86.9103 106.654 86.9104 113.307 79.5817 117.411C72.253 121.515 60.3709 121.515 53.0422 117.411Z" fill="#86F7D1"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M54.9046 115.967C48.6045 112.485 48.6044 106.839 54.9046 103.358C61.2046 99.8757 71.4191 99.8757 77.7192 103.358C84.0193 106.84 84.0194 112.485 77.7193 115.967C71.4192 119.449 61.2047 119.449 54.9046 115.967Z" fill="#95FFDA"/> -<rect width="26.809" height="10.7469" fill="black" fill-opacity="0" transform="translate(52.9074 104.846)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M78.1519 108.426C78.1579 108.412 78.1629 108.398 78.1681 108.386C78.1741 108.388 78.1793 108.391 78.1852 108.394L78.2281 108.413L78.1519 108.426ZM75.2505 110.994C74.8038 111.395 74.3155 111.771 73.7899 112.122C73.5585 112.277 73.3192 112.427 73.0736 112.572C71.4102 112.517 70.5534 112.277 70.1138 112.032C69.5898 111.741 69.6552 111.443 69.6552 111.443C69.6552 111.403 69.6552 111.363 69.6711 111.323C69.6711 111.323 69.6791 111.288 69.7054 111.232C69.7421 111.155 69.8139 111.041 69.9495 110.926C70.1816 110.729 70.6037 110.532 71.3568 110.529H71.3703C71.5698 110.525 71.7692 110.544 71.9367 110.587C72.7345 110.784 72.216 111.152 72.216 111.152C72.2758 111.147 72.3364 111.142 72.3978 111.134C73.3567 111.016 74.4376 110.516 74.2502 109.677C74.2079 109.487 74.0682 109.316 73.8744 109.165C73.3862 108.784 72.5533 108.531 72.0795 108.41C71.8632 108.354 71.7213 108.326 71.7213 108.326C71.7452 108.258 71.7532 108.205 71.7532 108.165C71.7532 108.157 71.7532 108.15 71.7515 108.143C71.7476 108.078 71.7213 108.053 71.7213 108.053C66.7753 106.688 62.9222 106.983 62.9222 106.983L63.8795 107.42C63.8755 107.42 63.8723 107.419 63.8684 107.419C63.7758 107.416 63.6761 107.416 63.5844 107.416C62.2306 107.438 60.9685 107.627 59.8908 107.942C57.7728 108.558 56.3649 109.656 56.3649 110.908C56.3649 110.966 56.3687 111.023 56.3752 111.077C56.3464 111.052 56.3186 111.027 56.2898 111.002C56.1422 110.87 56.0042 110.74 55.875 110.612C54.8969 109.646 54.4 108.798 54.1861 108.363C59.0388 106.586 64.9445 105.691 65.7701 105.573C66.0015 105.606 66.6285 105.7 67.5188 105.856C68.5295 106.034 69.8785 106.293 71.3719 106.637C73.2681 107.073 75.3956 107.645 77.3542 108.361C77.11 108.852 76.5037 109.871 75.2505 110.994ZM67.8363 107.951C69.1517 107.948 70.3396 108.09 71.2092 108.329C71.1812 108.325 70.7249 108.26 70.2615 108.232C70.0221 108.344 69.8147 108.392 69.7509 108.406C69.7429 108.41 69.7349 108.414 69.7349 108.414C68.3389 108.279 67.8363 107.951 67.8363 107.951ZM78.3792 107.931C73.4834 106.04 67.3313 105.074 66.1507 104.9L65.7677 104.846L65.3928 104.899C64.2081 105.074 58.0481 106.041 53.1515 107.935L52.9074 108.029L52.9672 108.183C53.0685 108.434 53.6549 109.759 55.291 111.229C56.3425 112.171 57.6284 112.997 59.1131 113.686C60.9223 114.523 63.0339 115.144 65.3929 115.531L65.7758 115.593L66.0246 115.548L66.1571 115.527C68.5016 115.142 70.6133 114.522 72.4345 113.683C73.9111 113.002 75.197 112.175 76.2572 111.225C77.903 109.75 78.5212 108.383 78.5842 108.17H78.585L78.644 108.017L78.3792 107.931Z" fill="#6CF0D1"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.9765 108.193L78.644 108.249C78.6703 108.186 78.6928 108.126 78.7153 108.07C78.7416 108.083 78.7636 108.093 78.7899 108.107L78.9765 108.193Z" fill="#000CA5"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.7893 108.107C78.7631 108.094 78.7411 108.083 78.7148 108.07C78.6923 108.126 78.6698 108.186 78.644 108.249L78.9759 108.193L78.7893 108.107Z" fill="#000CA5"/> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(47.5456 95.1737)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(47.5456 95.1737)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M79.5817 116.296C72.253 120.4 60.3709 120.4 53.0422 116.296C45.7135 112.193 45.7134 105.539 53.0421 101.436C60.3708 97.332 72.2529 97.332 79.5816 101.436C86.9103 105.539 86.9104 112.193 79.5817 116.296Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M47.5456 108.548H85.0782V105.363H47.5456V108.548Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M53.0422 113.112C45.7135 109.008 45.7134 102.355 53.0421 98.2514C60.3708 94.1478 72.2529 94.1478 79.5816 98.2515C86.9103 102.355 86.9104 109.009 79.5817 113.112C72.253 117.216 60.3709 117.216 53.0422 113.112Z" fill="#86F7D1"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M54.9046 111.668C48.6045 108.186 48.6044 102.541 54.9046 99.0588C61.2046 95.5769 71.4191 95.5769 77.7192 99.0588C84.0193 102.541 84.0194 108.186 77.7193 111.668C71.4192 115.15 61.2047 115.15 54.9046 111.668Z" fill="#95FFDA"/> -<rect width="26.809" height="10.7469" fill="black" fill-opacity="0" transform="translate(52.9074 100.547)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M78.1519 104.127C78.1579 104.113 78.1629 104.099 78.1681 104.087C78.1741 104.09 78.1793 104.092 78.1852 104.095L78.2281 104.114L78.1519 104.127ZM75.2505 106.696C74.8038 107.096 74.3155 107.472 73.7899 107.824C73.5585 107.978 73.3192 108.128 73.0736 108.273C71.4102 108.218 70.5534 107.978 70.1138 107.733C69.5898 107.442 69.6552 107.144 69.6552 107.144C69.6552 107.104 69.6552 107.064 69.6711 107.024C69.6711 107.024 69.6791 106.989 69.7054 106.933C69.7421 106.857 69.8139 106.742 69.9495 106.627C70.1816 106.43 70.6037 106.233 71.3568 106.23H71.3703C71.5698 106.227 71.7692 106.245 71.9367 106.289C72.7345 106.485 72.216 106.853 72.216 106.853C72.2758 106.849 72.3364 106.843 72.3978 106.835C73.3567 106.717 74.4376 106.217 74.2502 105.378C74.2079 105.188 74.0682 105.017 73.8744 104.867C73.3862 104.485 72.5533 104.232 72.0795 104.111C71.8632 104.055 71.7213 104.027 71.7213 104.027C71.7452 103.959 71.7532 103.907 71.7532 103.866C71.7532 103.858 71.7532 103.851 71.7515 103.844C71.7476 103.779 71.7213 103.754 71.7213 103.754C66.7753 102.389 62.9222 102.684 62.9222 102.684L63.8795 103.121C63.8755 103.121 63.8723 103.12 63.8684 103.12C63.7758 103.117 63.6761 103.117 63.5844 103.117C62.2306 103.139 60.9685 103.329 59.8908 103.643C57.7728 104.26 56.3649 105.357 56.3649 106.609C56.3649 106.668 56.3687 106.724 56.3752 106.779C56.3464 106.754 56.3186 106.728 56.2898 106.703C56.1422 106.572 56.0042 106.441 55.875 106.313C54.8969 105.348 54.4 104.5 54.1861 104.065C59.0388 102.287 64.9445 101.392 65.7701 101.275C66.0015 101.307 66.6285 101.401 67.5188 101.558C68.5295 101.735 69.8785 101.994 71.3719 102.338C73.2681 102.774 75.3956 103.347 77.3542 104.062C77.11 104.553 76.5037 105.573 75.2505 106.696ZM67.8363 103.652C69.1517 103.649 70.3396 103.791 71.2092 104.031C71.1812 104.027 70.7249 103.961 70.2615 103.933C70.0221 104.046 69.8147 104.093 69.7509 104.108C69.7429 104.111 69.7349 104.115 69.7349 104.115C68.3389 103.98 67.8363 103.652 67.8363 103.652ZM78.3792 103.632C73.4834 101.741 67.3313 100.775 66.1507 100.601L65.7677 100.547L65.3928 100.601C64.2081 100.775 58.0481 101.742 53.1515 103.636L52.9074 103.73L52.9672 103.884C53.0685 104.135 53.6549 105.46 55.291 106.93C56.3425 107.872 57.6284 108.699 59.1131 109.388C60.9223 110.224 63.0339 110.845 65.3929 111.232L65.7758 111.294L66.0246 111.25L66.1571 111.229C68.5016 110.843 70.6133 110.223 72.4345 109.384C73.9111 108.703 75.197 107.876 76.2572 106.927C77.903 105.451 78.5212 104.084 78.5842 103.871H78.585L78.644 103.718L78.3792 103.632Z" fill="#6CF0D1"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.9765 103.894L78.644 103.95C78.6703 103.887 78.6928 103.827 78.7153 103.771C78.7416 103.784 78.7636 103.794 78.7899 103.808L78.9765 103.894Z" fill="#000CA5"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.7893 103.808C78.7631 103.795 78.7411 103.784 78.7148 103.771C78.6923 103.827 78.6698 103.887 78.644 103.951L78.9759 103.894L78.7893 103.808Z" fill="#000CA5"/> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(47.5456 90.8749)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(47.5456 90.8749)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M79.5817 111.998C72.253 116.101 60.3709 116.101 53.0422 111.998C45.7135 107.894 45.7134 101.241 53.0421 97.1369C60.3708 93.0333 72.2529 93.0333 79.5816 97.137C86.9103 101.241 86.9104 107.894 79.5817 111.998Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M47.5456 104.249H85.0782V101.065H47.5456V104.249Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M53.0422 108.813C45.7135 104.71 45.7134 98.0563 53.0421 93.9526C60.3708 89.849 72.2529 89.849 79.5816 93.9527C86.9103 98.0564 86.9104 104.71 79.5817 108.813C72.253 112.917 60.3709 112.917 53.0422 108.813Z" fill="#86F7D1"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M54.9046 107.369C48.6045 103.887 48.6044 98.2419 54.9046 94.7601C61.2046 91.2781 71.4191 91.2781 77.7192 94.7601C84.0193 98.242 84.0194 103.887 77.7193 107.369C71.4192 110.851 61.2047 110.851 54.9046 107.369Z" fill="#95FFDA"/> -<rect width="26.809" height="10.7469" fill="black" fill-opacity="0" transform="translate(52.9074 96.2484)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M78.1519 99.828C78.1579 99.814 78.1629 99.8006 78.1681 99.788C78.1741 99.7909 78.1793 99.7933 78.1852 99.7962L78.2281 99.8156L78.1519 99.828ZM75.2505 102.397C74.8038 102.797 74.3155 103.174 73.7899 103.525C73.5585 103.68 73.3192 103.829 73.0736 103.974C71.4102 103.92 70.5534 103.679 70.1138 103.434C69.5898 103.143 69.6552 102.845 69.6552 102.845C69.6552 102.805 69.6552 102.765 69.6711 102.725C69.6711 102.725 69.6791 102.69 69.7054 102.634C69.7421 102.558 69.8139 102.443 69.9495 102.328C70.1816 102.131 70.6037 101.934 71.3568 101.932H71.3703C71.5698 101.928 71.7692 101.946 71.9367 101.99C72.7345 102.186 72.216 102.554 72.216 102.554C72.2758 102.55 72.3364 102.544 72.3978 102.536C73.3567 102.419 74.4376 101.918 74.2502 101.08C74.2079 100.889 74.0682 100.719 73.8744 100.568C73.3862 100.187 72.5533 99.9333 72.0795 99.812C71.8632 99.7567 71.7213 99.7287 71.7213 99.7287C71.7452 99.6605 71.7532 99.6078 71.7532 99.5673C71.7532 99.5597 71.7532 99.5524 71.7515 99.5455C71.7476 99.4806 71.7213 99.4555 71.7213 99.4555C66.7753 98.0901 62.9222 98.3851 62.9222 98.3851L63.8795 98.822C63.8755 98.822 63.8723 98.8216 63.8684 98.8216C63.7758 98.8183 63.6761 98.8183 63.5844 98.8183C62.2306 98.8405 60.9685 99.0299 59.8908 99.3442C57.7728 99.9609 56.3649 101.058 56.3649 102.31C56.3649 102.369 56.3687 102.425 56.3752 102.48C56.3464 102.455 56.3186 102.43 56.2898 102.404C56.1422 102.273 56.0042 102.142 55.875 102.015C54.8969 101.049 54.4 100.201 54.1861 99.7658C59.0388 97.9881 64.9445 97.0932 65.7701 96.9759C66.0015 97.0086 66.6285 97.1023 67.5188 97.2588C68.5295 97.4365 69.8785 97.6953 71.3719 98.0391C73.2681 98.4754 75.3956 99.0478 77.3542 99.7635C77.11 100.254 76.5037 101.274 75.2505 102.397ZM67.8363 99.3536C69.1517 99.35 70.3396 99.4919 71.2092 99.7319C71.1812 99.7279 70.7249 99.662 70.2615 99.634C70.0221 99.7469 69.8147 99.7942 69.7509 99.8087C69.7429 99.8125 69.7349 99.8161 69.7349 99.8161C68.3389 99.6813 67.8363 99.3536 67.8363 99.3536ZM78.3792 99.3332C73.4834 97.4423 67.3313 96.4767 66.1507 96.3026L65.7677 96.2484L65.3928 96.3019C64.2081 96.4767 58.0481 97.4434 53.1515 99.3371L52.9074 99.4312L52.9672 99.5855C53.0685 99.8364 53.6549 101.161 55.291 102.631C56.3425 103.573 57.6284 104.4 59.1131 105.089C60.9223 105.926 63.0339 106.546 65.3929 106.933L65.7758 106.995L66.0246 106.951L66.1571 106.93C68.5016 106.545 70.6133 105.924 72.4345 105.085C73.9111 104.404 75.197 103.577 76.2572 102.628C77.903 101.153 78.5212 99.7855 78.5842 99.572H78.585L78.644 99.4196L78.3792 99.3332Z" fill="#6CF0D1"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.9765 99.5955L78.644 99.6514C78.6703 99.5885 78.6928 99.5284 78.7153 99.4725C78.7416 99.4854 78.7636 99.4956 78.7899 99.509L78.9765 99.5955Z" fill="#000CA5"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.7893 99.509C78.7631 99.4961 78.7411 99.4854 78.7148 99.4725C78.6923 99.5284 78.6698 99.5885 78.644 99.6519L78.9759 99.5955L78.7893 99.509Z" fill="#000CA5"/> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(47.5456 86.5761)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(47.5456 86.5761)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M79.5817 107.699C72.253 111.803 60.3709 111.803 53.0422 107.699C45.7135 103.595 45.7134 96.9418 53.0421 92.8381C60.3708 88.7345 72.2529 88.7345 79.5816 92.8382C86.9103 96.9419 86.9104 103.595 79.5817 107.699Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M47.5456 99.9501H85.0782V96.7658H47.5456V99.9501Z" fill="#61C9A7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M53.0422 104.515C45.7135 100.411 45.7134 93.7575 53.0421 89.6539C60.3708 85.5502 72.2529 85.5502 79.5816 89.6539C86.9103 93.7576 86.9104 100.411 79.5817 104.515C72.253 108.618 60.3709 108.618 53.0422 104.515Z" fill="#86F7D1"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M54.9046 103.07C48.6045 99.5884 48.6044 93.9431 54.9046 90.4613C61.2046 86.9794 71.4191 86.9794 77.7192 90.4613C84.0193 93.9432 84.0194 99.5885 77.7193 103.07C71.4192 106.552 61.2047 106.552 54.9046 103.07Z" fill="#95FFDA"/> -<rect width="26.809" height="10.7469" fill="black" fill-opacity="0" transform="translate(52.9074 91.9496)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M78.1519 95.5293C78.1579 95.5152 78.1629 95.5018 78.1681 95.4892C78.1741 95.4921 78.1793 95.4945 78.1852 95.4974L78.2281 95.5168L78.1519 95.5293ZM75.2505 98.0981C74.8038 98.4983 74.3155 98.8747 73.7899 99.2261C73.5585 99.3809 73.3192 99.5305 73.0736 99.6755C71.4102 99.6208 70.5534 99.3805 70.1138 99.1355C69.5898 98.8442 69.6552 98.5467 69.6552 98.5467C69.6552 98.5067 69.6552 98.4665 69.6711 98.4266C69.6711 98.4266 69.6791 98.3912 69.7054 98.3355C69.7421 98.259 69.8139 98.1444 69.9495 98.0297C70.1816 97.8323 70.6037 97.6353 71.3568 97.6327H71.3703C71.5698 97.6291 71.7692 97.6473 71.9367 97.6911C72.7345 97.8876 72.216 98.2554 72.216 98.2554C72.2758 98.251 72.3364 98.2452 72.3978 98.2376C73.3567 98.1199 74.4376 97.6193 74.2502 96.7808C74.2079 96.5903 74.0682 96.4199 73.8744 96.2691C73.3862 95.8879 72.5533 95.6345 72.0795 95.5132C71.8632 95.4579 71.7213 95.4299 71.7213 95.4299C71.7452 95.3618 71.7532 95.309 71.7532 95.2685C71.7532 95.2609 71.7532 95.2536 71.7515 95.2467C71.7476 95.1818 71.7213 95.1567 71.7213 95.1567C66.7753 93.7913 62.9222 94.0863 62.9222 94.0863L63.8795 94.5232C63.8755 94.5232 63.8723 94.5228 63.8684 94.5228C63.7758 94.5195 63.6761 94.5195 63.5844 94.5195C62.2306 94.5417 60.9685 94.7311 59.8908 95.0454C57.7728 95.6622 56.3649 96.7592 56.3649 98.0115C56.3649 98.07 56.3687 98.1264 56.3752 98.1811C56.3464 98.1561 56.3186 98.1309 56.2898 98.1053C56.1422 97.974 56.0042 97.8435 55.875 97.7158C54.8969 96.7501 54.4 95.9021 54.1861 95.467C59.0388 93.6893 64.9445 92.7944 65.7701 92.6771C66.0015 92.7099 66.6285 92.8035 67.5188 92.9601C68.5295 93.1377 69.8785 93.3965 71.3719 93.7403C73.2681 94.1766 75.3956 94.749 77.3542 95.4648C77.11 95.9556 76.5037 96.9751 75.2505 98.0981ZM67.8363 95.0548C69.1517 95.0512 70.3396 95.1932 71.2092 95.4331C71.1812 95.4292 70.7249 95.3632 70.2615 95.3352C70.0221 95.4481 69.8147 95.4954 69.7509 95.51C69.7429 95.5137 69.7349 95.5173 69.7349 95.5173C68.3389 95.3825 67.8363 95.0548 67.8363 95.0548ZM78.3792 95.0344C73.4834 93.1435 67.3313 92.1779 66.1507 92.0039L65.7677 91.9496L65.3928 92.0031C64.2081 92.1779 58.0481 93.1446 53.1515 95.0383L52.9074 95.1324L52.9672 95.2867C53.0685 95.5376 53.6549 96.8626 55.291 98.3326C56.3425 99.2745 57.6284 100.101 59.1131 100.79C60.9223 101.627 63.0339 102.247 65.3929 102.635L65.7758 102.697L66.0246 102.652L66.1571 102.631C68.5016 102.246 70.6133 101.625 72.4345 100.786C73.9111 100.106 75.197 99.2786 76.2572 98.329C77.903 96.8539 78.5212 95.4867 78.5842 95.2732H78.585L78.644 95.1208L78.3792 95.0344Z" fill="#6CF0D1"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.9765 95.2967L78.644 95.3526C78.6703 95.2898 78.6928 95.2296 78.7153 95.1737C78.7416 95.1866 78.7636 95.1968 78.7899 95.2102L78.9765 95.2967Z" fill="#000CA5"/> <path opacity="0.175894" fill-rule="evenodd" clip-rule="evenodd" d="M78.7893 95.2102C78.7631 95.1973 78.7411 95.1866 78.7148 95.1737C78.6923 95.2296 78.6698 95.2898 78.644 95.3532L78.9759 95.2967L78.7893 95.2102Z" fill="#000CA5"/> -<rect width="37.5326" height="24.718" fill="black" fill-opacity="0" transform="translate(318.852 90.8749)"/> -<rect width="37.5326" height="24.2005" fill="black" fill-opacity="0" transform="translate(318.852 90.8749)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M350.888 111.998C343.56 116.101 331.678 116.101 324.349 111.998C317.02 107.894 317.02 101.241 324.349 97.1369C331.677 93.0333 343.56 93.0333 350.888 97.137C358.217 101.241 358.217 107.894 350.888 111.998Z" fill="#7F95EF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M318.852 104.249H356.385V101.065H318.852V104.249Z" fill="#838DB7"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M350.888 108.813C343.56 112.917 331.678 112.917 324.349 108.813C317.02 104.71 317.02 98.0563 324.349 93.9526C331.677 89.849 343.56 89.849 350.888 93.9527C358.217 98.0564 358.217 104.71 350.888 108.813Z" fill="#93A8FF"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M326.211 107.369C319.911 103.887 319.911 98.2419 326.211 94.7601C332.511 91.2781 342.726 91.2781 349.026 94.7601C355.326 98.242 355.326 103.887 349.026 107.369C342.726 110.851 332.511 110.851 326.211 107.369Z" fill="#9ABFFF"/> <g opacity="0.370867"> -<rect width="19.296" height="11.091" fill="black" fill-opacity="0" transform="translate(327.431 95.4199)"/> <g opacity="0.653363"> -<rect width="14.9457" height="5.18222" fill="black" fill-opacity="0" transform="translate(327.431 101.329)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M342.161 101.56C342.497 101.801 342.355 101.973 342.298 102.137C341.315 104.941 336.078 106.952 331.129 106.428C328.909 106.192 327.621 105.418 327.452 104.219C327.266 102.896 328.324 101.998 330.572 101.576C331.906 101.325 333.285 101.304 334.667 101.346C337.204 101.423 339.711 101.755 342.161 101.56Z" fill="#4562DF"/> </g> <g opacity="0.653363"> -<rect width="14.909" height="5.19137" fill="black" fill-opacity="0" transform="translate(331.818 95.4199)"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M331.818 100.345C332.063 97.7602 336.216 95.5645 340.869 95.4311C341.632 95.4091 342.397 95.4121 343.152 95.5101C345.409 95.8029 346.637 96.6105 346.723 97.8673C346.805 99.0741 345.734 99.9235 343.592 100.336C342.419 100.562 341.201 100.637 339.972 100.604C337.284 100.53 334.63 100.194 331.818 100.345Z" fill="#4562DF"/> </g> </g> diff --git a/packages/website/translations/chinese.json b/packages/website/translations/chinese.json index ed1a6044a..95b9bda62 100644 --- a/packages/website/translations/chinese.json +++ b/packages/website/translations/chinese.json @@ -78,5 +78,24 @@ "WEBSITE": "网站", "DEVELOPERS": "首页", "HOME": "Rocket.chat", - "ROCKETCHAT": "开发人员" + "ROCKETCHAT": "开发人员", + "BUILD_A_RELAYER": "build a relayer", + "BUILD_A_RELAYER_DESCRIPTION": "Learn how to build your own 0x relayer from scratch", + "DEVELOP_ON_ETHEREUM": "develop on Ethereum", + "DEVELOP_ON_ETHEREUM_DESCRIPTION": "Learn more about building applications ontop of Ethereum", + "ORDER_BASICS": "0x order basics", + "ORDER_BASICS_DESCRIPTION": "Tutorial on how to create, validate and fill an order using 0x", + "USE_NETWORKED_LIQUIDITY": "use networked liquidity", + "USE_NETWORKED_LIQUIDITY_DESCRIPTION": "Access the shared liquidity pool using the Standard Relayer API", + "VIEW_ALL_DOCUMENTATION": "view all documentation", + "SANDBOX": "0x.js sandbox", + "GITHUB": "github", + "LIVE_CHAT": "live chat", + "LIBRARIES_AND_TOOLS": "Libraries & Tools", + "LIBRARIES_AND_TOOLS_DESCRIPTION": + "A list of available tools maintained by the 0x core developers and wider community for building on top of 0x Protocol and Ethereum", + "MORE": "more", + "START_BUILDING_ON_0X": "Start building on 0x", + "START_BUILDING_ON_0X_DESCRIPTION": + "Follow one of our \"Getting started\" guides to learn more about building ontop of 0x." } diff --git a/packages/website/translations/english.json b/packages/website/translations/english.json index ac8e4900a..465bd49b4 100644 --- a/packages/website/translations/english.json +++ b/packages/website/translations/english.json @@ -83,11 +83,30 @@ "HOME": "home", "ROCKETCHAT": "rocket.chat", "TRADE_CALL_TO_ACTION": "trade on 0x", + "BUILD_A_RELAYER": "build a relayer", + "BUILD_A_RELAYER_DESCRIPTION": "Learn how to build your own 0x relayer from scratch", + "DEVELOP_ON_ETHEREUM": "develop on Ethereum", + "DEVELOP_ON_ETHEREUM_DESCRIPTION": "Learn more about building applications ontop of Ethereum", + "ORDER_BASICS": "0x order basics", + "ORDER_BASICS_DESCRIPTION": "Tutorial on how to create, validate and fill an order using 0x", + "USE_NETWORKED_LIQUIDITY": "use networked liquidity", + "USE_NETWORKED_LIQUIDITY_DESCRIPTION": "Learn how to tap into networked liquidity using the Standard Relayer API", + "VIEW_ALL_DOCUMENTATION": "view all documentation", + "SANDBOX": "0x.js sandbox", + "GITHUB": "github", + "LIVE_CHAT": "live chat", + "LIBRARIES_AND_TOOLS": "Libraries & Tools", + "LIBRARIES_AND_TOOLS_DESCRIPTION": + "A list of available tools maintained by the 0x core developers and wider community for building on top of 0x Protocol and Ethereum", + "MORE": "more", "OUR_MISSION_AND_VALUES": "our mission & values", "GAMING_AND_COLLECTABLES": "gaming & collectables", "GAMING_AND_COLLECTABLES_DESCRIPTION": "artists and game makers are tokenizing digital art and in-game items known as non-fungible tokens (NFTs). 0x enables these creators to add exchange functionality to give access and the ability to build marketplaces for NFT trading.", "ORDER_BOOKS": "order books", "ORDER_BOOKS_DESCRIPTION": - "there are thousands of decentralized apps that have native utility tokens. 0x provides market makers and professional exchanges an ability to host order books to facilitate the exchange of these assets." + "there are thousands of decentralized apps that have native utility tokens. 0x provides market makers and professional exchanges an ability to host order books to facilitate the exchange of these assets.", + "START_BUILDING_ON_0X": "Start building on 0x", + "START_BUILDING_ON_0X_DESCRIPTION": + "Follow one of our \"Getting started\" guides to learn more about building ontop of 0x." } diff --git a/packages/website/translations/korean.json b/packages/website/translations/korean.json index 8892f2dee..5485e5583 100644 --- a/packages/website/translations/korean.json +++ b/packages/website/translations/korean.json @@ -78,5 +78,24 @@ "WEBSITE": "Website", "HOME": "홈", "ROCKETCHAT": "Rocket.chat", - "DEVELOPERS": "개발자" + "DEVELOPERS": "개발자", + "BUILD_A_RELAYER": "build a relayer", + "BUILD_A_RELAYER_DESCRIPTION": "Learn how to build your own 0x relayer from scratch", + "DEVELOP_ON_ETHEREUM": "develop on Ethereum", + "DEVELOP_ON_ETHEREUM_DESCRIPTION": "Learn more about building applications ontop of Ethereum", + "ORDER_BASICS": "0x order basics", + "ORDER_BASICS_DESCRIPTION": "Tutorial on how to create, validate and fill an order using 0x", + "USE_NETWORKED_LIQUIDITY": "use networked liquidity", + "USE_NETWORKED_LIQUIDITY_DESCRIPTION": "Learn how to tap into networked liquidity using the Standard Relayer API", + "VIEW_ALL_DOCUMENTATION": "view all documentation", + "SANDBOX": "0x.js sandbox", + "GITHUB": "github", + "LIVE_CHAT": "live chat", + "LIBRARIES_AND_TOOLS": "Libraries & Tools", + "LIBRARIES_AND_TOOLS_DESCRIPTION": + "A list of available tools maintained by the 0x core developers and wider community for building on top of 0x Protocol and Ethereum", + "MORE": "more", + "START_BUILDING_ON_0X": "Start building on 0x", + "START_BUILDING_ON_0X_DESCRIPTION": + "Follow one of our \"Getting started\" guides to learn more about building ontop of 0x." } diff --git a/packages/website/translations/russian.json b/packages/website/translations/russian.json index 41a7a990d..a2e2a8cef 100644 --- a/packages/website/translations/russian.json +++ b/packages/website/translations/russian.json @@ -78,5 +78,24 @@ "WEBSITE": "Веб-сайт", "DEVELOPERS": "Домашняя страница", "HOME": "Rocket.chat", - "ROCKETCHAT": "Для разработчиков" + "ROCKETCHAT": "Для разработчиков", + "BUILD_A_RELAYER": "build a relayer", + "BUILD_A_RELAYER_DESCRIPTION": "Learn how to build your own 0x relayer from scratch", + "DEVELOP_ON_ETHEREUM": "develop on Ethereum", + "DEVELOP_ON_ETHEREUM_DESCRIPTION": "Learn more about building applications ontop of Ethereum", + "ORDER_BASICS": "0x order basics", + "ORDER_BASICS_DESCRIPTION": "Tutorial on how to create, validate and fill an order using 0x", + "USE_NETWORKED_LIQUIDITY": "use networked liquidity", + "USE_NETWORKED_LIQUIDITY_DESCRIPTION": "Learn how to tap into networked liquidity using the Standard Relayer API", + "VIEW_ALL_DOCUMENTATION": "view all documentation", + "SANDBOX": "0x.js sandbox", + "GITHUB": "github", + "LIVE_CHAT": "live chat", + "LIBRARIES_AND_TOOLS": "Libraries & Tools", + "LIBRARIES_AND_TOOLS_DESCRIPTION": + "A list of available tools maintained by the 0x core developers and wider community for building on top of 0x Protocol and Ethereum", + "MORE": "more", + "START_BUILDING_ON_0X": "Start building on 0x", + "START_BUILDING_ON_0X_DESCRIPTION": + "Follow one of our \"Getting started\" guides to learn more about building ontop of 0x." } diff --git a/packages/website/translations/spanish.json b/packages/website/translations/spanish.json index 7780190ac..acbc59c3d 100644 --- a/packages/website/translations/spanish.json +++ b/packages/website/translations/spanish.json @@ -79,5 +79,24 @@ "WEBSITE": "website", "DEVELOPERS": "inicio", "HOME": "rocket.chat", - "ROCKETCHAT": "desarrolladores" + "ROCKETCHAT": "desarrolladores", + "BUILD_A_RELAYER": "build a relayer", + "BUILD_A_RELAYER_DESCRIPTION": "Learn how to build your own 0x relayer from scratch", + "DEVELOP_ON_ETHEREUM": "develop on Ethereum", + "DEVELOP_ON_ETHEREUM_DESCRIPTION": "Learn more about building applications ontop of Ethereum", + "ORDER_BASICS": "0x order basics", + "ORDER_BASICS_DESCRIPTION": "Tutorial on how to create, validate and fill an order using 0x", + "USE_NETWORKED_LIQUIDITY": "use networked liquidity", + "USE_NETWORKED_LIQUIDITY_DESCRIPTION": "Learn how to tap into networked liquidity using the Standard Relayer API", + "VIEW_ALL_DOCUMENTATION": "view all documentation", + "SANDBOX": "0x.js sandbox", + "GITHUB": "github", + "LIVE_CHAT": "live chat", + "LIBRARIES_AND_TOOLS": "Libraries & Tools", + "LIBRARIES_AND_TOOLS_DESCRIPTION": + "A list of available tools maintained by the 0x core developers and wider community for building on top of 0x Protocol and Ethereum", + "MORE": "more", + "START_BUILDING_ON_0X": "Start building on 0x", + "START_BUILDING_ON_0X_DESCRIPTION": + "Follow one of our \"Getting started\" guides to learn more about building ontop of 0x." } diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 8955bbc30..62e16dd1d 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -1,4 +1,3 @@ -import { ZeroEx } from '0x.js'; import { BlockRange, ContractWrappers, @@ -8,9 +7,9 @@ import { ExchangeEvents, ExchangeFillEventArgs, IndexedFilterValues, -} from '@0xproject/contract-wrappers'; -import { assetDataUtils, orderHashUtils, signatureUtils } from '@0xproject/order-utils'; -import { EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; +} from '@0x/contract-wrappers'; +import { assetDataUtils, orderHashUtils, signatureUtils } from '@0x/order-utils'; +import { EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; import { ledgerEthereumBrowserClientFactoryAsync, LedgerSubprovider, @@ -19,10 +18,10 @@ import { RPCSubprovider, SignerSubprovider, Web3ProviderEngine, -} from '@0xproject/subproviders'; -import { SignedOrder, Token as ZeroExToken } from '@0xproject/types'; -import { BigNumber, intervalUtils, logUtils, promisify } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +} from '@0x/subproviders'; +import { SignedOrder, Token as ZeroExToken } from '@0x/types'; +import { BigNumber, intervalUtils, logUtils, promisify } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import { BlockParam, LogWithDecodedArgs, Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; import * as moment from 'moment'; @@ -53,6 +52,7 @@ import { backendClient } from 'ts/utils/backend_client'; import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; import { errorReporter } from 'ts/utils/error_reporter'; +import { fakeTokenRegistry } from 'ts/utils/fake_token_registry'; import { tokenAddressOverrides } from 'ts/utils/token_address_overrides'; import { utils } from 'ts/utils/utils'; import FilterSubprovider = require('web3-provider-engine/subproviders/filters'); @@ -74,7 +74,6 @@ export class Blockchain { public networkId: number; public nodeVersion: string; private _contractWrappers: ContractWrappers; - private _zeroEx: ZeroEx; private readonly _dispatcher: Dispatcher; private _web3Wrapper?: Web3Wrapper; private _blockchainWatcher?: BlockchainWatcher; @@ -164,7 +163,7 @@ export class Blockchain { const providerName = this._getNameGivenProvider(injectedWeb3.currentProvider); // Wrap Metamask in a compatability wrapper MetamaskSubprovider (to handle inconsistencies) const signerSubprovider = - providerName === Providers.Metamask + providerName === constants.PROVIDER_NAME_METAMASK ? new MetamaskSubprovider(injectedWeb3.currentProvider) : new SignerSubprovider(injectedWeb3.currentProvider); provider.addProvider(signerSubprovider); @@ -228,8 +227,9 @@ export class Blockchain { } } public async isAddressInTokenRegistryAsync(tokenAddress: string): Promise<boolean> { - utils.assert(!_.isUndefined(this._zeroEx), 'ZeroEx must be instantiated.'); - const tokenIfExists = await this._zeroEx.tokenRegistry.getTokenIfExistsAsync(tokenAddress); + const tokens = fakeTokenRegistry[this.networkId]; + const tokenIfExists = _.find(tokens, { address: tokenAddress }); + // HACK: Override token addresses on testnets const tokenSymbolToAddressOverrides = tokenAddressOverrides[this.networkId]; let isTokenAddressInOverrides = false; @@ -768,8 +768,7 @@ export class Blockchain { if (this.networkId === constants.NETWORK_ID_MAINNET) { tokenRegistryTokens = await backendClient.getTokenInfosAsync(); } else { - utils.assert(!_.isUndefined(this._zeroEx), 'ZeroEx must be instantiated.'); - tokenRegistryTokens = await this._zeroEx.tokenRegistry.getTokensAsync(); + tokenRegistryTokens = fakeTokenRegistry[this.networkId]; const tokenSymbolToAddressOverrides = tokenAddressOverrides[this.networkId]; if (!_.isUndefined(tokenAddressOverrides)) { // HACK: Override token addresses on testnets @@ -865,11 +864,6 @@ export class Blockchain { networkId, }; this._contractWrappers = new ContractWrappers(provider, contractWrappersConfig); - if (!_.isUndefined(this._zeroEx)) { - this._zeroEx.setProvider(provider, networkId); - } else { - this._zeroEx = new ZeroEx(provider, { networkId }); - } if (!_.isUndefined(this._blockchainWatcher)) { this._blockchainWatcher.destroy(); } diff --git a/packages/website/ts/blockchain_watcher.ts b/packages/website/ts/blockchain_watcher.ts index 39ed8b08b..835932dcd 100644 --- a/packages/website/ts/blockchain_watcher.ts +++ b/packages/website/ts/blockchain_watcher.ts @@ -1,5 +1,5 @@ -import { BigNumber, intervalUtils, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, intervalUtils, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import { Dispatcher } from 'ts/redux/dispatcher'; diff --git a/packages/website/ts/components/dialogs/blockchain_err_dialog.tsx b/packages/website/ts/components/dialogs/blockchain_err_dialog.tsx index 18c060991..a0114d898 100644 --- a/packages/website/ts/components/dialogs/blockchain_err_dialog.tsx +++ b/packages/website/ts/components/dialogs/blockchain_err_dialog.tsx @@ -1,4 +1,4 @@ -import { colors, Networks } from '@0xproject/react-shared'; +import { colors, Networks } from '@0x/react-shared'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; import * as React from 'react'; diff --git a/packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx b/packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx index f2cfb279a..9b9421f1a 100644 --- a/packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx +++ b/packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx @@ -1,5 +1,5 @@ -import { colors } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; +import { colors } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; diff --git a/packages/website/ts/components/dialogs/ledger_config_dialog.tsx b/packages/website/ts/components/dialogs/ledger_config_dialog.tsx index fbc6c868b..a9f591150 100644 --- a/packages/website/ts/components/dialogs/ledger_config_dialog.tsx +++ b/packages/website/ts/components/dialogs/ledger_config_dialog.tsx @@ -1,6 +1,6 @@ -import { colors, constants as sharedConstants } from '@0xproject/react-shared'; -import { BigNumber, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { colors, constants as sharedConstants } from '@0x/react-shared'; +import { BigNumber, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; diff --git a/packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx b/packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx index ef295762b..326df2a8c 100644 --- a/packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx +++ b/packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; import * as React from 'react'; diff --git a/packages/website/ts/components/dialogs/send_dialog.tsx b/packages/website/ts/components/dialogs/send_dialog.tsx index 2754b153f..5f6927cef 100644 --- a/packages/website/ts/components/dialogs/send_dialog.tsx +++ b/packages/website/ts/components/dialogs/send_dialog.tsx @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; diff --git a/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx b/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx index afbb30b82..bbec1d649 100644 --- a/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx +++ b/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; import * as React from 'react'; diff --git a/packages/website/ts/components/documentation/docs_logo.tsx b/packages/website/ts/components/documentation/docs_logo.tsx new file mode 100644 index 000000000..2840d5960 --- /dev/null +++ b/packages/website/ts/components/documentation/docs_logo.tsx @@ -0,0 +1,20 @@ +import { Link } from '@0x/react-shared'; +import * as React from 'react'; +import { WebsitePaths } from 'ts/types'; + +export interface DocsLogoProps { + height: number; + containerStyle?: React.CSSProperties; +} + +export const DocsLogo: React.StatelessComponent<DocsLogoProps> = props => { + return ( + <Link to={WebsitePaths.Docs}> + <img src="/images/docs_logo.svg" height={props.height} /> + </Link> + ); +}; + +DocsLogo.defaultProps = { + containerStyle: {}, +}; diff --git a/packages/website/ts/components/documentation/docs_top_bar.tsx b/packages/website/ts/components/documentation/docs_top_bar.tsx new file mode 100644 index 000000000..2054d0860 --- /dev/null +++ b/packages/website/ts/components/documentation/docs_top_bar.tsx @@ -0,0 +1,108 @@ +import { ALink, colors, Link } from '@0x/react-shared'; +import * as _ from 'lodash'; +import Drawer from 'material-ui/Drawer'; +import * as React from 'react'; +import { DocsLogo } from 'ts/components/documentation/docs_logo'; +import { Container } from 'ts/components/ui/container'; +import { Text } from 'ts/components/ui/text'; +import { Deco, Key, ScreenWidths } from 'ts/types'; +import { constants } from 'ts/utils/constants'; +import { Translate } from 'ts/utils/translate'; + +export interface DocsTopBarProps { + location: Location; + screenWidth: ScreenWidths; + translate: Translate; + sidebar?: React.ReactNode; +} + +interface DocsTopBarState { + isDrawerOpen: boolean; +} + +export class DocsTopBar extends React.Component<DocsTopBarProps, DocsTopBarState> { + constructor(props: DocsTopBarProps) { + super(props); + this.state = { + isDrawerOpen: false, + }; + } + public componentWillReceiveProps(nextProps: DocsTopBarProps): void { + if (nextProps.location.pathname !== this.props.location.pathname) { + this.setState({ + isDrawerOpen: false, + }); + } + } + public render(): React.ReactNode { + return ( + <Container height={80}> + <Container + className="flex items-center lg-pt3 md-pt3 sm-pt1 lg-mt1 md-mt1 sm-mt0 lg-justify-end md-justify-end sm-justify-start" + width="100%" + > + <Container className="sm-hide xs-hide"> + <Container className="flex items-center justify-between right" width="300px"> + {this._renderMenuItems(constants.DEVELOPER_TOPBAR_LINKS)} + </Container> + </Container> + <Container className="lg-hide md-hide"> + <Container paddingTop="6px"> + <DocsLogo height={30} /> + </Container> + </Container> + <Container className="md-hide lg-hide absolute" right="18px" top="12px"> + <i + className="zmdi zmdi-menu" + style={{ + color: colors.grey700, + fontSize: 30, + cursor: 'pointer', + }} + onClick={this._onMenuButtonClick.bind(this)} + /> + </Container> + </Container> + <Container width={'100%'} height={'1px'} backgroundColor={colors.grey300} marginTop={'13px'} /> + {this.props.screenWidth === ScreenWidths.Sm && this._renderDrawer()} + </Container> + ); + } + private _renderMenuItems(menuItemLinks: ALink[]): React.ReactNode { + const menuItems = _.map(menuItemLinks, menuItemInfo => { + return ( + <Link + key={`menu-item-${menuItemInfo.title}`} + to={menuItemInfo.to} + shouldOpenInNewTab={menuItemInfo.shouldOpenInNewTab} + > + <Container className="flex items-center" paddingLeft="4px"> + <Text fontSize="16px" fontColor={colors.lightLinkBlue} fontWeight="bold"> + {this.props.translate.get(menuItemInfo.title as Key, Deco.Cap)} + </Text> + </Container> + </Link> + ); + }); + return menuItems; + } + private _renderDrawer(): React.ReactNode { + return ( + <Drawer + open={this.state.isDrawerOpen} + docked={false} + openSecondary={true} + onRequestChange={this._onMenuButtonClick.bind(this)} + > + <Container className="clearfix pl1 pt2" onClick={this._onMenuButtonClick.bind(this)}> + {this.props.sidebar} + </Container> + </Drawer> + ); + } + private _onMenuButtonClick(): void { + this.setState({ + isDrawerOpen: !this.state.isDrawerOpen, + }); + } +} diff --git a/packages/website/ts/components/documentation/overview_content.tsx b/packages/website/ts/components/documentation/overview_content.tsx new file mode 100644 index 000000000..caabaf874 --- /dev/null +++ b/packages/website/ts/components/documentation/overview_content.tsx @@ -0,0 +1,134 @@ +import { colors, Link, MarkdownLinkBlock, utils as sharedUtils } from '@0x/react-shared'; +import { ObjectMap } from '@0x/types'; +import * as _ from 'lodash'; +import * as React from 'react'; +import * as ReactMarkdown from 'react-markdown'; +import { Element as ScrollElement } from 'react-scroll'; +import { TutorialButton } from 'ts/components/documentation/tutorial_button'; +import { Container } from 'ts/components/ui/container'; +import { Text } from 'ts/components/ui/text'; +import { Deco, Key, Package, TutorialInfo } from 'ts/types'; +import { Translate } from 'ts/utils/translate'; + +export interface OverviewContentProps { + translate: Translate; + tutorials: TutorialInfo[]; + categoryToPackages: ObjectMap<Package[]>; +} + +export interface OverviewContentState {} + +export class OverviewContent extends React.Component<OverviewContentProps, OverviewContentState> { + public render(): React.ReactNode { + return ( + <Container> + {this._renderSectionTitle(this.props.translate.get(Key.StartBuildOn0x, Deco.Cap))} + <Container paddingTop="12px"> + {this._renderSectionDescription(this.props.translate.get(Key.StartBuildOn0xDescription, Deco.Cap))} + <Container marginTop="36px"> + {_.map(this.props.tutorials, tutorialInfo => ( + <ScrollElement + name={sharedUtils.getIdFromName( + this.props.translate.get(tutorialInfo.link.title as Key, Deco.Cap), + )} + key={`tutorial-${tutorialInfo.link.title}`} + > + <TutorialButton translate={this.props.translate} tutorialInfo={tutorialInfo} /> + </ScrollElement> + ))} + </Container> + </Container> + <Container marginTop="32px" paddingBottom="100px"> + {this._renderSectionTitle(this.props.translate.get(Key.LibrariesAndTools, Deco.CapWords))} + <Container paddingTop="12px"> + {this._renderSectionDescription( + this.props.translate.get(Key.LibrariesAndToolsDescription, Deco.Cap), + )} + <Container marginTop="36px"> + {_.map(this.props.categoryToPackages, (pkgs, category) => + this._renderPackageCategory(category, pkgs), + )} + </Container> + </Container> + </Container> + </Container> + ); + } + private _renderPackageCategory(category: string, pkgs: Package[]): React.ReactNode { + return ( + <Container key={`category-${category}`}> + <Text fontSize="18px">{category}</Text> + <Container>{_.map(pkgs, pkg => this._renderPackage(pkg))}</Container> + </Container> + ); + } + private _renderPackage(pkg: Package): React.ReactNode { + const id = sharedUtils.getIdFromName(pkg.link.title); + return ( + <ScrollElement name={id} key={`package-${pkg.link.title}`}> + <Container className="pb2"> + <Container width="100%" height="1px" backgroundColor={colors.grey300} marginTop="11px" /> + <Container className="clearfix mt2 pt1"> + <Container className="md-col lg-col md-col-4 lg-col-4"> + <Link + to={pkg.link.to} + fontColor={colors.lightLinkBlue} + shouldOpenInNewTab={!!pkg.link.shouldOpenInNewTab} + > + <Text Tag="div" fontColor={colors.lightLinkBlue} fontWeight="bold"> + {pkg.link.title} + </Text> + </Link> + </Container> + <Container className="md-col lg-col md-col-6 lg-col-6 sm-py2"> + <Text fontColor={colors.grey700}> + <ReactMarkdown + source={pkg.description} + renderers={{ + link: MarkdownLinkBlock, + paragraph: 'span', + }} + /> + </Text> + </Container> + <Container className="md-col lg-col md-col-2 lg-col-2 sm-pb2 relative"> + <Container position="absolute" right="0px"> + <Link + to={pkg.link.to} + fontColor={colors.lightLinkBlue} + shouldOpenInNewTab={!!pkg.link.shouldOpenInNewTab} + > + <Container className="flex"> + <Container>{this.props.translate.get(Key.More, Deco.Cap)}</Container> + <Container paddingTop="1px" paddingLeft="6px"> + <i + className="zmdi zmdi-chevron-right bold" + style={{ fontSize: 18, color: colors.lightLinkBlue }} + /> + </Container> + </Container> + </Link> + </Container> + </Container> + </Container> + </Container> + </ScrollElement> + ); + } + private _renderSectionTitle(text: string): React.ReactNode { + return ( + <Container paddingTop="30px"> + <Text fontColor={colors.projectsGrey} fontSize="30px" fontWeight="bold"> + {text} + </Text> + </Container> + ); + } + private _renderSectionDescription(text: string): React.ReactNode { + return ( + <Text fontColor={colors.linkSectionGrey} fontSize="16px" fontFamily="Roboto Mono"> + {text} + </Text> + ); + } +} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/components/documentation/sidebar_header.tsx b/packages/website/ts/components/documentation/sidebar_header.tsx new file mode 100644 index 000000000..fece2704b --- /dev/null +++ b/packages/website/ts/components/documentation/sidebar_header.tsx @@ -0,0 +1,57 @@ +import { colors } from '@0x/react-shared'; +import * as _ from 'lodash'; +import * as React from 'react'; +import { VersionDropDown } from 'ts/components/documentation/version_drop_down'; +import { Container } from 'ts/components/ui/container'; +import { Text } from 'ts/components/ui/text'; +import { ScreenWidths } from 'ts/types'; + +export interface SidebarHeaderProps { + screenWidth: ScreenWidths; + title: string; + docsVersion?: string; + availableDocVersions?: string[]; + onVersionSelected?: () => void; +} + +export const SidebarHeader: React.StatelessComponent<SidebarHeaderProps> = ({ + screenWidth, + title, + docsVersion, + availableDocVersions, + onVersionSelected, +}) => { + return ( + <Container> + <Container className="flex justify-bottom"> + <Container className="left pl1" width="150px"> + <Text + fontColor={colors.lightLinkBlue} + fontSize={screenWidth === ScreenWidths.Sm ? '20px' : '22px'} + fontWeight="bold" + > + {title} + </Text> + </Container> + {!_.isUndefined(docsVersion) && + !_.isUndefined(availableDocVersions) && + !_.isUndefined(onVersionSelected) && ( + <div className="right" style={{ alignSelf: 'flex-end' }}> + <VersionDropDown + selectedVersion={docsVersion} + versions={availableDocVersions} + onVersionSelected={onVersionSelected} + /> + </div> + )} + </Container> + <Container + width={'100%'} + height={'1px'} + backgroundColor={colors.grey300} + marginTop="20px" + marginBottom="27px" + /> + </Container> + ); +}; diff --git a/packages/website/ts/components/documentation/tutorial_button.tsx b/packages/website/ts/components/documentation/tutorial_button.tsx new file mode 100644 index 000000000..b747ef598 --- /dev/null +++ b/packages/website/ts/components/documentation/tutorial_button.tsx @@ -0,0 +1,59 @@ +import { colors, Link } from '@0x/react-shared'; +import * as _ from 'lodash'; +import * as React from 'react'; +import { Container } from 'ts/components/ui/container'; +import { Text } from 'ts/components/ui/text'; +import { Deco, Key, TutorialInfo } from 'ts/types'; +import { Translate } from 'ts/utils/translate'; + +import { styled } from 'ts/style/theme'; + +export interface TutorialButtonProps { + className?: string; + translate: Translate; + tutorialInfo: TutorialInfo; +} + +const PlainTutorialButton: React.StatelessComponent<TutorialButtonProps> = ({ translate, tutorialInfo, className }) => ( + <Container className={className}> + <Link to={tutorialInfo.link.to} shouldOpenInNewTab={tutorialInfo.link.shouldOpenInNewTab}> + <div className="flex relative"> + <div className="col col-1 flex items-center sm-pr3"> + <img src={tutorialInfo.iconUrl} height={40} /> + </div> + <div className="lg-pl2 md-pl2 sm-pl3 col col-10"> + <Text Tag="div" fontSize="18" fontColor={colors.lightLinkBlue} fontWeight="bold"> + {translate.get(tutorialInfo.link.title as Key, Deco.Cap)} + </Text> + <Text Tag="div" fontColor={colors.grey750} fontSize="16"> + {translate.get(tutorialInfo.description as Key, Deco.Cap)} + </Text> + </div> + <div className="col col-1 flex items-center justify-end"> + <div className="right"> + <i + className="zmdi zmdi-chevron-right bold" + style={{ fontSize: 26, color: colors.lightLinkBlue }} + /> + </div> + </div> + </div> + </Link> + </Container> +); + +export const TutorialButton = styled(PlainTutorialButton)` + border-radius: 4px; + border: 1px solid ${colors.grey325}; + background-color: ${colors.white}; + &:hover { + border: 1px solid ${colors.lightLinkBlue}; + background-color: ${colors.lightestBlue}; + } + padding: 20px; + margin-bottom: 15px; +`; + +TutorialButton.defaultProps = {}; + +TutorialButton.displayName = 'TutorialButton'; diff --git a/packages/website/ts/components/documentation/version_drop_down.tsx b/packages/website/ts/components/documentation/version_drop_down.tsx new file mode 100644 index 000000000..a1c8b0547 --- /dev/null +++ b/packages/website/ts/components/documentation/version_drop_down.tsx @@ -0,0 +1,80 @@ +import { colors } from '@0x/react-shared'; +import * as _ from 'lodash'; +import * as React from 'react'; +import { Button } from 'ts/components/ui/button'; +import { Container } from 'ts/components/ui/container'; +import { DropDown, DropdownMouseEvent } from 'ts/components/ui/drop_down'; +import { Text } from 'ts/components/ui/text'; +import { styled } from 'ts/style/theme'; + +interface ActiveNodeProps { + className?: string; + selectedVersion: string; +} + +const PlainActiveNode: React.StatelessComponent<ActiveNodeProps> = ({ className, selectedVersion }) => ( + <Container className={className}> + <Container className="flex justify-center"> + <Text fontColor={colors.grey700} fontSize="12px"> + v {selectedVersion} + </Text> + <Container paddingLeft="6px"> + <i className="zmdi zmdi-chevron-down" style={{ fontSize: 17, color: 'rgba(153, 153, 153, 0.8)' }} /> + </Container> + </Container> + </Container> +); + +const ActiveNode = styled(PlainActiveNode)` + cursor: pointer; + border: 2px solid ${colors.beigeWhite}; + border-radius: 4px; + padding: 4px 6px 4px 8px; +`; + +interface VersionDropDownProps { + selectedVersion: string; + versions: string[]; + onVersionSelected: (semver: string) => void; +} + +interface VersionDropDownState {} + +export class VersionDropDown extends React.Component<VersionDropDownProps, VersionDropDownState> { + public render(): React.ReactNode { + const activeNode = <ActiveNode selectedVersion={this.props.selectedVersion} />; + return ( + <DropDown + activateEvent={DropdownMouseEvent.Click} + activeNode={activeNode} + popoverContent={this._renderDropdownMenu()} + anchorOrigin={{ horizontal: 'middle', vertical: 'bottom' }} + targetOrigin={{ horizontal: 'middle', vertical: 'top' }} + popoverStyle={{ borderRadius: 4 }} + /> + ); + } + private _renderDropdownMenu(): React.ReactNode { + const items = _.map(this.props.versions, version => { + const isSelected = version === this.props.selectedVersion; + return ( + <Container key={`dropdown-items-${version}`}> + <Button + borderRadius="0px" + padding="0.8em 0em" + width="100%" + isDisabled={isSelected} + onClick={this._onClick.bind(this, version)} + > + v {version} + </Button> + </Container> + ); + }); + const dropdownMenu = <Container width="88px">{items}</Container>; + return dropdownMenu; + } + private _onClick(selectedVersion: string): void { + this.props.onVersionSelected(selectedVersion); + } +} diff --git a/packages/website/ts/components/dropdowns/developers_drop_down.tsx b/packages/website/ts/components/dropdowns/developers_drop_down.tsx new file mode 100644 index 000000000..6e85c1499 --- /dev/null +++ b/packages/website/ts/components/dropdowns/developers_drop_down.tsx @@ -0,0 +1,162 @@ +import { ALink, colors, Link } from '@0x/react-shared'; +import * as _ from 'lodash'; +import * as React from 'react'; +import { Container } from 'ts/components/ui/container'; +import { DropDown } from 'ts/components/ui/drop_down'; +import { Text } from 'ts/components/ui/text'; +import { Deco, Key, WebsitePaths } from 'ts/types'; +import { constants } from 'ts/utils/constants'; +import { Translate } from 'ts/utils/translate'; + +const gettingStartedKeyToLinkInfo1: ALink[] = [ + { + title: Key.BuildARelayer, + to: `${WebsitePaths.Wiki}#Build-A-Relayer`, + }, + { + title: Key.OrderBasics, + to: `${WebsitePaths.Wiki}#Create,-Validate,-Fill-Order`, + }, +]; +const gettingStartedKeyToLinkInfo2: ALink[] = [ + { + title: Key.DevelopOnEthereum, + to: `${WebsitePaths.Wiki}#Ethereum-Development`, + }, + { + title: Key.UseNetworkedLiquidity, + to: `${WebsitePaths.Wiki}#Find,-Submit,-Fill-Order-From-Relayer`, + }, +]; +const popularDocsToLinkInfos: ALink[] = [ + { + title: Key.ZeroExJs, + to: WebsitePaths.ZeroExJs, + }, + { + title: Key.Connect, + to: WebsitePaths.Connect, + }, + { + title: Key.SmartContract, + to: WebsitePaths.SmartContracts, + }, +]; +const usefulLinksToLinkInfo: ALink[] = [ + { + title: Key.Wiki, + to: WebsitePaths.Wiki, + }, + { + title: Key.Github, + to: constants.URL_GITHUB_ORG, + shouldOpenInNewTab: true, + }, + { + title: Key.Whitepaper, + to: WebsitePaths.Whitepaper, + shouldOpenInNewTab: true, + }, +]; + +interface DevelopersDropDownProps { + location: Location; + translate: Translate; + menuItemStyles: React.CSSProperties; + menuIconStyle: React.CSSProperties; +} + +interface DevelopersDropDownState {} + +export class DevelopersDropDown extends React.Component<DevelopersDropDownProps, DevelopersDropDownState> { + public render(): React.ReactNode { + const activeNode = ( + <Container className="flex relative" paddingRight="10"> + <Text fontColor={this.props.menuIconStyle.color}> + {this.props.translate.get(Key.Developers, Deco.Cap)} + </Text> + </Container> + ); + return ( + <DropDown + activeNode={activeNode} + popoverContent={this._renderDropdownMenu()} + anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }} + targetOrigin={{ horizontal: 'left', vertical: 'top' }} + style={this.props.menuItemStyles} + popoverStyle={{ borderRadius: 4, width: 397, height: 373, marginTop: 0 }} + /> + ); + } + private _renderDropdownMenu(): React.ReactNode { + const sectionPadding = '28px'; + const dropdownMenu = ( + <Container> + <Container className="flex" padding={sectionPadding}> + <Container paddingRight="45px"> + {this._renderLinkSection(gettingStartedKeyToLinkInfo1, 'Getting started')} + </Container> + <Container>{this._renderLinkSection(gettingStartedKeyToLinkInfo2)}</Container> + </Container> + <Container width="100%" height="1px" backgroundColor={colors.grey300} /> + <Container className="flex" padding={sectionPadding}> + <Container paddingRight="62px"> + <Container>{this._renderLinkSection(popularDocsToLinkInfos, 'Popular docs')}</Container> + </Container> + <Container> + <Container>{this._renderLinkSection(usefulLinksToLinkInfo, 'Useful links')}</Container> + </Container> + </Container> + <Link to={WebsitePaths.Docs} fontColor={colors.lightBlueA700}> + <Container + padding="0.9rem" + backgroundColor={colors.lightBgGrey} + borderBottomLeftRadius={4} + borderBottomRightRadius={4} + > + <Text fontColor={colors.lightBlueA700} fontWeight="bold" fontSize="14px" textAlign="center"> + {this.props.translate.get(Key.ViewAllDocumentation, Deco.Upper)} + </Text> + </Container> + </Link> + </Container> + ); + return dropdownMenu; + } + private _renderLinkSection(links: ALink[], title: string = ''): React.ReactNode { + const numLinks = links.length; + let i = 0; + const renderLinks = _.map(links, (link: ALink) => { + const isWikiLink = _.startsWith(link.to, WebsitePaths.Wiki) && _.includes(link.to, '#'); + const isOnWiki = this.props.location.pathname === WebsitePaths.Wiki; + let to = link.to; + if (isWikiLink && isOnWiki) { + to = `${link.to.split('#')[1]}`; + } + i++; + const isLast = i === numLinks; + const linkText = this.props.translate.get(link.title as Key, Deco.Cap); + return ( + <Container className={`pr1 pt1 ${!isLast && 'pb1'}`} key={`dev-dropdown-link-${link.title}`}> + <Link to={to} shouldOpenInNewTab={!!link.shouldOpenInNewTab}> + <Text fontFamily="Roboto, Roboto Mono" fontColor={colors.lightBlueA700}> + {linkText} + </Text> + </Link> + </Container> + ); + }); + return ( + <Container> + <Container height="33px"> + {!_.isEmpty(title) && ( + <Text letterSpacing={1} fontColor={colors.linkSectionGrey} fontSize="14px" fontWeight={600}> + {title.toUpperCase()} + </Text> + )} + </Container> + {renderLinks} + </Container> + ); + } +} diff --git a/packages/website/ts/components/dropdowns/network_drop_down.tsx b/packages/website/ts/components/dropdowns/network_drop_down.tsx index 2fd2785d1..df2d72edc 100644 --- a/packages/website/ts/components/dropdowns/network_drop_down.tsx +++ b/packages/website/ts/components/dropdowns/network_drop_down.tsx @@ -1,4 +1,4 @@ -import { constants as sharedConstants } from '@0xproject/react-shared'; +import { constants as sharedConstants } from '@0x/react-shared'; import * as _ from 'lodash'; import DropDownMenu from 'material-ui/DropDownMenu'; import MenuItem from 'material-ui/MenuItem'; diff --git a/packages/website/ts/components/eth_weth_conversion_button.tsx b/packages/website/ts/components/eth_weth_conversion_button.tsx index b0091a1c1..536ba924b 100644 --- a/packages/website/ts/components/eth_weth_conversion_button.tsx +++ b/packages/website/ts/components/eth_weth_conversion_button.tsx @@ -1,5 +1,5 @@ -import { BigNumber, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import RaisedButton from 'material-ui/RaisedButton'; import * as React from 'react'; diff --git a/packages/website/ts/components/eth_wrappers.tsx b/packages/website/ts/components/eth_wrappers.tsx index 0b282b2a1..2af4252bd 100644 --- a/packages/website/ts/components/eth_wrappers.tsx +++ b/packages/website/ts/components/eth_wrappers.tsx @@ -1,6 +1,6 @@ -import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import Divider from 'material-ui/Divider'; import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 3c3155349..ec73e4199 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -1,14 +1,13 @@ -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { colors } from '@0xproject/react-shared'; -import { BigNumber, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { colors, Link } from '@0x/react-shared'; +import { BigNumber, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as accounting from 'accounting'; import * as _ from 'lodash'; import { Card, CardHeader, CardText } from 'material-ui/Card'; import Divider from 'material-ui/Divider'; import RaisedButton from 'material-ui/RaisedButton'; import * as React from 'react'; -import { Link } from 'react-router-dom'; import { Blockchain } from 'ts/blockchain'; import { TrackTokenConfirmationDialog } from 'ts/components/dialogs/track_token_confirmation_dialog'; import { FillOrderJSON } from 'ts/components/fill_order_json'; @@ -324,7 +323,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> { return ( <div> Order successfully filled. See the trade details in your{' '} - <Link to={`${WebsitePaths.Portal}/trades`} style={{ color: colors.white }}> + <Link to={`${WebsitePaths.Portal}/trades`} fontColor={colors.white}> trade history </Link> </div> diff --git a/packages/website/ts/components/fill_order_json.tsx b/packages/website/ts/components/fill_order_json.tsx index 1ecc426bd..41413eac2 100644 --- a/packages/website/ts/components/fill_order_json.tsx +++ b/packages/website/ts/components/fill_order_json.tsx @@ -1,5 +1,5 @@ -import { generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; +import { generatePseudoRandomSalt } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import Paper from 'material-ui/Paper'; import TextField from 'material-ui/TextField'; diff --git a/packages/website/ts/components/fill_warning_dialog.tsx b/packages/website/ts/components/fill_warning_dialog.tsx index 4821aaabe..430abd013 100644 --- a/packages/website/ts/components/fill_warning_dialog.tsx +++ b/packages/website/ts/components/fill_warning_dialog.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import Dialog from 'material-ui/Dialog'; import FlatButton from 'material-ui/FlatButton'; import * as React from 'react'; diff --git a/packages/website/ts/components/flash_messages/asset_send_completed.tsx b/packages/website/ts/components/flash_messages/asset_send_completed.tsx index f76e05fe1..b895126dc 100644 --- a/packages/website/ts/components/flash_messages/asset_send_completed.tsx +++ b/packages/website/ts/components/flash_messages/asset_send_completed.tsx @@ -1,6 +1,6 @@ -import { colors } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { colors } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import * as React from 'react'; import { utils } from 'ts/utils/utils'; diff --git a/packages/website/ts/components/flash_messages/transaction_submitted.tsx b/packages/website/ts/components/flash_messages/transaction_submitted.tsx index 2a6d2a64b..b1d909baa 100644 --- a/packages/website/ts/components/flash_messages/transaction_submitted.tsx +++ b/packages/website/ts/components/flash_messages/transaction_submitted.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; diff --git a/packages/website/ts/components/footer.tsx b/packages/website/ts/components/footer.tsx index 6dcb5a0e9..dfedcba55 100644 --- a/packages/website/ts/components/footer.tsx +++ b/packages/website/ts/components/footer.tsx @@ -1,31 +1,17 @@ -import { colors } from '@0xproject/react-shared'; +import { ALink, colors, Link } from '@0x/react-shared'; +import { ObjectMap } from '@0x/types'; import * as _ from 'lodash'; import DropDownMenu from 'material-ui/DropDownMenu'; import MenuItem from 'material-ui/MenuItem'; import * as React from 'react'; -import { Link } from 'react-router-dom'; + import { Dispatcher } from 'ts/redux/dispatcher'; import { Deco, Key, Language, WebsitePaths } from 'ts/types'; import { constants } from 'ts/utils/constants'; import { Translate } from 'ts/utils/translate'; -interface MenuItemsBySection { - [sectionName: string]: FooterMenuItem[]; -} - -interface FooterMenuItem { - title: string; - path?: string; - isExternal?: boolean; -} - const ICON_DIMENSION = 16; -const linkStyle = { - color: colors.white, - cursor: 'pointer', -}; - const languageToMenuTitle = { [Language.English]: 'English', [Language.Russian]: 'Русский', @@ -51,76 +37,74 @@ export class Footer extends React.Component<FooterProps, FooterState> { }; } public render(): React.ReactNode { - const menuItemsBySection: MenuItemsBySection = { + const sectionNameToLinks: ObjectMap<ALink[]> = { [Key.Documentation]: [ { + title: 'Developer Home', + to: WebsitePaths.Docs, + }, + { title: '0x.js', - path: WebsitePaths.ZeroExJs, + to: WebsitePaths.ZeroExJs, }, { title: this.props.translate.get(Key.SmartContracts, Deco.Cap), - path: WebsitePaths.SmartContracts, + to: WebsitePaths.SmartContracts, }, { title: this.props.translate.get(Key.Connect, Deco.Cap), - path: WebsitePaths.Connect, + to: WebsitePaths.Connect, }, { title: this.props.translate.get(Key.Whitepaper, Deco.Cap), - path: WebsitePaths.Whitepaper, - isExternal: true, + to: WebsitePaths.Whitepaper, + shouldOpenInNewTab: true, }, { title: this.props.translate.get(Key.Wiki, Deco.Cap), - path: WebsitePaths.Wiki, - }, - { - title: this.props.translate.get(Key.Faq, Deco.Cap), - path: WebsitePaths.FAQ, + to: WebsitePaths.Wiki, }, ], [Key.Community]: [ { title: this.props.translate.get(Key.RocketChat, Deco.Cap), - isExternal: true, - path: constants.URL_ZEROEX_CHAT, + to: constants.URL_ZEROEX_CHAT, + shouldOpenInNewTab: true, }, { title: this.props.translate.get(Key.Blog, Deco.Cap), - isExternal: true, - path: constants.URL_BLOG, + to: constants.URL_BLOG, + shouldOpenInNewTab: true, }, { title: 'Twitter', - isExternal: true, - path: constants.URL_TWITTER, + to: constants.URL_TWITTER, + shouldOpenInNewTab: true, }, { title: 'Reddit', - isExternal: true, - path: constants.URL_REDDIT, + to: constants.URL_REDDIT, + shouldOpenInNewTab: true, }, { title: this.props.translate.get(Key.Forum, Deco.Cap), - isExternal: true, - path: constants.URL_DISCOURSE_FORUM, + to: constants.URL_DISCOURSE_FORUM, + shouldOpenInNewTab: true, }, ], [Key.Organization]: [ { title: this.props.translate.get(Key.About, Deco.Cap), - isExternal: false, - path: WebsitePaths.About, + to: WebsitePaths.About, }, { title: this.props.translate.get(Key.Careers, Deco.Cap), - isExternal: false, - path: WebsitePaths.Careers, + to: WebsitePaths.Careers, }, { title: this.props.translate.get(Key.Contact, Deco.Cap), - isExternal: true, - path: 'mailto:team@0xproject.com', + to: 'mailto:team@0xproject.com', + shouldOpenInNewTab: true, }, ], }; @@ -160,19 +144,19 @@ export class Footer extends React.Component<FooterProps, FooterState> { <div className="col lg-col-4 md-col-4 col-12"> <div className="lg-right md-right sm-center"> {this._renderHeader(Key.Documentation)} - {_.map(menuItemsBySection[Key.Documentation], this._renderMenuItem.bind(this))} + {_.map(sectionNameToLinks[Key.Documentation], this._renderMenuItem.bind(this))} </div> </div> <div className="col lg-col-4 md-col-4 col-12 lg-pr2 md-pr2"> <div className="lg-right md-right sm-center"> {this._renderHeader(Key.Community)} - {_.map(menuItemsBySection[Key.Community], this._renderMenuItem.bind(this))} + {_.map(sectionNameToLinks[Key.Community], this._renderMenuItem.bind(this))} </div> </div> <div className="col lg-col-4 md-col-4 col-12"> <div className="lg-right md-right sm-center"> {this._renderHeader(Key.Organization)} - {_.map(menuItemsBySection[Key.Organization], this._renderMenuItem.bind(this))} + {_.map(sectionNameToLinks[Key.Organization], this._renderMenuItem.bind(this))} </div> </div> </div> @@ -187,7 +171,7 @@ export class Footer extends React.Component<FooterProps, FooterState> { </div> ); } - private _renderMenuItem(item: FooterMenuItem): React.ReactNode { + private _renderMenuItem(link: ALink): React.ReactNode { const titleToIcon: { [title: string]: string } = { [this.props.translate.get(Key.RocketChat, Deco.Cap)]: 'rocketchat.png', [this.props.translate.get(Key.Blog, Deco.Cap)]: 'medium.png', @@ -195,30 +179,26 @@ export class Footer extends React.Component<FooterProps, FooterState> { Reddit: 'reddit.png', [this.props.translate.get(Key.Forum, Deco.Cap)]: 'discourse.png', }; - const iconIfExists = titleToIcon[item.title]; + const iconIfExists = titleToIcon[link.title]; return ( - <div key={item.title} className="sm-center" style={{ fontSize: 13, paddingTop: 25 }}> - {item.isExternal ? ( - <a className="text-decoration-none" style={linkStyle} target="_blank" href={item.path}> + <div key={link.title} className="sm-center" style={{ fontSize: 13, paddingTop: 25 }}> + <Link + to={link.to} + shouldOpenInNewTab={link.shouldOpenInNewTab} + fontColor={colors.white} + className="text-decoration-none" + > + <div> {!_.isUndefined(iconIfExists) ? ( <div className="inline-block"> <div className="pr1 table-cell">{this._renderIcon(iconIfExists)}</div> - <div className="table-cell">{item.title}</div> + <div className="table-cell">{link.title}</div> </div> ) : ( - item.title + link.title )} - </a> - ) : ( - <Link to={item.path} style={linkStyle} className="text-decoration-none"> - <div> - {!_.isUndefined(iconIfExists) && ( - <div className="pr1">{this._renderIcon(iconIfExists)}</div> - )} - {item.title} - </div> - </Link> - )} + </div> + </Link> </div> ); } diff --git a/packages/website/ts/components/forms/subscribe_form.tsx b/packages/website/ts/components/forms/subscribe_form.tsx index 761db7517..f5560cfa7 100644 --- a/packages/website/ts/components/forms/subscribe_form.tsx +++ b/packages/website/ts/components/forms/subscribe_form.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; diff --git a/packages/website/ts/components/generate_order/generate_order_form.tsx b/packages/website/ts/components/generate_order/generate_order_form.tsx index ec153c005..8afbee977 100644 --- a/packages/website/ts/components/generate_order/generate_order_form.tsx +++ b/packages/website/ts/components/generate_order/generate_order_form.tsx @@ -1,7 +1,7 @@ -import { assetDataUtils, generatePseudoRandomSalt, orderHashUtils } from '@0xproject/order-utils'; -import { colors } from '@0xproject/react-shared'; -import { Order as ZeroExOrder } from '@0xproject/types'; -import { BigNumber, logUtils } from '@0xproject/utils'; +import { assetDataUtils, generatePseudoRandomSalt, orderHashUtils } from '@0x/order-utils'; +import { colors } from '@0x/react-shared'; +import { Order as ZeroExOrder } from '@0x/types'; +import { BigNumber, logUtils } from '@0x/utils'; import * as _ from 'lodash'; import Dialog from 'material-ui/Dialog'; import Divider from 'material-ui/Divider'; diff --git a/packages/website/ts/components/generate_order/new_token_form.tsx b/packages/website/ts/components/generate_order/new_token_form.tsx index 3d7eda84c..b8cd88b18 100644 --- a/packages/website/ts/components/generate_order/new_token_form.tsx +++ b/packages/website/ts/components/generate_order/new_token_form.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as _ from 'lodash'; import TextField from 'material-ui/TextField'; import * as moment from 'moment'; diff --git a/packages/website/ts/components/inputs/address_input.tsx b/packages/website/ts/components/inputs/address_input.tsx index 39ec72f8a..1a71f8081 100644 --- a/packages/website/ts/components/inputs/address_input.tsx +++ b/packages/website/ts/components/inputs/address_input.tsx @@ -1,5 +1,5 @@ -import { colors } from '@0xproject/react-shared'; -import { addressUtils } from '@0xproject/utils'; +import { colors } from '@0x/react-shared'; +import { addressUtils } from '@0x/utils'; import * as _ from 'lodash'; import TextField from 'material-ui/TextField'; import * as React from 'react'; diff --git a/packages/website/ts/components/inputs/allowance_state_toggle.tsx b/packages/website/ts/components/inputs/allowance_state_toggle.tsx index 39d2e3030..fd7d3b174 100644 --- a/packages/website/ts/components/inputs/allowance_state_toggle.tsx +++ b/packages/website/ts/components/inputs/allowance_state_toggle.tsx @@ -1,5 +1,5 @@ -import { colors } from '@0xproject/react-shared'; -import { BigNumber, logUtils } from '@0xproject/utils'; +import { colors } from '@0x/react-shared'; +import { BigNumber, logUtils } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import ReactTooltip = require('react-tooltip'); diff --git a/packages/website/ts/components/inputs/balance_bounded_input.tsx b/packages/website/ts/components/inputs/balance_bounded_input.tsx index eb01e3ea6..83f263842 100644 --- a/packages/website/ts/components/inputs/balance_bounded_input.tsx +++ b/packages/website/ts/components/inputs/balance_bounded_input.tsx @@ -1,5 +1,5 @@ -import { colors } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; +import { colors } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import TextField from 'material-ui/TextField'; import * as React from 'react'; diff --git a/packages/website/ts/components/inputs/eth_amount_input.tsx b/packages/website/ts/components/inputs/eth_amount_input.tsx index 3a7905442..6799e54bf 100644 --- a/packages/website/ts/components/inputs/eth_amount_input.tsx +++ b/packages/website/ts/components/inputs/eth_amount_input.tsx @@ -1,5 +1,5 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import * as React from 'react'; import { BalanceBoundedInput } from 'ts/components/inputs/balance_bounded_input'; diff --git a/packages/website/ts/components/inputs/expiration_input.tsx b/packages/website/ts/components/inputs/expiration_input.tsx index 5417ce715..3e43c1c07 100644 --- a/packages/website/ts/components/inputs/expiration_input.tsx +++ b/packages/website/ts/components/inputs/expiration_input.tsx @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import DatePicker from 'material-ui/DatePicker'; import TimePicker from 'material-ui/TimePicker'; diff --git a/packages/website/ts/components/inputs/hash_input.tsx b/packages/website/ts/components/inputs/hash_input.tsx index 5125ec4de..73b6615d4 100644 --- a/packages/website/ts/components/inputs/hash_input.tsx +++ b/packages/website/ts/components/inputs/hash_input.tsx @@ -1,6 +1,6 @@ -import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils'; -import { Styles } from '@0xproject/react-shared'; -import { Order } from '@0xproject/types'; +import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; +import { Styles } from '@0x/react-shared'; +import { Order } from '@0x/types'; import * as _ from 'lodash'; import * as React from 'react'; import ReactTooltip = require('react-tooltip'); diff --git a/packages/website/ts/components/inputs/token_amount_input.tsx b/packages/website/ts/components/inputs/token_amount_input.tsx index db093fb68..fded3a9dd 100644 --- a/packages/website/ts/components/inputs/token_amount_input.tsx +++ b/packages/website/ts/components/inputs/token_amount_input.tsx @@ -1,9 +1,8 @@ -import { colors } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { colors, Link } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import * as React from 'react'; -import { Link } from 'react-router-dom'; import { Blockchain } from 'ts/blockchain'; import { BalanceBoundedInput } from 'ts/components/inputs/balance_bounded_input'; import { Token, ValidatedBigNumberCallback, WebsitePaths } from 'ts/types'; @@ -112,7 +111,8 @@ export class TokenAmountInput extends React.Component<TokenAmountInputProps, Tok Insufficient allowance.{' '} <Link to={`${WebsitePaths.Portal}/account`} - style={{ cursor: 'pointer', color: colors.darkestGrey }} + textDecoration="underline" + fontColor={colors.darkestGrey} > Set allowance </Link> diff --git a/packages/website/ts/components/inputs/token_input.tsx b/packages/website/ts/components/inputs/token_input.tsx index 0bd36781e..c3c2d8b37 100644 --- a/packages/website/ts/components/inputs/token_input.tsx +++ b/packages/website/ts/components/inputs/token_input.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import Paper from 'material-ui/Paper'; import * as React from 'react'; import { Blockchain } from 'ts/blockchain'; diff --git a/packages/website/ts/components/nested_sidebar_menu.tsx b/packages/website/ts/components/nested_sidebar_menu.tsx new file mode 100644 index 000000000..db7d55261 --- /dev/null +++ b/packages/website/ts/components/nested_sidebar_menu.tsx @@ -0,0 +1,92 @@ +import { ALink, colors, Link, utils as sharedUtils } from '@0x/react-shared'; +import { ObjectMap } from '@0x/types'; +import * as _ from 'lodash'; +import * as React from 'react'; +import { Button } from 'ts/components/ui/button'; +import { Text } from 'ts/components/ui/text'; + +export interface NestedSidebarMenuProps { + sectionNameToLinks: ObjectMap<ALink[]>; + sidebarHeader?: React.ReactNode; + shouldReformatMenuItemNames?: boolean; +} + +export const NestedSidebarMenu = (props: NestedSidebarMenuProps) => { + const navigation = _.map(props.sectionNameToLinks, (links: ALink[], sectionName: string) => { + const finalSectionName = sharedUtils.convertCamelCaseToSpaces(sectionName); + const menuItems = _.map(links, (link, i) => { + const menuItemTitle = props.shouldReformatMenuItemNames + ? _.capitalize(sharedUtils.convertDashesToSpaces(link.title)) + : link.title; + const finalLink = { + ...link, + title: menuItemTitle, + }; + return <MenuItem key={`menu-item-${menuItemTitle}`} link={finalLink} />; + }); + // tslint:disable-next-line:no-unused-variable + return ( + <div key={`section-${sectionName}`} className="py1" style={{ color: colors.greyTheme }}> + <Text fontSize="14px" letterSpacing="0.5" className="py1 pl1"> + {finalSectionName.toUpperCase()} + </Text> + {menuItems} + </div> + ); + }); + return ( + <div> + {props.sidebarHeader} + <div>{navigation}</div> + </div> + ); +}; + +export interface MenuItemProps { + link: ALink; +} + +export interface MenuItemState { + isActive: boolean; +} + +export class MenuItem extends React.Component<MenuItemProps, MenuItemState> { + constructor(props: MenuItemProps) { + super(props); + const isActive = window.location.hash.slice(1) === props.link.to; + this.state = { + isActive, + }; + } + public render(): React.ReactNode { + const isActive = this.state.isActive; + return ( + <Link + to={this.props.link.to} + shouldOpenInNewTab={this.props.link.shouldOpenInNewTab} + onActivityChanged={this._onActivityChanged.bind(this)} + > + <Button + borderRadius="4px" + padding="0.4em 0.375em" + width="100%" + backgroundColor={isActive ? colors.lightLinkBlue : colors.grey100} + fontSize="14px" + textAlign="left" + > + <Text + fontWeight={isActive ? 'bold' : 'normal'} + fontColor={isActive ? colors.white : colors.grey800} + > + {this.props.link.title} + </Text> + </Button> + </Link> + ); + } + private _onActivityChanged(isActive: boolean): void { + this.setState({ + isActive, + }); + } +} diff --git a/packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx b/packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx index ca71fcd50..1d21e5a85 100644 --- a/packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx +++ b/packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as React from 'react'; import { Balance } from 'ts/components/ui/balance'; import { Container } from 'ts/components/ui/container'; diff --git a/packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx b/packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx index 1035d4ad9..173ba9a97 100644 --- a/packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx +++ b/packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import { Container } from 'ts/components/ui/container'; import { Image } from 'ts/components/ui/image'; diff --git a/packages/website/ts/components/onboarding/onboarding_card.tsx b/packages/website/ts/components/onboarding/onboarding_card.tsx index e1b0f304b..384bf7154 100644 --- a/packages/website/ts/components/onboarding/onboarding_card.tsx +++ b/packages/website/ts/components/onboarding/onboarding_card.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import * as _ from 'lodash'; diff --git a/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx b/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx index 522687758..6adcec0b1 100644 --- a/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx +++ b/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx @@ -2,7 +2,7 @@ import * as _ from 'lodash'; import * as React from 'react'; import { RouteComponentProps, withRouter } from 'react-router'; -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import { Blockchain } from 'ts/blockchain'; import { AddEthOnboardingStep } from 'ts/components/onboarding/add_eth_onboarding_step'; import { CongratsOnboardingStep } from 'ts/components/onboarding/congrats_onboarding_step'; diff --git a/packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx b/packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx index e4332de75..37eef867b 100644 --- a/packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx +++ b/packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx @@ -1,5 +1,5 @@ -import { colors } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; +import { colors } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; import * as React from 'react'; import { Balance } from 'ts/components/ui/balance'; import { Container } from 'ts/components/ui/container'; diff --git a/packages/website/ts/components/order_json.tsx b/packages/website/ts/components/order_json.tsx index a2a53a523..f33681835 100644 --- a/packages/website/ts/components/order_json.tsx +++ b/packages/website/ts/components/order_json.tsx @@ -1,4 +1,4 @@ -import { BigNumber, fetchAsync, logUtils } from '@0xproject/utils'; +import { BigNumber, fetchAsync, logUtils } from '@0x/utils'; import * as _ from 'lodash'; import Paper from 'material-ui/Paper'; import TextField from 'material-ui/TextField'; diff --git a/packages/website/ts/components/portal/back_button.tsx b/packages/website/ts/components/portal/back_button.tsx index ca35abc2b..bea69bb95 100644 --- a/packages/website/ts/components/portal/back_button.tsx +++ b/packages/website/ts/components/portal/back_button.tsx @@ -1,7 +1,5 @@ -import { Styles } from '@0xproject/react-shared'; +import { Link, Styles } from '@0x/react-shared'; import * as React from 'react'; -import { Link } from 'react-router-dom'; - import { Island } from 'ts/components/ui/island'; import { colors } from 'ts/style/colors'; @@ -27,7 +25,7 @@ const styles: Styles = { export const BackButton = (props: BackButtonProps) => { return ( <div style={{ height: 65, paddingTop: 25 }}> - <Link to={props.to} style={{ textDecoration: 'none' }}> + <Link to={props.to}> <Island className="flex right" style={styles.backButton}> <div style={{ marginLeft: 12 }}> <i style={styles.backButtonIcon} className={`zmdi zmdi-arrow-left`} /> diff --git a/packages/website/ts/components/portal/drawer_menu.tsx b/packages/website/ts/components/portal/drawer_menu.tsx index a6707e86c..7280a6102 100644 --- a/packages/website/ts/components/portal/drawer_menu.tsx +++ b/packages/website/ts/components/portal/drawer_menu.tsx @@ -1,4 +1,4 @@ -import { Styles } from '@0xproject/react-shared'; +import { Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; @@ -39,7 +39,7 @@ export interface DrawerMenuProps { } export const DrawerMenu = (props: DrawerMenuProps) => { const relayerItemEntry = { - to: `${WebsitePaths.Portal}`, + to: WebsitePaths.Portal, labelText: 'Relayer ecosystem', iconName: 'zmdi-portable-wifi', }; diff --git a/packages/website/ts/components/portal/menu.tsx b/packages/website/ts/components/portal/menu.tsx index 39dab77f5..d59101686 100644 --- a/packages/website/ts/components/portal/menu.tsx +++ b/packages/website/ts/components/portal/menu.tsx @@ -1,7 +1,7 @@ -import { Styles } from '@0xproject/react-shared'; +import { Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; -import { MenuItem } from 'ts/components/ui/menu_item'; +import { CustomMenuItem } from 'ts/components/ui/custom_menu_item'; import { colors } from 'ts/style/colors'; import { WebsitePaths } from 'ts/types'; @@ -67,14 +67,14 @@ export const Menu: React.StatelessComponent<MenuProps> = (props: MenuProps) => { {_.map(props.menuItemEntries, entry => { const isSelected = entry.to === props.selectedPath; return ( - <MenuItem key={entry.to} to={entry.to}> + <CustomMenuItem key={entry.to} to={entry.to}> <MenuItemLabel title={entry.labelText} iconName={entry.iconName} selected={isSelected} theme={props.theme} /> - </MenuItem> + </CustomMenuItem> ); })} </div> diff --git a/packages/website/ts/components/portal/portal.tsx b/packages/website/ts/components/portal/portal.tsx index b42954f60..94ab63ac6 100644 --- a/packages/website/ts/components/portal/portal.tsx +++ b/packages/website/ts/components/portal/portal.tsx @@ -1,9 +1,9 @@ -import { colors } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; +import { colors, Link } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import * as DocumentTitle from 'react-document-title'; -import { Link, Route, RouteComponentProps, Switch } from 'react-router-dom'; +import { Route, RouteComponentProps, Switch } from 'react-router-dom'; import { Blockchain } from 'ts/blockchain'; import { BlockchainErrDialog } from 'ts/components/dialogs/blockchain_err_dialog'; @@ -18,7 +18,7 @@ import { Loading } from 'ts/components/portal/loading'; import { Menu, MenuTheme } from 'ts/components/portal/menu'; import { Section } from 'ts/components/portal/section'; import { TextHeader } from 'ts/components/portal/text_header'; -import { RelayerIndex } from 'ts/components/relayer_index/relayer_index'; +import { RelayerIndex, RelayerIndexCellStyle } from 'ts/components/relayer_index/relayer_index'; import { TokenBalances } from 'ts/components/token_balances'; import { TopBar, TopBarDisplayType } from 'ts/components/top_bar/top_bar'; import { TradeHistory } from 'ts/components/trade_history/trade_history'; @@ -210,12 +210,16 @@ export class Portal extends React.Component<PortalProps, PortalState> { isLoaded: false, }; } - this.setState({ - trackedTokenStateByAddress, - }); - // Fetch the actual balance/allowance. - // tslint:disable-next-line:no-floating-promises - this._fetchBalancesAndAllowancesAsync(newTokenAddresses); + this.setState( + { + trackedTokenStateByAddress, + }, + () => { + // Fetch the actual balance/allowance. + // tslint:disable-next-line:no-floating-promises + this._fetchBalancesAndAllowancesAsync(newTokenAddresses); + }, + ); } } public render(): React.ReactNode { @@ -317,7 +321,7 @@ export class Portal extends React.Component<PortalProps, PortalState> { }; return ( <Section - header={<BackButton to={`${WebsitePaths.Portal}`} labelText="back to Relayers" />} + header={<BackButton to={WebsitePaths.Portal} labelText="back to Relayers" />} body={<Menu selectedPath={routeComponentProps.location.pathname} theme={menuTheme} />} /> ); @@ -389,9 +393,7 @@ export class Portal extends React.Component<PortalProps, PortalState> { </Container> ); return !shouldStartOnboarding ? ( - <Link to={{ pathname: `${WebsitePaths.Portal}/account` }} style={{ textDecoration: 'none' }}> - {startOnboarding} - </Link> + <Link to={`${WebsitePaths.Portal}/account`}>{startOnboarding}</Link> ) : ( startOnboarding ); @@ -541,6 +543,7 @@ export class Portal extends React.Component<PortalProps, PortalState> { } private _renderRelayerIndexSection(): React.ReactNode { const isMobile = utils.isMobileWidth(this.props.screenWidth); + // TODO(bmillman): revert RelayerIndex cellStyle to Expanded once data pipeline is tracking v2 volume return ( <Section header={!isMobile && <TextHeader labelText="0x Relayers" />} @@ -551,7 +554,11 @@ export class Portal extends React.Component<PortalProps, PortalState> { {this._renderStartOnboarding()} </Container> )} - <RelayerIndex networkId={this.props.networkId} screenWidth={this.props.screenWidth} /> + <RelayerIndex + networkId={this.props.networkId} + screenWidth={this.props.screenWidth} + cellStyle={RelayerIndexCellStyle.Minimized} + /> </Container> } /> @@ -641,6 +648,9 @@ export class Portal extends React.Component<PortalProps, PortalState> { } private async _fetchBalancesAndAllowancesAsync(tokenAddresses: string[]): Promise<void> { + if (_.isEmpty(tokenAddresses)) { + return; + } const trackedTokenStateByAddress = this.state.trackedTokenStateByAddress; const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress; const balancesAndAllowances = await Promise.all( diff --git a/packages/website/ts/components/portal/text_header.tsx b/packages/website/ts/components/portal/text_header.tsx index 853da3a29..b6045b832 100644 --- a/packages/website/ts/components/portal/text_header.tsx +++ b/packages/website/ts/components/portal/text_header.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import { Text } from 'ts/components/ui/text'; diff --git a/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx b/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx index 193dd237a..7f1b4ebb4 100644 --- a/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx +++ b/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx @@ -1,4 +1,4 @@ -import { Styles } from '@0xproject/react-shared'; +import { Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import { GridTile as PlainGridTile } from 'material-ui/GridList'; import * as React from 'react'; @@ -14,9 +14,15 @@ import { styled } from 'ts/style/theme'; import { WebsiteBackendRelayerInfo } from 'ts/types'; import { utils } from 'ts/utils/utils'; +export enum RelayerGridTileStyle { + Expanded = 0, + Minimized, +} + export interface RelayerGridTileProps { relayerInfo: WebsiteBackendRelayerInfo; networkId: number; + style: RelayerGridTileStyle; } const styles: Styles = { @@ -30,10 +36,14 @@ const styles: Styles = { height: '100%', boxSizing: 'border-box', }, - header: { + expandedHeader: { height: '50%', width: '100%', }, + minimizedHeader: { + height: '100%', + width: '100%', + }, body: { height: '50%', width: '100%', @@ -75,10 +85,12 @@ export const RelayerGridTile: React.StatelessComponent<RelayerGridTileProps> = ( !_.isUndefined(headerImageUrl) && !_.isUndefined(props.relayerInfo.primaryColor) ? props.relayerInfo.primaryColor : FALLBACK_PRIMARY_COLOR; + const isExpanded = props.style === RelayerGridTileStyle.Expanded; + const headerStyle = isExpanded ? styles.expandedHeader : styles.minimizedHeader; return ( <Island style={styles.root} Component={GridTile}> <div style={styles.innerDiv} onClick={onClick}> - <div className="flex items-center" style={{ ...styles.header, backgroundColor: headerBackgroundColor }}> + <div className="flex items-center" style={{ ...headerStyle, backgroundColor: headerBackgroundColor }}> <Image className="mx-auto" src={props.relayerInfo.logoImgUrl} @@ -86,21 +98,23 @@ export const RelayerGridTile: React.StatelessComponent<RelayerGridTileProps> = ( height={RELAYER_ICON_HEIGHT} /> </div> - <div style={styles.body}> - <div className="pb1" style={styles.relayerNameLabel}> - {props.relayerInfo.name} - </div> - <Section titleText="Weekly Trade Volume"> - {!_.isUndefined(weeklyTxnVolume) && ( - <div style={styles.weeklyTradeVolumeLabel}>{props.relayerInfo.weeklyTxnVolume}</div> - )} - </Section> - <Container marginTop="10px"> - <Section titleText="Top Tokens"> - {!_.isEmpty(topTokens) && <TopTokens tokens={topTokens} networkId={props.networkId} />} + {isExpanded && ( + <div style={styles.body}> + <div className="pb1" style={styles.relayerNameLabel}> + {props.relayerInfo.name} + </div> + <Section titleText="Weekly Trade Volume"> + {!_.isUndefined(weeklyTxnVolume) && ( + <div style={styles.weeklyTradeVolumeLabel}>{props.relayerInfo.weeklyTxnVolume}</div> + )} </Section> - </Container> - </div> + <Container marginTop="10px"> + <Section titleText="Top Tokens"> + {!_.isEmpty(topTokens) && <TopTokens tokens={topTokens} networkId={props.networkId} />} + </Section> + </Container> + </div> + )} </div> </Island> ); diff --git a/packages/website/ts/components/relayer_index/relayer_index.tsx b/packages/website/ts/components/relayer_index/relayer_index.tsx index 91dbeb27a..e88c20d7e 100644 --- a/packages/website/ts/components/relayer_index/relayer_index.tsx +++ b/packages/website/ts/components/relayer_index/relayer_index.tsx @@ -3,14 +3,20 @@ import CircularProgress from 'material-ui/CircularProgress'; import { GridList } from 'material-ui/GridList'; import * as React from 'react'; -import { RelayerGridTile } from 'ts/components/relayer_index/relayer_grid_tile'; +import { RelayerGridTile, RelayerGridTileStyle } from 'ts/components/relayer_index/relayer_grid_tile'; import { Retry } from 'ts/components/ui/retry'; import { ScreenWidths, WebsiteBackendRelayerInfo } from 'ts/types'; import { backendClient } from 'ts/utils/backend_client'; +export enum RelayerIndexCellStyle { + Expanded = 0, + Minimized, +} + export interface RelayerIndexProps { networkId: number; screenWidth: ScreenWidths; + cellStyle: RelayerIndexCellStyle; } interface RelayerIndexState { @@ -18,7 +24,8 @@ interface RelayerIndexState { error?: Error; } -const CELL_HEIGHT = 290; +const CELL_HEIGHT_EXPANDED = 290; +const CELL_HEIGHT_MINIMIZED = 225; const NUMBER_OF_COLUMNS_LARGE = 3; const NUMBER_OF_COLUMNS_MEDIUM = 2; const NUMBER_OF_COLUMNS_SMALL = 2; @@ -61,15 +68,23 @@ export class RelayerIndex extends React.Component<RelayerIndexProps, RelayerInde numberOfRelayers, this._numberOfColumnsForScreenWidth(this.props.screenWidth), ); + const isExpanded = this.props.cellStyle === RelayerIndexCellStyle.Expanded; + const cellHeight = isExpanded ? CELL_HEIGHT_EXPANDED : CELL_HEIGHT_MINIMIZED; + const gridTileStyle = isExpanded ? RelayerGridTileStyle.Expanded : RelayerGridTileStyle.Minimized; return ( <GridList - cellHeight={CELL_HEIGHT} + cellHeight={cellHeight} cols={numberOfColumns} padding={GRID_PADDING} style={{ marginTop: -10, marginBottom: 0 }} > {this.state.relayerInfos.map((relayerInfo: WebsiteBackendRelayerInfo, index) => ( - <RelayerGridTile key={index} relayerInfo={relayerInfo} networkId={this.props.networkId} /> + <RelayerGridTile + key={index} + relayerInfo={relayerInfo} + networkId={this.props.networkId} + style={gridTileStyle} + /> ))} </GridList> ); diff --git a/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx b/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx index f3787bd27..558d99855 100644 --- a/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx +++ b/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx @@ -1,4 +1,4 @@ -import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; +import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; diff --git a/packages/website/ts/components/send_button.tsx b/packages/website/ts/components/send_button.tsx index 107983dee..27438e5d5 100644 --- a/packages/website/ts/components/send_button.tsx +++ b/packages/website/ts/components/send_button.tsx @@ -1,4 +1,4 @@ -import { BigNumber, logUtils } from '@0xproject/utils'; +import { BigNumber, logUtils } from '@0x/utils'; import * as _ from 'lodash'; import RaisedButton from 'material-ui/RaisedButton'; import * as React from 'react'; diff --git a/packages/website/ts/components/sidebar_header.tsx b/packages/website/ts/components/sidebar_header.tsx deleted file mode 100644 index a14ab54f5..000000000 --- a/packages/website/ts/components/sidebar_header.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { colors } from '@0xproject/react-shared'; -import * as React from 'react'; - -interface SidebarHeaderProps { - title: string; - iconUrl: string; -} - -interface SidebarHeaderState {} - -export class SidebarHeader extends React.Component<SidebarHeaderProps, SidebarHeaderState> { - public render(): React.ReactNode { - return ( - <div className="pt2 md-px1 sm-px2" style={{ color: colors.black, paddingBottom: 18 }}> - <div className="flex" style={{ fontSize: 25 }}> - <div style={{ fontWeight: 'bold', fontFamily: 'Roboto Mono' }}>0x</div> - <div className="pl2" style={{ lineHeight: 1.4, fontWeight: 300 }}> - docs - </div> - </div> - <div className="pl1" style={{ color: colors.grey350, paddingBottom: 9, paddingLeft: 10, height: 17 }}> - | - </div> - <div className="flex"> - <div> - <img src={this.props.iconUrl} width="22" /> - </div> - <div className="pl1" style={{ fontWeight: 600, fontSize: 20, lineHeight: 1.2 }}> - {this.props.title} - </div> - </div> - </div> - ); - } -} diff --git a/packages/website/ts/components/token_balances.tsx b/packages/website/ts/components/token_balances.tsx index 5965ad9bd..9ba2bad84 100644 --- a/packages/website/ts/components/token_balances.tsx +++ b/packages/website/ts/components/token_balances.tsx @@ -4,9 +4,9 @@ import { Networks, Styles, utils as sharedUtils, -} from '@0xproject/react-shared'; -import { BigNumber, errorUtils, fetchAsync, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +} from '@0x/react-shared'; +import { BigNumber, errorUtils, fetchAsync, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import Dialog from 'material-ui/Dialog'; import Divider from 'material-ui/Divider'; diff --git a/packages/website/ts/components/top_bar/provider_display.tsx b/packages/website/ts/components/top_bar/provider_display.tsx index 806eaeea5..c88c29b8e 100644 --- a/packages/website/ts/components/top_bar/provider_display.tsx +++ b/packages/website/ts/components/top_bar/provider_display.tsx @@ -1,4 +1,4 @@ -import { Styles } from '@0xproject/react-shared'; +import { Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import CircularProgress from 'material-ui/CircularProgress'; import ActionAccountBalanceWallet from 'material-ui/svg-icons/action/account-balance-wallet'; diff --git a/packages/website/ts/components/top_bar/top_bar.tsx b/packages/website/ts/components/top_bar/top_bar.tsx index fe2c1fcf9..d5967cd1d 100644 --- a/packages/website/ts/components/top_bar/top_bar.tsx +++ b/packages/website/ts/components/top_bar/top_bar.tsx @@ -1,23 +1,16 @@ -import { DocsInfo, DocsMenu } from '@0xproject/react-docs'; -import { - colors, - constants as sharedConstants, - MenuSubsectionsBySection, - NestedSidebarMenu, - Styles, -} from '@0xproject/react-shared'; +import { DocsInfo } from '@0x/react-docs'; +import { ALink, colors, Link, Styles } from '@0x/react-shared'; +import { ObjectMap } from '@0x/types'; import * as _ from 'lodash'; import Drawer from 'material-ui/Drawer'; -import Menu from 'material-ui/Menu'; import MenuItem from 'material-ui/MenuItem'; import * as React from 'react'; -import { Link } from 'react-router-dom'; import { Blockchain } from 'ts/blockchain'; +import { DevelopersDropDown } from 'ts/components/dropdowns/developers_drop_down'; import { DrawerMenu } from 'ts/components/portal/drawer_menu'; import { ProviderDisplay } from 'ts/components/top_bar/provider_display'; import { TopBarMenuItem } from 'ts/components/top_bar/top_bar_menu_item'; import { Container } from 'ts/components/ui/container'; -import { DropDown } from 'ts/components/ui/drop_down'; import { Dispatcher } from 'ts/redux/dispatcher'; import { Deco, Key, ProviderType, WebsitePaths } from 'ts/types'; import { constants } from 'ts/utils/constants'; @@ -41,8 +34,7 @@ export interface TopBarProps { translate: Translate; docsVersion?: string; availableDocVersions?: string[]; - menu?: DocsMenu; - menuSubsectionsBySection?: MenuSubsectionsBySection; + sectionNameToLinks?: ObjectMap<ALink[]>; displayType?: TopBarDisplayType; docsInfo?: DocsInfo; style?: React.CSSProperties; @@ -80,21 +72,6 @@ const styles: Styles = { }, }; -const DOC_WEBSITE_PATHS_TO_KEY = { - [WebsitePaths.SolCov]: Key.SolCov, - [WebsitePaths.SmartContracts]: Key.SmartContracts, - [WebsitePaths.Web3Wrapper]: Key.Web3Wrapper, - [WebsitePaths.SolCompiler]: Key.SolCompiler, - [WebsitePaths.JSONSchemas]: Key.JsonSchemas, - [WebsitePaths.Subproviders]: Key.Subproviders, - [WebsitePaths.ContractWrappers]: Key.ContractWrappers, - [WebsitePaths.Connect]: Key.Connect, - [WebsitePaths.ZeroExJs]: Key.ZeroExJs, - [WebsitePaths.OrderUtils]: Key.OrderUtils, - [WebsitePaths.OrderWatcher]: Key.OrderWatcher, - [WebsitePaths.AssetBuyer]: Key.AssetBuyer, -}; - const DEFAULT_HEIGHT = 68; const EXPANDED_HEIGHT = 75; @@ -130,117 +107,6 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> { ? 'flex mx-auto items-center max-width-4' : 'flex mx-auto items-center'; const height = isExpandedDisplayType ? EXPANDED_HEIGHT : DEFAULT_HEIGHT; - const developerSectionMenuItems = [ - <Link key="subMenuItem-zeroEx" to={WebsitePaths.ZeroExJs} className="text-decoration-none"> - <MenuItem style={{ fontSize: styles.menuItem.fontSize }} primaryText="0x.js" /> - </Link>, - <Link key="subMenuItem-smartContracts" to={WebsitePaths.SmartContracts} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.SmartContracts, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-0xconnect" to={WebsitePaths.Connect} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.Connect, Deco.CapWords)} - /> - </Link>, - <a - key="subMenuItem-standard-relayer-api" - target="_blank" - className="text-decoration-none" - href={constants.URL_STANDARD_RELAYER_API_GITHUB} - > - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.StandardRelayerApi, Deco.CapWords)} - /> - </a>, - <Link key="subMenuItem-jsonSchema" to={WebsitePaths.JSONSchemas} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.JsonSchemas, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-subproviders" to={WebsitePaths.Subproviders} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.Subproviders, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-web3Wrapper" to={WebsitePaths.Web3Wrapper} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.Web3Wrapper, Deco.CapWords)} - /> - </Link>, - <Link - key="subMenuItem-contractWrappers" - to={WebsitePaths.ContractWrappers} - className="text-decoration-none" - > - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.ContractWrappers, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-orderUtils" to={WebsitePaths.OrderUtils} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.OrderUtils, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-orderWatcher" to={WebsitePaths.OrderWatcher} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.OrderWatcher, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-sol-compiler" to={WebsitePaths.SolCompiler} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.SolCompiler, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-sol-cov" to={WebsitePaths.SolCov} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.SolCov, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-ethereum-types" to={WebsitePaths.EthereumTypes} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.EthereumTypes, Deco.CapWords)} - /> - </Link>, - <Link key="subMenuItem-asset-buyer" to={WebsitePaths.AssetBuyer} className="text-decoration-none"> - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.AssetBuyer, Deco.CapWords)} - /> - </Link>, - <a - key="subMenuItem-whitePaper" - target="_blank" - className="text-decoration-none" - href={`${WebsitePaths.Whitepaper}`} - > - <MenuItem - style={{ fontSize: styles.menuItem.fontSize }} - primaryText={this.props.translate.get(Key.Whitepaper, Deco.CapWords)} - /> - </a>, - <a - key="subMenuItem-github" - target="_blank" - className="text-decoration-none" - href={constants.URL_GITHUB_ORG} - > - <MenuItem style={{ fontSize: styles.menuItem.fontSize }} primaryText="GitHub" /> - </a>, - ]; const bottomBorderStyle = this._shouldDisplayBottomBar() ? styles.bottomBar : {}; const fullWidthClasses = isExpandedDisplayType ? 'pr4' : ''; const logoUrl = isNightVersion ? '/images/protocol_logo_white.png' : '/images/protocol_logo_black.png'; @@ -252,15 +118,6 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> { color: isNightVersion ? 'white' : 'black', cursor: 'pointer', }; - const activeNode = ( - <div className="flex relative" style={{ color: menuIconStyle.color }}> - <div style={{ paddingRight: 10 }}>{this.props.translate.get(Key.Developers, Deco.Cap)}</div> - <div className="absolute" style={{ paddingLeft: 3, right: 3, top: -2 }}> - <i className="zmdi zmdi-caret-right" style={{ fontSize: 22 }} /> - </div> - </div> - ); - const popoverContent = <Menu style={{ color: colors.darkGrey }}>{developerSectionMenuItems}</Menu>; return ( <div style={{ ...styles.topBar, ...bottomBorderStyle, ...this.props.style, ...{ height } }} @@ -273,56 +130,45 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> { paddingLeft={this.props.paddingLeft} paddingRight={this.props.paddingRight} > - <Link to={`${WebsitePaths.Home}`} className="text-decoration-none"> + <Link to={WebsitePaths.Home}> <img src={logoUrl} height="30" /> </Link> <div className="flex-auto" /> {!this._isViewingPortal() && ( <div className={menuClasses}> <div className="flex items-center justify-between"> - <DropDown - activeNode={activeNode} - popoverContent={popoverContent} - anchorOrigin={{ horizontal: 'middle', vertical: 'bottom' }} - targetOrigin={{ horizontal: 'middle', vertical: 'top' }} - style={styles.menuItem} - /> - <TopBarMenuItem - title={this.props.translate.get(Key.Wiki, Deco.Cap)} - path={`${WebsitePaths.Wiki}`} - style={styles.menuItem} - isNightVersion={isNightVersion} - isExternal={false} + <DevelopersDropDown + location={this.props.location} + menuItemStyles={{ ...styles.menuItem, paddingBottom: 12, paddingTop: 12 }} + translate={this.props.translate} + menuIconStyle={menuIconStyle} /> <TopBarMenuItem title={this.props.translate.get(Key.Blog, Deco.Cap)} path={constants.URL_BLOG} style={styles.menuItem} isNightVersion={isNightVersion} - isExternal={true} + shouldOpenInNewTab={true} /> <TopBarMenuItem title={this.props.translate.get(Key.About, Deco.Cap)} - path={`${WebsitePaths.About}`} + path={WebsitePaths.About} style={styles.menuItem} isNightVersion={isNightVersion} - isExternal={false} /> <TopBarMenuItem title={this.props.translate.get(Key.Careers, Deco.Cap)} - path={`${WebsitePaths.Careers}`} + path={WebsitePaths.Careers} style={styles.menuItem} isNightVersion={isNightVersion} - isExternal={false} /> <TopBarMenuItem title={this.props.translate.get(Key.TradeCallToAction, Deco.Cap)} - path={`${WebsitePaths.Portal}`} + path={WebsitePaths.Portal} isPrimary={true} style={styles.menuItem} className={`${isExpandedDisplayType && 'md-hide'}`} isNightVersion={isNightVersion} - isExternal={false} /> </div> </div> @@ -379,54 +225,35 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> { onRequestChange={this._onMenuButtonClick.bind(this)} > <div className="clearfix"> - {this._renderDocsMenu()} - {this._renderWiki()} <div className="pl1 py1 mt3" style={{ backgroundColor: colors.lightGrey }}> {this.props.translate.get(Key.Website, Deco.Cap)} </div> - <Link to={WebsitePaths.Home} className="text-decoration-none"> + <Link to={WebsitePaths.Home}> <MenuItem className="py2">{this.props.translate.get(Key.Home, Deco.Cap)}</MenuItem> </Link> - <Link to={`${WebsitePaths.Wiki}`} className="text-decoration-none"> - <MenuItem className="py2">{this.props.translate.get(Key.Wiki, Deco.Cap)}</MenuItem> + <Link to={WebsitePaths.Docs}> + <MenuItem className="py2">{this.props.translate.get(Key.Docs, Deco.Cap)}</MenuItem> </Link> - {_.map(DOC_WEBSITE_PATHS_TO_KEY, (key, websitePath) => { - if (!this._doesUrlInclude(websitePath)) { - return ( - <Link - key={`drawer-menu-item-${websitePath}`} - to={websitePath} - className="text-decoration-none" - > - <MenuItem className="py2"> - {this.props.translate.get(key, Deco.Cap)}{' '} - {this.props.translate.get(Key.Docs, Deco.Cap)} - </MenuItem> - </Link> - ); - } - return null; - })} {!this._isViewingPortal() && ( - <Link to={`${WebsitePaths.Portal}`} className="text-decoration-none"> + <Link to={WebsitePaths.Portal}> <MenuItem className="py2"> {this.props.translate.get(Key.PortalDApp, Deco.CapWords)} </MenuItem> </Link> )} - <a className="text-decoration-none" target="_blank" href={`${WebsitePaths.Whitepaper}`}> + <Link to={WebsitePaths.Whitepaper} shouldOpenInNewTab={true}> <MenuItem className="py2">{this.props.translate.get(Key.Whitepaper, Deco.Cap)}</MenuItem> - </a> - <Link to={`${WebsitePaths.About}`} className="text-decoration-none"> + </Link> + <Link to={WebsitePaths.About}> <MenuItem className="py2">{this.props.translate.get(Key.About, Deco.Cap)}</MenuItem> </Link> - <Link to={`${WebsitePaths.Careers}`} className="text-decoration-none"> + <Link to={WebsitePaths.Careers}> <MenuItem className="py2">{this.props.translate.get(Key.Careers, Deco.Cap)}</MenuItem> </Link> - <a className="text-decoration-none" target="_blank" href={constants.URL_BLOG}> + <Link to={constants.URL_BLOG} shouldOpenInNewTab={true}> <MenuItem className="py2">{this.props.translate.get(Key.Blog, Deco.Cap)}</MenuItem> - </a> - <Link to={`${WebsitePaths.FAQ}`} className="text-decoration-none"> + </Link> + <Link to={WebsitePaths.FAQ}> <MenuItem className="py2" onClick={this._onMenuButtonClick.bind(this)}> {this.props.translate.get(Key.Faq, Deco.Cap)} </MenuItem> @@ -435,49 +262,6 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> { </Drawer> ); } - private _renderDocsMenu(): React.ReactNode { - const isViewingDocsPage = _.some(DOC_WEBSITE_PATHS_TO_KEY, (_key, websitePath) => { - return this._doesUrlInclude(websitePath); - }); - // HACK: We need to make sure the SCROLL_CONTAINER is loaded before rendering the Sidebar - // because the sidebar renders `react-scroll` links which depend on the scroll container already - // being rendered. - const documentationContainer = document.getElementById(sharedConstants.SCROLL_CONTAINER_ID); - if (!isViewingDocsPage || _.isUndefined(this.props.menu) || _.isNull(documentationContainer)) { - return undefined; - } - return ( - <div className="lg-hide md-hide"> - <NestedSidebarMenu - topLevelMenu={this.props.menu} - menuSubsectionsBySection={this.props.menuSubsectionsBySection} - sidebarHeader={this.props.sidebarHeader} - shouldDisplaySectionHeaders={false} - onMenuItemClick={this._onMenuButtonClick.bind(this)} - selectedVersion={this.props.docsVersion} - versions={this.props.availableDocVersions} - onVersionSelected={this.props.onVersionSelected} - /> - </div> - ); - } - private _renderWiki(): React.ReactNode { - if (!this._isViewingWiki()) { - return undefined; - } - - return ( - <div className="lg-hide md-hide"> - <NestedSidebarMenu - topLevelMenu={this.props.menuSubsectionsBySection} - menuSubsectionsBySection={this.props.menuSubsectionsBySection} - sidebarHeader={this.props.sidebarHeader} - shouldDisplaySectionHeaders={false} - onMenuItemClick={this._onMenuButtonClick.bind(this)} - /> - </div> - ); - } private _onMenuButtonClick(): void { this.setState({ isDrawerOpen: !this.state.isDrawerOpen, @@ -486,28 +270,10 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> { private _isViewingPortal(): boolean { return _.includes(this.props.location.pathname, WebsitePaths.Portal); } - private _isViewingDocs(): boolean { - return _.includes(this.props.location.pathname, WebsitePaths.Docs); - } private _isViewingFAQ(): boolean { return _.includes(this.props.location.pathname, WebsitePaths.FAQ); } - private _doesUrlInclude(aPath: string): boolean { - return _.includes(this.props.location.pathname, aPath); - } - private _isViewingWiki(): boolean { - return _.includes(this.props.location.pathname, WebsitePaths.Wiki); - } private _shouldDisplayBottomBar(): boolean { - const isViewingDocsPage = _.some(DOC_WEBSITE_PATHS_TO_KEY, (_key, websitePath) => { - return this._doesUrlInclude(websitePath); - }); - return ( - isViewingDocsPage || - this._isViewingWiki() || - this._isViewingFAQ() || - this._isViewingDocs() || - this._isViewingPortal() - ); + return this._isViewingFAQ() || this._isViewingPortal(); } } // tslint:disable:max-file-line-count diff --git a/packages/website/ts/components/top_bar/top_bar_menu_item.tsx b/packages/website/ts/components/top_bar/top_bar_menu_item.tsx index 25fab2868..9f15cffbb 100644 --- a/packages/website/ts/components/top_bar/top_bar_menu_item.tsx +++ b/packages/website/ts/components/top_bar/top_bar_menu_item.tsx @@ -1,7 +1,6 @@ -import { colors } from '@0xproject/react-shared'; +import { colors, Link } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; -import { Link } from 'react-router-dom'; import { CallToAction } from 'ts/components/ui/button'; @@ -13,7 +12,7 @@ interface TopBarMenuItemProps { title: string; path?: string; isPrimary?: boolean; - isExternal: boolean; + shouldOpenInNewTab?: boolean; style?: React.CSSProperties; className?: string; isNightVersion?: boolean; @@ -26,6 +25,7 @@ export class TopBarMenuItem extends React.Component<TopBarMenuItemProps, TopBarM isPrimary: false, style: DEFAULT_STYLE, className: '', + shouldOpenInNewTab: false, isNightVersion: false, }; public render(): React.ReactNode { @@ -38,20 +38,9 @@ export class TopBarMenuItem extends React.Component<TopBarMenuItemProps, TopBarM ); return ( <div className={`center ${this.props.className}`} style={{ ...this.props.style, color: menuItemColor }}> - {this.props.isExternal ? ( - <a - className="text-decoration-none" - style={{ color: linkColor }} - target="_blank" - href={this.props.path} - > - {itemContent} - </a> - ) : ( - <Link to={this.props.path} className="text-decoration-none" style={{ color: linkColor }}> - {itemContent} - </Link> - )} + <Link to={this.props.path} shouldOpenInNewTab={this.props.shouldOpenInNewTab} fontColor={linkColor}> + {itemContent} + </Link> </div> ); } diff --git a/packages/website/ts/components/track_token_confirmation.tsx b/packages/website/ts/components/track_token_confirmation.tsx index 294fb8590..e701686b0 100644 --- a/packages/website/ts/components/track_token_confirmation.tsx +++ b/packages/website/ts/components/track_token_confirmation.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import { Party } from 'ts/components/ui/party'; diff --git a/packages/website/ts/components/trade_history/trade_history_item.tsx b/packages/website/ts/components/trade_history/trade_history_item.tsx index 321a8b0e1..667027dce 100644 --- a/packages/website/ts/components/trade_history/trade_history_item.tsx +++ b/packages/website/ts/components/trade_history/trade_history_item.tsx @@ -1,6 +1,6 @@ -import { colors, EtherscanLinkSuffixes } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { colors, EtherscanLinkSuffixes } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import Paper from 'material-ui/Paper'; import * as moment from 'moment'; diff --git a/packages/website/ts/components/ui/alert.tsx b/packages/website/ts/components/ui/alert.tsx index b571d8c1c..32e0f1be8 100644 --- a/packages/website/ts/components/ui/alert.tsx +++ b/packages/website/ts/components/ui/alert.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import { AlertTypes } from 'ts/types'; diff --git a/packages/website/ts/components/ui/allowance_state_view.tsx b/packages/website/ts/components/ui/allowance_state_view.tsx index 93d6b0ebb..fc754421a 100644 --- a/packages/website/ts/components/ui/allowance_state_view.tsx +++ b/packages/website/ts/components/ui/allowance_state_view.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import { Container } from 'ts/components/ui/container'; import { Spinner } from 'ts/components/ui/spinner'; diff --git a/packages/website/ts/components/ui/balance.tsx b/packages/website/ts/components/ui/balance.tsx index 9e5a256b6..a1a8ff89b 100644 --- a/packages/website/ts/components/ui/balance.tsx +++ b/packages/website/ts/components/ui/balance.tsx @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as React from 'react'; import { Container } from 'ts/components/ui/container'; import { Text } from 'ts/components/ui/text'; diff --git a/packages/website/ts/components/ui/button.tsx b/packages/website/ts/components/ui/button.tsx index 75ba7bcff..92f927843 100644 --- a/packages/website/ts/components/ui/button.tsx +++ b/packages/website/ts/components/ui/button.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import { darken, saturate } from 'polished'; import * as React from 'react'; import { styled } from 'ts/style/theme'; @@ -10,11 +10,13 @@ export interface ButtonProps { fontFamily?: string; backgroundColor?: string; borderColor?: string; + borderRadius?: string; width?: string; padding?: string; type?: string; isDisabled?: boolean; onClick?: (event: React.MouseEvent<HTMLElement>) => void; + textAlign?: string; } const PlainButton: React.StatelessComponent<ButtonProps> = ({ children, isDisabled, onClick, type, className }) => ( @@ -29,11 +31,12 @@ export const Button = styled(PlainButton)` color: ${props => props.fontColor}; transition: background-color, opacity 0.5s ease; padding: ${props => props.padding}; - border-radius: 6px; + border-radius: ${props => props.borderRadius}; font-weight: 500; outline: none; font-family: ${props => props.fontFamily}; width: ${props => props.width}; + text-align: ${props => props.textAlign}; background-color: ${props => props.backgroundColor}; border: ${props => (props.borderColor ? `1px solid ${props.borderColor}` : 'none')}; &:hover { @@ -52,11 +55,13 @@ export const Button = styled(PlainButton)` Button.defaultProps = { fontSize: '12px', + borderRadius: '6px', backgroundColor: colors.white, width: 'auto', fontFamily: 'Roboto', isDisabled: false, padding: '0.8em 2.2em', + textAlign: 'center', }; Button.displayName = 'Button'; diff --git a/packages/website/ts/components/ui/container.tsx b/packages/website/ts/components/ui/container.tsx index f2ae68b70..ece077563 100644 --- a/packages/website/ts/components/ui/container.tsx +++ b/packages/website/ts/components/ui/container.tsx @@ -15,7 +15,11 @@ export interface ContainerProps { paddingRight?: StringOrNum; paddingLeft?: StringOrNum; backgroundColor?: string; + background?: string; borderRadius?: StringOrNum; + borderBottomLeftRadius?: StringOrNum; + borderBottomRightRadius?: StringOrNum; + borderBottom?: StringOrNum; maxWidth?: StringOrNum; maxHeight?: StringOrNum; width?: StringOrNum; diff --git a/packages/website/ts/components/ui/copy_icon.tsx b/packages/website/ts/components/ui/copy_icon.tsx index 0330d1843..59e398cb6 100644 --- a/packages/website/ts/components/ui/copy_icon.tsx +++ b/packages/website/ts/components/ui/copy_icon.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import * as CopyToClipboard from 'react-copy-to-clipboard'; import * as ReactDOM from 'react-dom'; diff --git a/packages/website/ts/components/ui/menu_item.tsx b/packages/website/ts/components/ui/custom_menu_item.tsx index 0cb4b387c..87ce32126 100644 --- a/packages/website/ts/components/ui/menu_item.tsx +++ b/packages/website/ts/components/ui/custom_menu_item.tsx @@ -1,24 +1,23 @@ +import { Link } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; -import { Link } from 'react-router-dom'; -interface MenuItemProps { +interface CustomMenuItemProps { to: string; - style?: React.CSSProperties; onClick?: () => void; className?: string; } -interface MenuItemState { +interface CustomMenuItemState { isHovering: boolean; } -export class MenuItem extends React.Component<MenuItemProps, MenuItemState> { - public static defaultProps: Partial<MenuItemProps> = { +export class CustomMenuItem extends React.Component<CustomMenuItemProps, CustomMenuItemState> { + public static defaultProps: Partial<CustomMenuItemProps> = { onClick: _.noop.bind(_), className: '', }; - public constructor(props: MenuItemProps) { + public constructor(props: CustomMenuItemProps) { super(props); this.state = { isHovering: false, @@ -30,7 +29,7 @@ export class MenuItem extends React.Component<MenuItemProps, MenuItemState> { opacity: this.state.isHovering ? 0.5 : 1, }; return ( - <Link to={this.props.to} style={{ textDecoration: 'none', ...this.props.style }}> + <Link to={this.props.to}> <div onClick={this.props.onClick.bind(this)} className={`mx-auto ${this.props.className}`} diff --git a/packages/website/ts/components/ui/drop_down.tsx b/packages/website/ts/components/ui/drop_down.tsx index 4d5caef08..4138b3fe5 100644 --- a/packages/website/ts/components/ui/drop_down.tsx +++ b/packages/website/ts/components/ui/drop_down.tsx @@ -1,3 +1,4 @@ +import * as _ from 'lodash'; import Popover from 'material-ui/Popover'; import * as React from 'react'; import { MaterialUIPosition } from 'ts/types'; @@ -21,6 +22,7 @@ export interface DropDownProps { zDepth?: number; activateEvent?: DropdownMouseEvent; closeEvent?: DropdownMouseEvent; + popoverStyle?: React.CSSProperties; } interface DropDownState { @@ -34,6 +36,7 @@ export class DropDown extends React.Component<DropDownProps, DropDownState> { zDepth: 1, activateEvent: DropdownMouseEvent.Hover, closeEvent: DropdownMouseEvent.Hover, + popoverStyle: {}, }; private _isHovering: boolean; private _popoverCloseCheckIntervalId: number; @@ -73,10 +76,15 @@ export class DropDown extends React.Component<DropDownProps, DropDownState> { anchorEl={this.state.anchorEl} anchorOrigin={this.props.anchorOrigin} targetOrigin={this.props.targetOrigin} - onRequestClose={this._closePopover.bind(this)} + onRequestClose={ + this.props.closeEvent === DropdownMouseEvent.Click + ? this._closePopover.bind(this) + : _.noop.bind(_) + } useLayerForClickAway={this.props.closeEvent === DropdownMouseEvent.Click} animated={false} zDepth={this.props.zDepth} + style={this.props.popoverStyle} > <div onMouseEnter={this._onHover.bind(this)} @@ -92,7 +100,7 @@ export class DropDown extends React.Component<DropDownProps, DropDownState> { private _onActiveNodeClick(event: React.FormEvent<HTMLInputElement>): void { if (this.props.activateEvent === DropdownMouseEvent.Click) { this.setState({ - isDropDownOpen: true, + isDropDownOpen: !this.state.isDropDownOpen, anchorEl: event.currentTarget, }); } diff --git a/packages/website/ts/components/ui/ethereum_address.tsx b/packages/website/ts/components/ui/ethereum_address.tsx index f449a8e75..71d98af56 100644 --- a/packages/website/ts/components/ui/ethereum_address.tsx +++ b/packages/website/ts/components/ui/ethereum_address.tsx @@ -1,4 +1,4 @@ -import { EtherscanLinkSuffixes } from '@0xproject/react-shared'; +import { EtherscanLinkSuffixes } from '@0x/react-shared'; import * as React from 'react'; import ReactTooltip = require('react-tooltip'); import { EtherScanIcon } from 'ts/components/ui/etherscan_icon'; diff --git a/packages/website/ts/components/ui/etherscan_icon.tsx b/packages/website/ts/components/ui/etherscan_icon.tsx index 0beb69123..57ab91ba2 100644 --- a/packages/website/ts/components/ui/etherscan_icon.tsx +++ b/packages/website/ts/components/ui/etherscan_icon.tsx @@ -1,4 +1,4 @@ -import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; +import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import ReactTooltip = require('react-tooltip'); diff --git a/packages/website/ts/components/ui/fake_text_field.tsx b/packages/website/ts/components/ui/fake_text_field.tsx index ac3c30fec..7c3a482a4 100644 --- a/packages/website/ts/components/ui/fake_text_field.tsx +++ b/packages/website/ts/components/ui/fake_text_field.tsx @@ -1,4 +1,4 @@ -import { Styles } from '@0xproject/react-shared'; +import { Styles } from '@0x/react-shared'; import * as React from 'react'; import { InputLabel } from 'ts/components/ui/input_label'; diff --git a/packages/website/ts/components/ui/icon_button.tsx b/packages/website/ts/components/ui/icon_button.tsx index 13cd239da..9f469ec69 100644 --- a/packages/website/ts/components/ui/icon_button.tsx +++ b/packages/website/ts/components/ui/icon_button.tsx @@ -1,4 +1,4 @@ -import { colors, Styles } from '@0xproject/react-shared'; +import { colors, Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; diff --git a/packages/website/ts/components/ui/input.tsx b/packages/website/ts/components/ui/input.tsx index e01a71a53..e5f4f6c70 100644 --- a/packages/website/ts/components/ui/input.tsx +++ b/packages/website/ts/components/ui/input.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import { styled } from 'ts/style/theme'; diff --git a/packages/website/ts/components/ui/input_label.tsx b/packages/website/ts/components/ui/input_label.tsx index 8eda45a5d..e7afb5a17 100644 --- a/packages/website/ts/components/ui/input_label.tsx +++ b/packages/website/ts/components/ui/input_label.tsx @@ -1,4 +1,4 @@ -import { colors, Styles } from '@0xproject/react-shared'; +import { colors, Styles } from '@0x/react-shared'; import * as React from 'react'; export interface InputLabelProps { diff --git a/packages/website/ts/components/ui/lifecycle_raised_button.tsx b/packages/website/ts/components/ui/lifecycle_raised_button.tsx index 0bb99b9d8..a8daf4102 100644 --- a/packages/website/ts/components/ui/lifecycle_raised_button.tsx +++ b/packages/website/ts/components/ui/lifecycle_raised_button.tsx @@ -1,5 +1,5 @@ -import { colors } from '@0xproject/react-shared'; -import { errorUtils } from '@0xproject/utils'; +import { colors } from '@0x/react-shared'; +import { errorUtils } from '@0x/utils'; import RaisedButton from 'material-ui/RaisedButton'; import * as React from 'react'; diff --git a/packages/website/ts/components/ui/party.tsx b/packages/website/ts/components/ui/party.tsx index a25550475..6c0572437 100644 --- a/packages/website/ts/components/ui/party.tsx +++ b/packages/website/ts/components/ui/party.tsx @@ -1,4 +1,4 @@ -import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; +import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import ReactTooltip = require('react-tooltip'); diff --git a/packages/website/ts/components/ui/pointer.tsx b/packages/website/ts/components/ui/pointer.tsx index db0a4188d..c97b1e700 100644 --- a/packages/website/ts/components/ui/pointer.tsx +++ b/packages/website/ts/components/ui/pointer.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import { styled } from 'ts/style/theme'; diff --git a/packages/website/ts/components/ui/required_label.tsx b/packages/website/ts/components/ui/required_label.tsx index 0f96586ec..5080462fa 100644 --- a/packages/website/ts/components/ui/required_label.tsx +++ b/packages/website/ts/components/ui/required_label.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; export interface RequiredLabelProps { diff --git a/packages/website/ts/components/ui/simple_menu.tsx b/packages/website/ts/components/ui/simple_menu.tsx index 8a9349c6d..45ee752e3 100644 --- a/packages/website/ts/components/ui/simple_menu.tsx +++ b/packages/website/ts/components/ui/simple_menu.tsx @@ -1,7 +1,7 @@ +import { Link } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import * as CopyToClipboard from 'react-copy-to-clipboard'; -import { Link } from 'react-router-dom'; import { Container } from 'ts/components/ui/container'; import { Text } from 'ts/components/ui/text'; @@ -72,7 +72,7 @@ export const GoToAccountManagementSimpleMenuItem: React.StatelessComponent< GoToAccountManagementSimpleMenuItemProps > = ({ onClick }) => { return ( - <Link to={`${WebsitePaths.Portal}/account`} style={{ textDecoration: 'none' }}> + <Link to={`${WebsitePaths.Portal}/account`}> <SimpleMenuItem displayText="Manage Account..." onClick={onClick} /> </Link> ); diff --git a/packages/website/ts/components/ui/spinner.tsx b/packages/website/ts/components/ui/spinner.tsx index e8670cc3e..dc73e74e3 100644 --- a/packages/website/ts/components/ui/spinner.tsx +++ b/packages/website/ts/components/ui/spinner.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; import { styled } from 'ts/style/theme'; diff --git a/packages/website/ts/components/ui/swap_icon.tsx b/packages/website/ts/components/ui/swap_icon.tsx index f1d1ae7d4..406da8fe1 100644 --- a/packages/website/ts/components/ui/swap_icon.tsx +++ b/packages/website/ts/components/ui/swap_icon.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; interface SwapIconProps { diff --git a/packages/website/ts/components/ui/text.tsx b/packages/website/ts/components/ui/text.tsx index cd8f290e3..c13e21913 100644 --- a/packages/website/ts/components/ui/text.tsx +++ b/packages/website/ts/components/ui/text.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import { darken } from 'polished'; import * as React from 'react'; import { styled } from 'ts/style/theme'; @@ -19,7 +19,9 @@ export interface TextProps { textDecorationLine?: string; onClick?: (event: React.MouseEvent<HTMLElement>) => void; hoverColor?: string; + letterSpacing?: string | number; noWrap?: boolean; + textAlign?: string; display?: string; } @@ -34,6 +36,8 @@ export const Text = styled(PlainText)` font-style: ${props => props.fontStyle}; font-weight: ${props => props.fontWeight}; font-size: ${props => props.fontSize}; + text-align: ${props => props.textAlign}; + letter-spacing: ${props => props.letterSpacing}; text-decoration-line: ${props => props.textDecorationLine}; ${props => (props.lineHeight ? `line-height: ${props.lineHeight}` : '')}; ${props => (props.center ? 'text-align: center' : '')}; diff --git a/packages/website/ts/components/visual_order.tsx b/packages/website/ts/components/visual_order.tsx index a8d18006e..d723757d2 100644 --- a/packages/website/ts/components/visual_order.tsx +++ b/packages/website/ts/components/visual_order.tsx @@ -1,4 +1,4 @@ -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import * as React from 'react'; import { Party } from 'ts/components/ui/party'; diff --git a/packages/website/ts/components/wallet/wallet.tsx b/packages/website/ts/components/wallet/wallet.tsx index 6abaa840b..326cd3cfa 100644 --- a/packages/website/ts/components/wallet/wallet.tsx +++ b/packages/website/ts/components/wallet/wallet.tsx @@ -1,5 +1,5 @@ -import { EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; -import { BigNumber, errorUtils } from '@0xproject/utils'; +import { EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; +import { BigNumber, errorUtils } from '@0x/utils'; import * as _ from 'lodash'; import ActionAccountBalanceWallet from 'material-ui/svg-icons/action/account-balance-wallet'; diff --git a/packages/website/ts/components/wallet/wrap_ether_item.tsx b/packages/website/ts/components/wallet/wrap_ether_item.tsx index 54ace7ae2..7de3afbf8 100644 --- a/packages/website/ts/components/wallet/wrap_ether_item.tsx +++ b/packages/website/ts/components/wallet/wrap_ether_item.tsx @@ -1,6 +1,6 @@ -import { Styles } from '@0xproject/react-shared'; -import { BigNumber, logUtils } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Styles } from '@0x/react-shared'; +import { BigNumber, logUtils } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import FlatButton from 'material-ui/FlatButton'; import * as React from 'react'; diff --git a/packages/website/ts/containers/asset_buyer_documentation.ts b/packages/website/ts/containers/asset_buyer_documentation.ts index f794625de..c93b9332d 100644 --- a/packages/website/ts/containers/asset_buyer_documentation.ts +++ b/packages/website/ts/containers/asset_buyer_documentation.ts @@ -1,11 +1,11 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ @@ -22,7 +22,7 @@ const markdownSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.AssetBuyer, - packageName: '@0xproject/asset-buyer', + packageName: '@0x/asset-buyer', type: SupportedDocJson.TypeDoc, displayName: 'AssetBuyer', packageUrl: 'https://github.com/0xProject/0x-monorepo', @@ -47,6 +47,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -58,6 +59,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/connect_documentation.ts b/packages/website/ts/containers/connect_documentation.ts index a728abe2c..0f11e0809 100644 --- a/packages/website/ts/containers/connect_documentation.ts +++ b/packages/website/ts/containers/connect_documentation.ts @@ -1,17 +1,18 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/connect/1.0.0/introduction'); -const IntroMarkdownV2 = require('md/docs/connect/2.0.0/introduction'); -const InstallationMarkdownV1 = require('md/docs/connect/1.0.0/installation'); +const IntroMarkdown1 = require('md/docs/connect/1/introduction'); +const IntroMarkdown2 = require('md/docs/connect/2/introduction'); +const InstallationMarkdown1 = require('md/docs/connect/1/installation'); +const InstallationMarkdown3 = require('md/docs/connect/3/installation'); /* tslint:enable:no-var-requires */ const markdownSections = { @@ -21,22 +22,25 @@ const markdownSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.Connect, - packageName: '@0xproject/connect', + packageName: '@0x/connect', type: SupportedDocJson.TypeDoc, displayName: '0x Connect', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], + 'getting-started': [markdownSections.introduction, markdownSections.installation], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [markdownSections.introduction]: IntroMarkdownV1, - [markdownSections.installation]: InstallationMarkdownV1, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, }, '2.0.0-rc.1': { - [markdownSections.introduction]: IntroMarkdownV2, - [markdownSections.installation]: InstallationMarkdownV1, + [markdownSections.introduction]: IntroMarkdown2, + [markdownSections.installation]: InstallationMarkdown1, + }, + '3.0.2': { + [markdownSections.introduction]: IntroMarkdown2, + [markdownSections.installation]: InstallationMarkdown3, }, }, markdownSections, @@ -48,6 +52,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -59,6 +64,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/contract_wrappers_documentation.ts b/packages/website/ts/containers/contract_wrappers_documentation.ts index 1e1735846..4c05605e3 100644 --- a/packages/website/ts/containers/contract_wrappers_documentation.ts +++ b/packages/website/ts/containers/contract_wrappers_documentation.ts @@ -1,16 +1,17 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdown = require('md/docs/contract_wrappers/introduction'); -const InstallMarkdown = require('md/docs/contract_wrappers/installation'); +const IntroMarkdown1 = require('md/docs/contract_wrappers/1/introduction'); +const InstallMarkdownV1 = require('md/docs/contract_wrappers/1/installation'); +const InstallMarkdownV2 = require('md/docs/contract_wrappers/2/installation'); /* tslint:enable:no-var-requires */ const markdownSections = { @@ -20,18 +21,21 @@ const markdownSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.ContractWrappers, - packageName: '@0xproject/contract-wrappers', + packageName: '@0x/contract-wrappers', type: SupportedDocJson.TypeDoc, displayName: 'Contract Wrappers', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], + 'getting-started': [markdownSections.introduction, markdownSections.installation], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [markdownSections.introduction]: IntroMarkdown, - [markdownSections.installation]: InstallMarkdown, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallMarkdownV1, + }, + '3.0.0': { + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallMarkdownV2, }, }, markdownSections, @@ -43,6 +47,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -54,6 +59,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, docsInfo, translate: state.translate, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/docs_home.ts b/packages/website/ts/containers/docs_home.ts new file mode 100644 index 000000000..e0ca439a6 --- /dev/null +++ b/packages/website/ts/containers/docs_home.ts @@ -0,0 +1,31 @@ +import * as _ from 'lodash'; +import * as React from 'react'; +import { connect } from 'react-redux'; +import { Dispatch } from 'redux'; +import { DocsHome as DocsHomeComponent, DocsHomeProps } from 'ts/pages/documentation/docs_home'; +import { Dispatcher } from 'ts/redux/dispatcher'; +import { State } from 'ts/redux/reducer'; +import { ScreenWidths } from 'ts/types'; +import { Translate } from 'ts/utils/translate'; + +interface ConnectedState { + translate: Translate; + screenWidth: ScreenWidths; +} + +interface ConnectedDispatch { + dispatcher: Dispatcher; +} + +const mapStateToProps = (state: State, _ownProps: DocsHomeProps): ConnectedState => ({ + translate: state.translate, + screenWidth: state.screenWidth, +}); + +const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ + dispatcher: new Dispatcher(dispatch), +}); + +export const DocsHome: React.ComponentClass<DocsHomeProps> = connect(mapStateToProps, mapDispatchToProps)( + DocsHomeComponent, +); diff --git a/packages/website/ts/containers/ethereum_types_documentation.ts b/packages/website/ts/containers/ethereum_types_documentation.ts index 2b6d6e64d..9d1df1d1f 100644 --- a/packages/website/ts/containers/ethereum_types_documentation.ts +++ b/packages/website/ts/containers/ethereum_types_documentation.ts @@ -1,11 +1,11 @@ -import { constants as docConstants, DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { constants as docConstants, DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ @@ -26,9 +26,7 @@ const docsInfoConfig: DocsInfoConfig = { displayName: 'Ethereum Types', packageUrl: 'https://github.com/0xProject/0x-monorepo/packages/ethereum-types', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], - types: [markdownSections.types], + 'getting-started': [markdownSections.introduction, markdownSections.installation], }, sectionNameToMarkdownByVersion: { '0.0.1': { @@ -45,6 +43,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -56,6 +55,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/generate_order_form.ts b/packages/website/ts/containers/generate_order_form.ts index bc9d6f524..98b2831ce 100644 --- a/packages/website/ts/containers/generate_order_form.ts +++ b/packages/website/ts/containers/generate_order_form.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as React from 'react'; import { connect } from 'react-redux'; import { Blockchain } from 'ts/blockchain'; diff --git a/packages/website/ts/containers/inputs/eth_amount_input.ts b/packages/website/ts/containers/inputs/eth_amount_input.ts index 9ef903b55..45d3ddebd 100644 --- a/packages/website/ts/containers/inputs/eth_amount_input.ts +++ b/packages/website/ts/containers/inputs/eth_amount_input.ts @@ -1,5 +1,5 @@ -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as React from 'react'; import { connect } from 'react-redux'; import { State } from 'ts/redux/reducer'; diff --git a/packages/website/ts/containers/json_schemas_documentation.ts b/packages/website/ts/containers/json_schemas_documentation.ts index f32a50ea9..9c4bb8e26 100644 --- a/packages/website/ts/containers/json_schemas_documentation.ts +++ b/packages/website/ts/containers/json_schemas_documentation.ts @@ -1,54 +1,66 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/json_schemas/1.0.0/introduction'); -const InstallationMarkdownV1 = require('md/docs/json_schemas/1.0.0/installation'); -const UsageMarkdownV1 = require('md/docs/json_schemas/1.0.0/usage'); -const SchemasMarkdownV1 = require('md/docs/json_schemas/1.0.0/schemas'); -const SchemasMarkdownV2 = require('md/docs/json_schemas/2.0.0/schemas'); +const IntroMarkdown1 = require('md/docs/json_schemas/1/introduction'); +const IntroMarkdown3 = require('md/docs/json_schemas/3/introduction'); +const InstallationMarkdown1 = require('md/docs/json_schemas/1/installation'); +const InstallationMarkdown3 = require('md/docs/json_schemas/3/installation'); +const usageMarkdown1 = require('md/docs/json_schemas/1/usage'); +const usageMarkdown3 = require('md/docs/json_schemas/3/usage'); +const SchemasMarkdown1 = require('md/docs/json_schemas/1/schemas'); +const SchemasMarkdown2 = require('md/docs/json_schemas/2/schemas'); +const SchemasMarkdown3 = require('md/docs/json_schemas/3/schemas'); /* tslint:enable:no-var-requires */ const markdownSections = { introduction: 'introduction', installation: 'installation', usage: 'usage', - schemaValidator: 'schemaValidator', schemas: 'schemas', }; const docsInfoConfig: DocsInfoConfig = { id: DocPackages.JSONSchemas, - packageName: '@0xproject/json-schemas', + packageName: '@0x/json-schemas', type: SupportedDocJson.TypeDoc, displayName: 'JSON Schemas', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], - usage: [markdownSections.usage], - schemaValidator: [markdownSections.schemaValidator], + 'getting-started': [markdownSections.introduction, markdownSections.installation, markdownSections.usage], schemas: [markdownSections.schemas], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [markdownSections.introduction]: IntroMarkdownV1, - [markdownSections.installation]: InstallationMarkdownV1, - [markdownSections.schemas]: SchemasMarkdownV1, - [markdownSections.usage]: UsageMarkdownV1, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + [markdownSections.schemas]: SchemasMarkdown1, + [markdownSections.usage]: usageMarkdown1, }, '1.0.0': { - [markdownSections.introduction]: IntroMarkdownV1, - [markdownSections.installation]: InstallationMarkdownV1, - [markdownSections.schemas]: SchemasMarkdownV2, - [markdownSections.usage]: UsageMarkdownV1, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + [markdownSections.schemas]: SchemasMarkdown2, + [markdownSections.usage]: usageMarkdown1, + }, + '2.0.0': { + [markdownSections.introduction]: IntroMarkdown3, + [markdownSections.installation]: InstallationMarkdown3, + [markdownSections.schemas]: SchemasMarkdown2, + [markdownSections.usage]: usageMarkdown3, + }, + '2.0.1': { + [markdownSections.introduction]: IntroMarkdown3, + [markdownSections.installation]: InstallationMarkdown3, + [markdownSections.schemas]: SchemasMarkdown3, + [markdownSections.usage]: usageMarkdown3, }, }, markdownSections, @@ -60,6 +72,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -71,6 +84,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/order_utils_documentation.ts b/packages/website/ts/containers/order_utils_documentation.ts index b54c30a1e..f1d794988 100644 --- a/packages/website/ts/containers/order_utils_documentation.ts +++ b/packages/website/ts/containers/order_utils_documentation.ts @@ -1,16 +1,18 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/order_utils/1.0.0/introduction'); -const InstallationMarkdownV1 = require('md/docs/order_utils/1.0.0/installation'); +const IntroMarkdown1 = require('md/docs/order_utils/1/introduction'); +const InstallationMarkdown1 = require('md/docs/order_utils/1/installation'); +const IntroMarkdown2 = require('md/docs/order_utils/2/introduction'); +const InstallationMarkdown2 = require('md/docs/order_utils/2/installation'); /* tslint:enable:no-var-requires */ const markdownSections = { @@ -20,18 +22,21 @@ const markdownSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.OrderUtils, - packageName: '@0xproject/order-utils', + packageName: '@0x/order-utils', type: SupportedDocJson.TypeDoc, displayName: 'Order utils', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], + 'getting-started': [markdownSections.introduction, markdownSections.installation], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [markdownSections.introduction]: IntroMarkdownV1, - [markdownSections.installation]: InstallationMarkdownV1, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + }, + '2.0.0': { + [markdownSections.introduction]: IntroMarkdown2, + [markdownSections.installation]: InstallationMarkdown2, }, }, markdownSections, @@ -43,6 +48,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -54,6 +60,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/order_watcher_documentation.ts b/packages/website/ts/containers/order_watcher_documentation.ts index 59a018847..ac92e6a22 100644 --- a/packages/website/ts/containers/order_watcher_documentation.ts +++ b/packages/website/ts/containers/order_watcher_documentation.ts @@ -1,16 +1,18 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdown = require('md/docs/order_watcher/introduction'); -const InstallationMarkdown = require('md/docs/order_watcher/installation'); +const IntroMarkdown1 = require('md/docs/order_watcher/1/introduction'); +const InstallationMarkdown1 = require('md/docs/order_watcher/1/installation'); +const IntroMarkdown2 = require('md/docs/order_watcher/2/introduction'); +const InstallationMarkdown2 = require('md/docs/order_watcher/2/installation'); /* tslint:enable:no-var-requires */ const markdownSections = { @@ -20,18 +22,21 @@ const markdownSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.OrderWatcher, - packageName: '@0xproject/order-watcher', + packageName: '@0x/order-watcher', type: SupportedDocJson.TypeDoc, displayName: 'OrderWatcher', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], + 'getting-started': [markdownSections.introduction, markdownSections.installation], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [markdownSections.introduction]: IntroMarkdown, - [markdownSections.installation]: InstallationMarkdown, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + }, + '2.2.0': { + [markdownSections.introduction]: IntroMarkdown2, + [markdownSections.installation]: InstallationMarkdown2, }, }, markdownSections, @@ -43,6 +48,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -54,6 +60,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/portal.ts b/packages/website/ts/containers/portal.ts index 4d7ff2f55..5661e0a97 100644 --- a/packages/website/ts/containers/portal.ts +++ b/packages/website/ts/containers/portal.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import { connect } from 'react-redux'; diff --git a/packages/website/ts/containers/portal_onboarding_flow.ts b/packages/website/ts/containers/portal_onboarding_flow.ts index a813205b1..66473733c 100644 --- a/packages/website/ts/containers/portal_onboarding_flow.ts +++ b/packages/website/ts/containers/portal_onboarding_flow.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; diff --git a/packages/website/ts/containers/smart_contracts_documentation.ts b/packages/website/ts/containers/smart_contracts_documentation.ts index 05b2a50c3..57c98fa3b 100644 --- a/packages/website/ts/containers/smart_contracts_documentation.ts +++ b/packages/website/ts/containers/smart_contracts_documentation.ts @@ -1,17 +1,17 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; -import { Networks } from '@0xproject/react-shared'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; +import { Networks } from '@0x/react-shared'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages, SmartContractDocSections as Sections } from 'ts/types'; +import { DocPackages, ScreenWidths, SmartContractDocSections as Sections } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/smart_contracts/1.0.0/introduction'); -const IntroMarkdownV2 = require('md/docs/smart_contracts/2.0.0/introduction'); +const IntroMarkdown1 = require('md/docs/smart_contracts/1/introduction'); +const IntroMarkdown2 = require('md/docs/smart_contracts/2/introduction'); /* tslint:enable:no-var-requires */ const docsInfoConfig: DocsInfoConfig = { @@ -25,10 +25,10 @@ const docsInfoConfig: DocsInfoConfig = { }, sectionNameToMarkdownByVersion: { '0.0.1': { - [Sections.Introduction]: IntroMarkdownV1, + [Sections.Introduction]: IntroMarkdown1, }, '2.0.0': { - [Sections.Introduction]: IntroMarkdownV2, + [Sections.Introduction]: IntroMarkdown2, }, }, markdownSections: { @@ -97,6 +97,7 @@ interface ConnectedState { docsVersion: string; availableDocVersions: string[]; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -108,6 +109,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState docsVersion: state.docsVersion, availableDocVersions: state.availableDocVersions, translate: state.translate, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/sol_compiler_documentation.ts b/packages/website/ts/containers/sol_compiler_documentation.ts index 20f26ed1d..f3a793e80 100644 --- a/packages/website/ts/containers/sol_compiler_documentation.ts +++ b/packages/website/ts/containers/sol_compiler_documentation.ts @@ -1,17 +1,19 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/sol-compiler/introduction'); -const InstallationMarkdownV1 = require('md/docs/sol-compiler/installation'); -const UsageMarkdown = require('md/docs/sol-compiler/usage'); +const IntroMarkdown1 = require('md/docs/sol-compiler/1/introduction'); +const InstallationMarkdown1 = require('md/docs/sol-compiler/1/installation'); +const InstallationMarkdown2 = require('md/docs/sol-compiler/2/installation'); +const UsageMarkdown1 = require('md/docs/sol-compiler/1/usage'); +const UsageMarkdown2 = require('md/docs/sol-compiler/2/usage'); /* tslint:enable:no-var-requires */ const markdownSections = { @@ -22,20 +24,23 @@ const markdownSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.SolCompiler, - packageName: '@0xproject/sol-compiler', + packageName: '@0x/sol-compiler', type: SupportedDocJson.TypeDoc, displayName: 'Solidity Compiler', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], - usage: [markdownSections.usage], + 'getting-started': [markdownSections.introduction, markdownSections.installation, markdownSections.usage], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [markdownSections.introduction]: IntroMarkdownV1, - [markdownSections.installation]: InstallationMarkdownV1, - [markdownSections.usage]: UsageMarkdown, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + [markdownSections.usage]: UsageMarkdown1, + }, + '1.1.8': { + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown2, + [markdownSections.usage]: UsageMarkdown2, }, }, markdownSections, @@ -47,6 +52,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -58,6 +64,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/sol_cov_documentation.ts b/packages/website/ts/containers/sol_cov_documentation.ts index 27efd641e..8944ec70a 100644 --- a/packages/website/ts/containers/sol_cov_documentation.ts +++ b/packages/website/ts/containers/sol_cov_documentation.ts @@ -1,17 +1,20 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/sol_cov/introduction'); -const InstallationMarkdownV1 = require('md/docs/sol_cov/installation'); -const UsageMarkdown = require('md/docs/sol_cov/usage'); +const IntroMarkdown1 = require('md/docs/sol_cov/1/introduction'); +const InstallationMarkdown1 = require('md/docs/sol_cov/1/installation'); +const UsageMarkdown1 = require('md/docs/sol_cov/1/usage'); +const IntroMarkdown2 = require('md/docs/sol_cov/2/introduction'); +const InstallationMarkdown2 = require('md/docs/sol_cov/2/installation'); +const UsageMarkdown2 = require('md/docs/sol_cov/2/usage'); /* tslint:enable:no-var-requires */ const markdownSections = { @@ -22,20 +25,23 @@ const markdownSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.SolCov, - packageName: '@0xproject/sol-cov', + packageName: '@0x/sol-cov', type: SupportedDocJson.TypeDoc, displayName: 'Sol-cov', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], - usage: [markdownSections.usage], + 'getting-started': [markdownSections.introduction, markdownSections.installation, markdownSections.usage], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [markdownSections.introduction]: IntroMarkdownV1, - [markdownSections.installation]: InstallationMarkdownV1, - [markdownSections.usage]: UsageMarkdown, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + [markdownSections.usage]: UsageMarkdown1, + }, + '2.1.8': { + [markdownSections.introduction]: IntroMarkdown2, + [markdownSections.installation]: InstallationMarkdown2, + [markdownSections.usage]: UsageMarkdown2, }, }, markdownSections, @@ -47,6 +53,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -58,6 +65,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/subproviders_documentation.ts b/packages/website/ts/containers/subproviders_documentation.ts index 28b2e9508..0e421777b 100644 --- a/packages/website/ts/containers/subproviders_documentation.ts +++ b/packages/website/ts/containers/subproviders_documentation.ts @@ -1,17 +1,18 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/subproviders/introduction'); -const InstallationMarkdownV1 = require('md/docs/subproviders/installation'); -const LedgerNodeHidMarkdown = require('md/docs/subproviders/ledger_node_hid'); +const IntroMarkdown1 = require('md/docs/subproviders/1/introduction'); +const InstallationMarkdown1 = require('md/docs/subproviders/1/installation'); +const InstallationMarkdown2 = require('md/docs/subproviders/2/installation'); +const LedgerNodeHidMarkdown1 = require('md/docs/subproviders/1/ledger_node_hid'); /* tslint:enable:no-var-requires */ const docSections = { @@ -22,20 +23,23 @@ const docSections = { const docsInfoConfig: DocsInfoConfig = { id: DocPackages.Subproviders, - packageName: '@0xproject/subproviders', + packageName: '@0x/subproviders', type: SupportedDocJson.TypeDoc, displayName: 'Subproviders', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [docSections.introduction], - install: [docSections.installation], - ['ledger-node-hid-issue']: [docSections.ledgerNodeHid], + 'getting-started': [docSections.introduction, docSections.installation, docSections.ledgerNodeHid], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [docSections.introduction]: IntroMarkdownV1, - [docSections.installation]: InstallationMarkdownV1, - [docSections.ledgerNodeHid]: LedgerNodeHidMarkdown, + [docSections.introduction]: IntroMarkdown1, + [docSections.installation]: InstallationMarkdown1, + [docSections.ledgerNodeHid]: LedgerNodeHidMarkdown1, + }, + '2.1.0': { + [docSections.introduction]: IntroMarkdown1, + [docSections.installation]: InstallationMarkdown2, + [docSections.ledgerNodeHid]: LedgerNodeHidMarkdown1, }, }, markdownSections: docSections, @@ -47,6 +51,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -58,6 +63,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/web3_wrapper_documentation.ts b/packages/website/ts/containers/web3_wrapper_documentation.ts index dc9d23304..9c8c34621 100644 --- a/packages/website/ts/containers/web3_wrapper_documentation.ts +++ b/packages/website/ts/containers/web3_wrapper_documentation.ts @@ -1,40 +1,44 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ -const IntroMarkdownV1 = require('md/docs/web3_wrapper/introduction'); -const InstallationMarkdownV1 = require('md/docs/web3_wrapper/installation'); +const IntroMarkdown1 = require('md/docs/web3_wrapper/1/introduction'); +const InstallationMarkdown1 = require('md/docs/web3_wrapper/1/installation'); +const InstallationMarkdown2 = require('md/docs/web3_wrapper/2/installation'); /* tslint:enable:no-var-requires */ -const docSections = { +const markdownSections = { introduction: 'introduction', installation: 'installation', }; const docsInfoConfig: DocsInfoConfig = { id: DocPackages.Web3Wrapper, - packageName: '@0xproject/web3-wrapper', + packageName: '@0x/web3-wrapper', type: SupportedDocJson.TypeDoc, displayName: 'Web3Wrapper', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [docSections.introduction], - install: [docSections.installation], + 'getting-started': [markdownSections.introduction, markdownSections.installation], }, sectionNameToMarkdownByVersion: { '0.0.1': { - [docSections.introduction]: IntroMarkdownV1, - [docSections.installation]: InstallationMarkdownV1, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + }, + '3.1.0': { + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown2, }, }, - markdownSections: docSections, + markdownSections, }; const docsInfo = new DocsInfo(docsInfoConfig); @@ -43,6 +47,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -54,6 +59,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, translate: state.translate, docsInfo, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/wiki.ts b/packages/website/ts/containers/wiki.ts index 357f8bbf4..069b0ae54 100644 --- a/packages/website/ts/containers/wiki.ts +++ b/packages/website/ts/containers/wiki.ts @@ -4,10 +4,12 @@ import { Dispatch } from 'redux'; import { Wiki as WikiComponent, WikiProps } from 'ts/pages/wiki/wiki'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; +import { ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; interface ConnectedState { translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -16,6 +18,7 @@ interface ConnectedDispatch { const mapStateToProps = (state: State, _ownProps: WikiProps): ConnectedState => ({ translate: state.translate, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/containers/zero_ex_js_documentation.ts b/packages/website/ts/containers/zero_ex_js_documentation.ts index 2a3afd86c..e0ea6e275 100644 --- a/packages/website/ts/containers/zero_ex_js_documentation.ts +++ b/packages/website/ts/containers/zero_ex_js_documentation.ts @@ -1,11 +1,11 @@ -import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0xproject/react-docs'; +import { DocsInfo, DocsInfoConfig, SupportedDocJson } from '@0x/react-docs'; import * as React from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { DocPage as DocPageComponent, DocPageProps } from 'ts/pages/documentation/doc_page'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { Translate } from 'ts/utils/translate'; /* tslint:disable:no-var-requires */ @@ -15,8 +15,8 @@ const AsyncMarkdownV0 = require('md/docs/0xjs/0.0.1/async'); const ErrorsMarkdownV0 = require('md/docs/0xjs/0.0.1/errors'); const versioningMarkdownV0 = require('md/docs/0xjs/0.0.1/versioning'); -const IntroMarkdownV1 = require('md/docs/0xjs/1.0.1/introduction'); -const InstallationMarkdownV1 = require('md/docs/0xjs/1.0.1/installation'); +const IntroMarkdown1 = require('md/docs/0xjs/1.0.1/introduction'); +const InstallationMarkdown1 = require('md/docs/0xjs/1.0.1/installation'); const AsyncMarkdownV1 = require('md/docs/0xjs/1.0.1/async'); const ErrorsMarkdownV1 = ErrorsMarkdownV0; const versioningMarkdownV1 = require('md/docs/0xjs/1.0.1/versioning'); @@ -39,9 +39,13 @@ const docsInfoConfig: DocsInfoConfig = { displayName: '0x.js', packageUrl: 'https://github.com/0xProject/0x-monorepo', markdownMenu: { - introduction: [markdownSections.introduction], - install: [markdownSections.installation], - topics: [markdownSections.async, markdownSections.errors, markdownSections.versioning], + 'getting-started': [ + markdownSections.introduction, + markdownSections.installation, + markdownSections.async, + markdownSections.errors, + markdownSections.versioning, + ], }, sectionNameToMarkdownByVersion: { '0.0.1': { @@ -52,8 +56,15 @@ const docsInfoConfig: DocsInfoConfig = { [markdownSections.errors]: ErrorsMarkdownV0, }, '1.0.1': { - [markdownSections.introduction]: IntroMarkdownV1, - [markdownSections.installation]: InstallationMarkdownV1, + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, + [markdownSections.versioning]: versioningMarkdownV1, + [markdownSections.async]: AsyncMarkdownV1, + [markdownSections.errors]: ErrorsMarkdownV1, + }, + '2.0.0': { + [markdownSections.introduction]: IntroMarkdown1, + [markdownSections.installation]: InstallationMarkdown1, [markdownSections.versioning]: versioningMarkdownV1, [markdownSections.async]: AsyncMarkdownV1, [markdownSections.errors]: ErrorsMarkdownV1, @@ -68,6 +79,7 @@ interface ConnectedState { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface ConnectedDispatch { @@ -79,6 +91,7 @@ const mapStateToProps = (state: State, _ownProps: DocPageProps): ConnectedState availableDocVersions: state.availableDocVersions, docsInfo, translate: state.translate, + screenWidth: state.screenWidth, }); const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ diff --git a/packages/website/ts/index.tsx b/packages/website/ts/index.tsx index bb218eac1..21157e427 100644 --- a/packages/website/ts/index.tsx +++ b/packages/website/ts/index.tsx @@ -5,6 +5,7 @@ import { Provider } from 'react-redux'; import { BrowserRouter as Router, Redirect, Route, Switch } from 'react-router-dom'; import { MetaTags } from 'ts/components/meta_tags'; import { About } from 'ts/containers/about'; +import { DocsHome } from 'ts/containers/docs_home'; import { FAQ } from 'ts/containers/faq'; import { Jobs } from 'ts/containers/jobs'; import { Landing } from 'ts/containers/landing'; @@ -140,6 +141,7 @@ render( path={`${WebsitePaths.AssetBuyer}/:version?`} component={LazyAssetBuyerDocumentation} /> + <Route path={WebsitePaths.Docs} component={DocsHome as any} /> {/* Legacy endpoints */} <Route path={`${WebsiteLegacyPaths.ZeroExJs}/:version?`} diff --git a/packages/website/ts/local_storage/trade_history_storage.tsx b/packages/website/ts/local_storage/trade_history_storage.tsx index a9b042820..91818b035 100644 --- a/packages/website/ts/local_storage/trade_history_storage.tsx +++ b/packages/website/ts/local_storage/trade_history_storage.tsx @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import ethUtil = require('ethereumjs-util'); import * as _ from 'lodash'; import { localStorage } from 'ts/local_storage/local_storage'; diff --git a/packages/website/ts/pages/about/about.tsx b/packages/website/ts/pages/about/about.tsx index 3ede56a71..dfe8926b0 100644 --- a/packages/website/ts/pages/about/about.tsx +++ b/packages/website/ts/pages/about/about.tsx @@ -1,8 +1,7 @@ -import { colors, Styles } from '@0xproject/react-shared'; +import { colors, Link, Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import * as DocumentTitle from 'react-document-title'; -import { Link } from 'react-router-dom'; import { Footer } from 'ts/components/footer'; import { TopBar } from 'ts/components/top_bar/top_bar'; import { Profile } from 'ts/pages/about/profile'; @@ -389,7 +388,7 @@ export class About extends React.Component<AboutProps, AboutState> { }} > We are seeking outstanding candidates to{' '} - <Link to={WebsitePaths.Careers} style={{ color: 'black' }}> + <Link to={WebsitePaths.Careers} textDecoration="underline" fontColor="black"> join our team </Link> . We value passion, diversity and unique perspectives. diff --git a/packages/website/ts/pages/about/profile.tsx b/packages/website/ts/pages/about/profile.tsx index bcbeb0272..2361c6418 100644 --- a/packages/website/ts/pages/about/profile.tsx +++ b/packages/website/ts/pages/about/profile.tsx @@ -1,4 +1,4 @@ -import { colors, Styles } from '@0xproject/react-shared'; +import { colors, Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import { ProfileInfo } from 'ts/types'; diff --git a/packages/website/ts/pages/documentation/developers_page.tsx b/packages/website/ts/pages/documentation/developers_page.tsx new file mode 100644 index 000000000..361dbc86e --- /dev/null +++ b/packages/website/ts/pages/documentation/developers_page.tsx @@ -0,0 +1,202 @@ +import { colors, constants as sharedConstants, utils as sharedUtils } from '@0x/react-shared'; +import * as _ from 'lodash'; +import * as React from 'react'; +import DocumentTitle = require('react-document-title'); +import { DocsLogo } from 'ts/components/documentation/docs_logo'; +import { DocsTopBar } from 'ts/components/documentation/docs_top_bar'; +import { Container } from 'ts/components/ui/container'; +import { Dispatcher } from 'ts/redux/dispatcher'; +import { media } from 'ts/style/media'; +import { styled } from 'ts/style/theme'; +import { BrowserType, OperatingSystemType, ScreenWidths } from 'ts/types'; +import { Translate } from 'ts/utils/translate'; +import { utils } from 'ts/utils/utils'; + +const THROTTLE_TIMEOUT = 100; +const TOP_BAR_HEIGHT = 80; +const browserType = utils.getBrowserType(); +let SCROLLBAR_WIDTH; +switch (browserType) { + case BrowserType.Firefox: + // HACK: Firefox doesn't allow styling of their scrollbar's. + // Source: https://stackoverflow.com/questions/6165472/custom-css-scrollbar-for-firefox + const os = utils.getOperatingSystem(); + SCROLLBAR_WIDTH = os === OperatingSystemType.Windows ? 17 : 15; + break; + + case BrowserType.Edge: + // Edge's scrollbar is placed outside of the div content and doesn't + // need to be accounted for + SCROLLBAR_WIDTH = 0; + break; + + default: + SCROLLBAR_WIDTH = 4; +} +const SIDEBAR_PADDING = 22; + +export interface DevelopersPageProps { + location: Location; + translate: Translate; + screenWidth: ScreenWidths; + dispatcher: Dispatcher; + mainContent: React.ReactNode; + sidebar: React.ReactNode; +} + +export interface DevelopersPageState { + isSidebarScrolling: boolean; +} + +const isUserOnMobile = sharedUtils.isUserOnMobile(); + +const scrollableContainerStyles = ` + position: absolute; + top: ${TOP_BAR_HEIGHT}px; + left: 0px; + bottom: 0px; + right: 0px; + overflow-x: hidden; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + /* Required for hide/show onHover of scrollbar on Microsoft Edge */ + -ms-overflow-style: -ms-autohiding-scrollbar; +`; + +interface SidebarContainerProps { + className?: string; +} + +const SidebarContainer = + styled.div < + SidebarContainerProps > + ` + ${scrollableContainerStyles} + padding-top: 27px; + padding-left: ${SIDEBAR_PADDING}px; + padding-right: ${SIDEBAR_PADDING}px; + overflow: hidden; + &:hover { + overflow: auto; + padding-right: ${SIDEBAR_PADDING - SCROLLBAR_WIDTH}px; + } +`; + +interface MainContentContainerProps { + className?: string; +} + +const MainContentContainer = + styled.div < + MainContentContainerProps > + ` + ${scrollableContainerStyles} + padding-top: 0px; + padding-left: 50px; + padding-right: 50px; + overflow: ${isUserOnMobile ? 'auto' : 'hidden'}; + &:hover { + padding-right: ${50 - SCROLLBAR_WIDTH}px; + overflow: auto; + } + ${media.small` + padding-left: 20px; + padding-right: 20px; + &:hover { + padding-right: ${20 - SCROLLBAR_WIDTH}px; + overflow: auto; + } + `} +`; + +export class DevelopersPage extends React.Component<DevelopersPageProps, DevelopersPageState> { + private readonly _throttledScreenWidthUpdate: () => void; + private readonly _throttledSidebarScrolling: () => void; + private _sidebarScrollClearingInterval: number; + constructor(props: DevelopersPageProps) { + super(props); + this._throttledScreenWidthUpdate = _.throttle(this._updateScreenWidth.bind(this), THROTTLE_TIMEOUT); + this._throttledSidebarScrolling = _.throttle(this._onSidebarScroll.bind(this), THROTTLE_TIMEOUT); + this.state = { + isSidebarScrolling: false, + }; + } + public componentDidMount(): void { + window.addEventListener('resize', this._throttledScreenWidthUpdate); + window.scrollTo(0, 0); + this._sidebarScrollClearingInterval = window.setInterval(() => { + this.setState({ + isSidebarScrolling: false, + }); + }, 1000); + } + public componentWillUnmount(): void { + window.removeEventListener('resize', this._throttledScreenWidthUpdate); + window.clearInterval(this._sidebarScrollClearingInterval); + } + public render(): React.ReactNode { + const isSmallScreen = this.props.screenWidth === ScreenWidths.Sm; + const mainContentPadding = isSmallScreen ? 20 : 50; + return ( + <Container + className="flex items-center overflow-hidden" + width="100%" + background={`linear-gradient(to right, ${colors.grey100} 0%, ${colors.grey100} 50%, ${ + colors.white + } 50%, ${colors.white} 100%)`} + > + <DocumentTitle title="0x Docs" /> + <Container className="flex mx-auto" height="100vh"> + <Container + className="sm-hide xs-hide relative" + width={234} + paddingLeft={22} + paddingRight={22} + paddingTop={0} + backgroundColor={colors.grey100} + > + <Container + borderBottom={this.state.isSidebarScrolling ? `1px solid ${colors.grey300}` : 'none'} + > + <Container paddingTop="30px" paddingLeft="10px" paddingBottom="8px"> + <DocsLogo height={36} /> + </Container> + </Container> + <SidebarContainer onWheel={this._throttledSidebarScrolling}> + <Container paddingBottom="100px"> + {this.props.screenWidth !== ScreenWidths.Sm && this.props.sidebar} + </Container> + </SidebarContainer> + </Container> + <Container + className="relative" + width={isSmallScreen ? '100vw' : 786} + paddingBottom="100px" + backgroundColor={colors.white} + > + <Container paddingLeft={mainContentPadding} paddingRight={mainContentPadding}> + <DocsTopBar + location={this.props.location} + screenWidth={this.props.screenWidth} + translate={this.props.translate} + sidebar={this.props.sidebar} + /> + </Container> + <MainContentContainer id={sharedConstants.SCROLL_CONTAINER_ID}> + {this.props.mainContent} + </MainContentContainer> + </Container> + </Container> + </Container> + ); + } + private _onSidebarScroll(_event: React.FormEvent<HTMLInputElement>): void { + this.setState({ + isSidebarScrolling: true, + }); + } + private _updateScreenWidth(): void { + const newScreenWidth = utils.getScreenWidth(); + this.props.dispatcher.updateScreenWidth(newScreenWidth); + } +} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/pages/documentation/doc_page.tsx b/packages/website/ts/pages/documentation/doc_page.tsx index 135581fc9..28bf2dba1 100644 --- a/packages/website/ts/pages/documentation/doc_page.tsx +++ b/packages/website/ts/pages/documentation/doc_page.tsx @@ -1,35 +1,30 @@ import { DocAgnosticFormat, + DocReference, DocsInfo, - Documentation, GeneratedDocJson, SupportedDocJson, TypeDocUtils, -} from '@0xproject/react-docs'; +} from '@0x/react-docs'; import findVersions = require('find-versions'); import * as _ from 'lodash'; +import CircularProgress from 'material-ui/CircularProgress'; import * as React from 'react'; -import DocumentTitle = require('react-document-title'); import semverSort = require('semver-sort'); -import { SidebarHeader } from 'ts/components/sidebar_header'; -import { TopBar } from 'ts/components/top_bar/top_bar'; +import { SidebarHeader } from 'ts/components/documentation/sidebar_header'; +import { NestedSidebarMenu } from 'ts/components/nested_sidebar_menu'; +import { Container } from 'ts/components/ui/container'; +import { DevelopersPage } from 'ts/pages/documentation/developers_page'; import { Dispatcher } from 'ts/redux/dispatcher'; -import { DocPackages } from 'ts/types'; +import { DocPackages, ScreenWidths } from 'ts/types'; import { constants } from 'ts/utils/constants'; import { docUtils } from 'ts/utils/doc_utils'; import { Translate } from 'ts/utils/translate'; import { utils } from 'ts/utils/utils'; const isDevelopmentOrStaging = utils.isDevelopment() || utils.isStaging(); -const DEFAULT_ICON = 'docs.png'; const ZERO_EX_JS_VERSION_MISSING_TOPLEVEL_PATH = '0.32.4'; -const idToIcon: { [id: string]: string } = { - [DocPackages.ZeroExJs]: 'zeroExJs.png', - [DocPackages.Connect]: 'connect.png', - [DocPackages.SmartContracts]: 'contracts.png', -}; - const docIdToSubpackageName: { [id: string]: string } = { [DocPackages.ZeroExJs]: '0x.js', [DocPackages.Connect]: 'connect', @@ -53,6 +48,7 @@ export interface DocPageProps { availableDocVersions: string[]; docsInfo: DocsInfo; translate: Translate; + screenWidth: ScreenWidths; } interface DocPageState { @@ -80,38 +76,58 @@ export class DocPage extends React.Component<DocPageProps, DocPageState> { this._isUnmounted = true; } public render(): React.ReactNode { - const menuSubsectionsBySection = _.isUndefined(this.state.docAgnosticFormat) - ? {} - : this.props.docsInfo.getMenuSubsectionsBySection(this.state.docAgnosticFormat); const sourceUrl = this._getSourceUrl(); - const iconFileName = idToIcon[this.props.docsInfo.id] || DEFAULT_ICON; - const iconUrl = `/images/doc_icons/${iconFileName}`; + const sectionNameToLinks = _.isUndefined(this.state.docAgnosticFormat) + ? {} + : this.props.docsInfo.getSectionNameToLinks(this.state.docAgnosticFormat); + const mainContent = _.isUndefined(this.state.docAgnosticFormat) ? ( + <div className="flex justify-center">{this._renderLoading()}</div> + ) : ( + <DocReference + selectedVersion={this.props.docsVersion} + availableVersions={this.props.availableDocVersions} + docsInfo={this.props.docsInfo} + docAgnosticFormat={this.state.docAgnosticFormat} + sourceUrl={sourceUrl} + /> + ); + const sidebar = _.isUndefined(this.state.docAgnosticFormat) ? ( + <div /> + ) : ( + <NestedSidebarMenu sidebarHeader={this._renderSidebarHeader()} sectionNameToLinks={sectionNameToLinks} /> + ); + return ( + <DevelopersPage + sidebar={sidebar} + mainContent={mainContent} + location={this.props.location} + screenWidth={this.props.screenWidth} + translate={this.props.translate} + dispatcher={this.props.dispatcher} + /> + ); + } + private _renderSidebarHeader(): React.ReactNode { + return ( + <SidebarHeader + screenWidth={this.props.screenWidth} + title={this.props.docsInfo.displayName} + docsVersion={this.props.docsVersion} + availableDocVersions={this.props.availableDocVersions} + onVersionSelected={this._onVersionSelected.bind(this)} + /> + ); + } + private _renderLoading(): React.ReactNode { return ( - <div> - <DocumentTitle title={`${this.props.docsInfo.displayName} Documentation`} /> - <TopBar - blockchainIsLoaded={false} - location={this.props.location} - docsVersion={this.props.docsVersion} - availableDocVersions={this.props.availableDocVersions} - menu={this.props.docsInfo.menu} - menuSubsectionsBySection={menuSubsectionsBySection} - docsInfo={this.props.docsInfo} - translate={this.props.translate} - onVersionSelected={this._onVersionSelected.bind(this)} - sidebarHeader={<SidebarHeader title={this.props.docsInfo.displayName} iconUrl={iconUrl} />} - /> - <Documentation - selectedVersion={this.props.docsVersion} - availableVersions={this.props.availableDocVersions} - docsInfo={this.props.docsInfo} - docAgnosticFormat={this.state.docAgnosticFormat} - sidebarHeader={<SidebarHeader title={this.props.docsInfo.displayName} iconUrl={iconUrl} />} - sourceUrl={sourceUrl} - topBarHeight={60} - onVersionSelected={this._onVersionSelected.bind(this)} - /> - </div> + <Container className="pt4"> + <Container className="center pb2"> + <CircularProgress size={40} thickness={5} /> + </Container> + <Container className="center pt2" paddingBottom="11px"> + Loading documentation... + </Container> + </Container> ); } private async _fetchJSONDocsFireAndForgetAsync(preferredVersionIfExists?: string): Promise<void> { @@ -146,10 +162,10 @@ export class DocPage extends React.Component<DocPageProps, DocPageState> { // documenting solidity. docAgnosticFormat = versionDocObj as DocAgnosticFormat; // HACK: need to modify docsInfo like convertToDocAgnosticFormat() would do - this.props.docsInfo.menu.Contracts = []; + this.props.docsInfo.markdownMenu.Contracts = []; _.each(docAgnosticFormat, (_docObj, sectionName) => { this.props.docsInfo.sections[sectionName] = sectionName; - this.props.docsInfo.menu.Contracts.push(sectionName); + this.props.docsInfo.markdownMenu.Contracts.push(sectionName); }); } @@ -165,7 +181,7 @@ export class DocPage extends React.Component<DocPageProps, DocPageState> { let tagPrefix = pkg; const packagesWithNamespace = ['connect']; if (_.includes(packagesWithNamespace, pkg)) { - tagPrefix = `@0xproject/${pkg}`; + tagPrefix = `@0x/${pkg}`; } // HACK: The following three lines exist for backward compatibility reasons // Before exporting types from other packages as part of the 0x.js interface, diff --git a/packages/website/ts/pages/documentation/docs_home.tsx b/packages/website/ts/pages/documentation/docs_home.tsx new file mode 100644 index 000000000..bbbee2d2d --- /dev/null +++ b/packages/website/ts/pages/documentation/docs_home.tsx @@ -0,0 +1,385 @@ +import { ALink, colors, Link } from '@0x/react-shared'; +import { ObjectMap } from '@0x/types'; +import * as _ from 'lodash'; +import * as React from 'react'; +import { OverviewContent } from 'ts/components/documentation/overview_content'; +import { NestedSidebarMenu } from 'ts/components/nested_sidebar_menu'; +import { Button } from 'ts/components/ui/button'; +import { DevelopersPage } from 'ts/pages/documentation/developers_page'; +import { Dispatcher } from 'ts/redux/dispatcher'; +import { Categories, Deco, Key, Package, ScreenWidths, TutorialInfo, WebsitePaths } from 'ts/types'; +import { constants } from 'ts/utils/constants'; +import { Translate } from 'ts/utils/translate'; + +const TUTORIALS: TutorialInfo[] = [ + { + iconUrl: '/images/developers/tutorials/develop_on_ethereum.svg', + description: Key.DevelopOnEthereumDescription, + link: { + title: Key.DevelopOnEthereum, + to: `${WebsitePaths.Wiki}#Ethereum-Development`, + }, + }, + { + iconUrl: '/images/developers/tutorials/build_a_relayer.svg', + description: Key.BuildARelayerDescription, + link: { + title: Key.BuildARelayer, + to: `${WebsitePaths.Wiki}#Build-A-Relayer`, + }, + }, + { + iconUrl: '/images/developers/tutorials/0x_order_basics.svg', + description: Key.OrderBasicsDescription, + link: { + title: Key.OrderBasics, + to: `${WebsitePaths.Wiki}#Create,-Validate,-Fill-Order`, + }, + }, + { + iconUrl: '/images/developers/tutorials/use_shared_liquidity.svg', + description: Key.UseNetworkedLiquidityDescription, + link: { + title: Key.UseNetworkedLiquidity, + to: `${WebsitePaths.Wiki}#Find,-Submit,-Fill-Order-From-Relayer`, + }, + }, +]; + +const CATEGORY_TO_PACKAGES: ObjectMap<Package[]> = { + [Categories.ZeroExProtocol]: [ + { + description: + 'A library for interacting with the 0x protocol. It is a high level package which combines a number of smaller specific-purpose packages such as [order-utils](https://0xproject.com/docs/order-utils) and [contract-wrappers](https://0xproject.com/docs/contract-wrappers).', + link: { + title: '0x.js', + to: WebsitePaths.ZeroExJs, + }, + }, + { + description: + 'A Typescript starter project that will walk you through the basics of how to interact with 0x Protocol and trade of an SRA relayer', + link: { + title: '0x starter project', + to: 'https://github.com/0xProject/0x-starter-project', + 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', + to: WebsitePaths.Connect, + }, + }, + { + description: + 'Typescript/Javascript wrappers of the 0x protocol Ethereum smart contracts. Use this library to call methods on the 0x smart contracts, subscribe to contract events and to fetch information stored in contracts.', + link: { + title: '@0x/contract-wrappers', + to: WebsitePaths.ContractWrappers, + }, + }, + { + description: + 'A collection of 0x-related JSON-schemas (incl. SRA request/response schemas, 0x order message format schema, etc...)', + link: { + title: '@0x/json-schemas', + to: WebsitePaths.JSONSchemas, + }, + }, + { + description: + 'A set of utils for working with 0x orders. It includes utilities for creating, signing, validating 0x orders, encoding/decoding assetData and much more.', + link: { + title: '@0x/order-utils', + to: WebsitePaths.OrderUtils, + }, + }, + { + description: + "A daemon that watches a set of 0x orders and emits events when an order's fillability has changed. Can be used by a relayer to prune their orderbook or by a trader to keep their view of the market up-to-date.", + link: { + title: '@0x/order-watcher', + to: WebsitePaths.OrderWatcher, + }, + }, + { + description: + 'Contains the Standard Relayer API OpenAPI Spec. The package distributes both a javascript object version and a json version.', + link: { + title: '@0x/sra-spec', + to: 'https://github.com/0xProject/0x-monorepo/tree/development/packages/sra-spec', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'Convenience package for buying assets represented on the Ethereum blockchain using 0x. In its simplest form, the package helps in the usage of the [0x forwarder contract](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md), which allows users to execute [Wrapped Ether](https://weth.io/) based 0x orders without having to set allowances, wrap Ether or own ZRX, meaning they can buy tokens with Ether alone. Given some liquidity (0x signed orders), it helps estimate the Ether cost of buying a certain asset (giving a range) and then buying that asset.', + link: { + title: '@0x/asset-buyer', + to: WebsitePaths.AssetBuyer, + }, + }, + ], + [Categories.Ethereum]: [ + { + description: + "This package allows you to generate TypeScript contract wrappers from ABI files. It's heavily inspired by Geth abigen but takes a different approach. You can write your custom handlebars templates which will allow you to seamlessly integrate the generated code into your existing codebase with existing conventions.", + link: { + title: 'abi-gen', + to: 'https://github.com/0xProject/0x-monorepo/tree/development/packages/abi-gen', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'A collection of Typescript types that are useful when working on an Ethereum-based project (e.g RawLog, Transaction, TxData, SolidityTypes, etc...).', + link: { + title: 'ethereum-types', + to: WebsitePaths.EthereumTypes, + }, + }, + { + description: + 'A wrapper around [solc-js](https://github.com/ethereum/solc-js) that adds smart re-compilation, ability to compile an entire project, Solidity version specific compilation, standard input description support and much more.', + link: { + title: '@0x/sol-compiler', + to: WebsitePaths.SolCompiler, + }, + }, + { + description: + 'A Solidity code coverage tool. Sol-cov uses transaction traces to figure out which lines of your code has been covered by your tests.', + link: { + title: '@0x/sol-cov', + to: WebsitePaths.SolCov, + }, + }, + { + description: + 'A collection of subproviders to use with [web3-provider-engine](https://www.npmjs.com/package/web3-provider-engine) (e.g subproviders for interfacing with Ledger hardware wallet, Mnemonic wallet, private key wallet, etc...)', + link: { + title: '@0x/subproviders', + to: WebsitePaths.Subproviders, + }, + }, + { + description: + 'A raw Ethereum JSON RPC client to simplify interfacing with Ethereum nodes. Also includes some convenience functions for awaiting transactions to be mined, converting between token units, etc...', + link: { + title: '@0x/web3-wrapper', + to: WebsitePaths.Web3Wrapper, + }, + }, + ], + [Categories.CommunityMaintained]: [ + { + description: + 'Node.js worker originally built for 0x Tracker which extracts 0x fill events from the Ethereum blockchain and persists them to MongoDB. Support for both V1 and V2 of the 0x protocol is included with events tagged against the protocol version they belong to.', + link: { + title: '0x Event Extractor', + to: 'https://github.com/0xTracker/0x-event-extractor', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'Node.js worker built for 0x Tracker which performs various ETL tasks related to the 0x protocol trading data and other information used on 0x Tracker.', + link: { + title: '0x Tracker Worker', + to: 'https://github.com/0xTracker/0x-tracker-worker', + shouldOpenInNewTab: true, + }, + }, + { + description: + "ERCdEX's Javascript SDK for trading on their relayer, as well as other Aquaduct partner relayers", + link: { + title: 'Aquaduct', + to: 'https://www.npmjs.com/package/aqueduct', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'SDKs for automation using Aqueduct & ERC dEX. Aqueduct Server is a lightweight, portable and secure server that runs locally on any workstation. The server exposes a small number of foundational endpoints that enable working with the decentralized Aqueduct liquidity pool from any context or programming language.', + link: { + title: 'Aquaduct Server SDK', + to: 'https://github.com/ERCdEX/aqueduct-server-sdk', + shouldOpenInNewTab: true, + }, + }, + { + description: 'A node.js SDK for trading on the DDEX relayer', + link: { + to: 'https://www.npmjs.com/package/ddex-api', + title: 'DDEX Node.js SDK', + shouldOpenInNewTab: true, + }, + }, + { + description: "The ERCdEX Trade Widget let's any website provide token liquidity to it's users", + link: { + to: 'https://github.com/ERCdEX/widget', + title: 'ERCdEX Widget', + shouldOpenInNewTab: true, + }, + }, + { + description: "ERCdEX's Java SDK for trading on their relayer, as well as other Aquaduct partner relayers", + link: { + to: 'https://github.com/ERCdEX/java', + title: 'ERCdEX Java SDK', + shouldOpenInNewTab: true, + }, + }, + { + description: "ERCdEX's Python SDK for trading on their relayer, as well as other Aquaduct partner relayers", + link: { + to: 'https://github.com/ERCdEX/python', + title: 'ERCdEX Python SDK', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'A set of command-line tools for creating command-line scripts for interacting with the Ethereum blockchain in general, and 0x in particular', + link: { + title: 'Massive', + to: 'https://github.com/NoteGio/massive', + shouldOpenInNewTab: true, + }, + }, + { + description: 'An open-source API-only Relayer written in Go', + link: { + to: 'https://github.com/NoteGio/openrelay', + title: 'OpenRelay', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'A JavaScript Library for Interacting with OpenRelay.xyz and other 0x Standard Relayer API Implementations', + link: { + title: 'OpenRelay.js', + to: 'https://github.com/NoteGio/openrelay.js', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'The Radar Relay SDK is a software development kit that simplifies the interactions with Radar Relay’s APIs', + link: { + title: 'Radar SDK', + to: 'https://github.com/RadarRelay/sdk', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'The Ocean provides a simple REST API, WebSockets API, and JavaScript library to help you integrate decentralized trading into your existing trading strategy.', + link: { + title: 'The Ocean Javascript SDK', + to: 'https://github.com/TheOceanTrade/theoceanx-javascript', + shouldOpenInNewTab: true, + }, + }, + { + description: "Tokenlon SDK provides APIs for developers to trade of imToken's relayer", + link: { + to: 'https://www.npmjs.com/package/tokenlon-sdk', + title: 'Tokenlon Javascript SDK', + shouldOpenInNewTab: true, + }, + }, + { + description: 'A small library that implements the 0x order assetData encoding/decoding in Java', + link: { + to: 'https://github.com/wildnothing/asset-data-decoder', + title: 'AssetData decoder library in Java', + shouldOpenInNewTab: true, + }, + }, + ], +}; + +export interface DocsHomeProps { + location: Location; + translate: Translate; + screenWidth: ScreenWidths; + tutorials: TutorialInfo[]; + categoryToPackages: ObjectMap<Package[]>; + dispatcher: Dispatcher; +} + +export interface DocsHomeState {} + +export class DocsHome extends React.Component<DocsHomeProps, DocsHomeState> { + public render(): React.ReactNode { + const sectionNameToLinks: ObjectMap<ALink[]> = { + 'Starter guides': _.map(TUTORIALS, tutorialInfo => { + return { + ...tutorialInfo.link, + title: this.props.translate.get(tutorialInfo.link.title as Key, Deco.Cap), + }; + }), + [Categories.ZeroExProtocol]: _.map(CATEGORY_TO_PACKAGES[Categories.ZeroExProtocol], pkg => pkg.link), + [Categories.Ethereum]: _.map(CATEGORY_TO_PACKAGES[Categories.Ethereum], pkg => pkg.link), + [Categories.CommunityMaintained]: _.map( + CATEGORY_TO_PACKAGES[Categories.CommunityMaintained], + pkg => pkg.link, + ), + }; + const mainContent = ( + <OverviewContent + translate={this.props.translate} + tutorials={TUTORIALS} + categoryToPackages={CATEGORY_TO_PACKAGES} + /> + ); + const isSmallScreen = this.props.screenWidth === ScreenWidths.Sm; + const sidebar = ( + <NestedSidebarMenu + sidebarHeader={isSmallScreen ? this._renderSidebarHeader() : undefined} + sectionNameToLinks={sectionNameToLinks} + shouldReformatMenuItemNames={false} + /> + ); + return ( + <DevelopersPage + mainContent={mainContent} + sidebar={sidebar} + location={this.props.location} + screenWidth={this.props.screenWidth} + translate={this.props.translate} + dispatcher={this.props.dispatcher} + /> + ); + } + private _renderSidebarHeader(): React.ReactNode { + const menuItems = _.map(constants.DEVELOPER_TOPBAR_LINKS, menuItemInfo => { + return ( + <Link + key={`menu-item-${menuItemInfo.title}`} + to={menuItemInfo.to} + shouldOpenInNewTab={menuItemInfo.shouldOpenInNewTab} + > + <Button + borderRadius="4px" + padding="0.4em 0.375em" + width="100%" + fontColor={colors.grey800} + fontSize="14px" + textAlign="left" + > + {this.props.translate.get(menuItemInfo.title as Key, Deco.Cap)} + </Button> + </Link> + ); + }); + return menuItems; + } +} diff --git a/packages/website/ts/pages/faq/faq.tsx b/packages/website/ts/pages/faq/faq.tsx index c9295d806..10d91bae8 100644 --- a/packages/website/ts/pages/faq/faq.tsx +++ b/packages/website/ts/pages/faq/faq.tsx @@ -1,4 +1,4 @@ -import { colors, Styles } from '@0xproject/react-shared'; +import { colors, Styles } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import * as DocumentTitle from 'react-document-title'; diff --git a/packages/website/ts/pages/faq/question.tsx b/packages/website/ts/pages/faq/question.tsx index f80985257..413ffb6ce 100644 --- a/packages/website/ts/pages/faq/question.tsx +++ b/packages/website/ts/pages/faq/question.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import { Card, CardHeader, CardText } from 'material-ui/Card'; import * as React from 'react'; diff --git a/packages/website/ts/pages/fullscreen_message.tsx b/packages/website/ts/pages/fullscreen_message.tsx index 6fcf7b32c..675f27a01 100644 --- a/packages/website/ts/pages/fullscreen_message.tsx +++ b/packages/website/ts/pages/fullscreen_message.tsx @@ -1,4 +1,4 @@ -import { Styles } from '@0xproject/react-shared'; +import { Styles } from '@0x/react-shared'; import * as React from 'react'; export interface FullscreenMessageProps { diff --git a/packages/website/ts/pages/jobs/jobs.tsx b/packages/website/ts/pages/jobs/jobs.tsx index cc4b1f04b..728e17f9e 100644 --- a/packages/website/ts/pages/jobs/jobs.tsx +++ b/packages/website/ts/pages/jobs/jobs.tsx @@ -1,4 +1,4 @@ -import { colors, utils as sharedUtils } from '@0xproject/react-shared'; +import { colors, utils as sharedUtils } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import * as DocumentTitle from 'react-document-title'; diff --git a/packages/website/ts/pages/jobs/join_0x.tsx b/packages/website/ts/pages/jobs/join_0x.tsx index ec8afbd93..e869cd455 100644 --- a/packages/website/ts/pages/jobs/join_0x.tsx +++ b/packages/website/ts/pages/jobs/join_0x.tsx @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import * as React from 'react'; diff --git a/packages/website/ts/pages/landing/landing.tsx b/packages/website/ts/pages/landing/landing.tsx index 388e83d51..c56ed4ebe 100644 --- a/packages/website/ts/pages/landing/landing.tsx +++ b/packages/website/ts/pages/landing/landing.tsx @@ -1,8 +1,7 @@ -import { colors } from '@0xproject/react-shared'; +import { colors, Link } from '@0x/react-shared'; import * as _ from 'lodash'; import * as React from 'react'; import DocumentTitle = require('react-document-title'); -import { Link } from 'react-router-dom'; import { Footer } from 'ts/components/footer'; import { SubscribeForm } from 'ts/components/forms/subscribe_form'; import { TopBar } from 'ts/components/top_bar/top_bar'; @@ -213,14 +212,14 @@ export class Landing extends React.Component<LandingProps, LandingState> { className={`pt3 flex clearfix sm-mx-auto ${isSmallScreen ? 'justify-center' : ''}`} > <Container paddingRight="20px"> - <Link to={WebsitePaths.ZeroExJs} className="text-decoration-none"> + <Link to={WebsitePaths.Docs}> <CallToAction type="light"> {this.props.translate.get(Key.BuildCallToAction, Deco.Cap)} </CallToAction> </Link> </Container> <div> - <Link to={WebsitePaths.Portal} className="text-decoration-none"> + <Link to={WebsitePaths.Portal}> <CallToAction> {this.props.translate.get(Key.TradeCallToAction, Deco.Cap)} </CallToAction> @@ -318,11 +317,7 @@ export class Landing extends React.Component<LandingProps, LandingState> { }} > {this.props.translate.get(Key.FullListPrompt)}{' '} - <Link - to={WebsitePaths.Portal} - className="text-decoration-none underline" - style={{ color: colors.landingLinkGrey }} - > + <Link to={WebsitePaths.Portal} textDecoration="underline" fontColor={colors.landingLinkGrey}> {this.props.translate.get(Key.FullListLink)} </Link> </div> @@ -603,7 +598,7 @@ export class Landing extends React.Component<LandingProps, LandingState> { {this.props.translate.get(Key.FinalCallToAction, Deco.Cap)} </div> <div className="sm-center sm-pt2 lg-table-cell md-table-cell"> - <Link to={WebsitePaths.ZeroExJs} className="text-decoration-none"> + <Link to={WebsitePaths.Docs}> <CallToAction fontSize="15px"> {this.props.translate.get(Key.BuildCallToAction, Deco.Cap)} </CallToAction> diff --git a/packages/website/ts/pages/wiki/wiki.tsx b/packages/website/ts/pages/wiki/wiki.tsx index 55f532b11..c1802b1f8 100644 --- a/packages/website/ts/pages/wiki/wiki.tsx +++ b/packages/website/ts/pages/wiki/wiki.tsx @@ -1,27 +1,28 @@ import { + ALink, colors, constants as sharedConstants, HeaderSizes, + Link, MarkdownSection, - NestedSidebarMenu, - Styles, utils as sharedUtils, -} from '@0xproject/react-shared'; +} from '@0x/react-shared'; +import { ObjectMap } from '@0x/types'; import * as _ from 'lodash'; import CircularProgress from 'material-ui/CircularProgress'; -import RaisedButton from 'material-ui/RaisedButton'; import * as React from 'react'; -import DocumentTitle = require('react-document-title'); -import { SidebarHeader } from 'ts/components/sidebar_header'; -import { TopBar } from 'ts/components/top_bar/top_bar'; +import { SidebarHeader } from 'ts/components/documentation/sidebar_header'; +import { NestedSidebarMenu } from 'ts/components/nested_sidebar_menu'; +import { Button } from 'ts/components/ui/button'; +import { Container } from 'ts/components/ui/container'; +import { DevelopersPage } from 'ts/pages/documentation/developers_page'; import { Dispatcher } from 'ts/redux/dispatcher'; -import { Article, ArticlesBySection } from 'ts/types'; +import { Article, ArticlesBySection, Deco, Key, ScreenWidths } from 'ts/types'; import { backendClient } from 'ts/utils/backend_client'; import { constants } from 'ts/utils/constants'; import { Translate } from 'ts/utils/translate'; import { utils } from 'ts/utils/utils'; -const TOP_BAR_HEIGHT = 60; const WIKI_NOT_READY_BACKOUT_TIMEOUT_MS = 5000; export interface WikiProps { @@ -29,6 +30,7 @@ export interface WikiProps { location: Location; dispatcher: Dispatcher; translate: Translate; + screenWidth: ScreenWidths; } interface WikiState { @@ -36,24 +38,6 @@ interface WikiState { isHoveringSidebar: boolean; } -const styles: Styles = { - mainContainers: { - position: 'absolute', - top: 1, - left: 0, - bottom: 0, - right: 0, - overflow: 'hidden', - height: `calc(100vh - ${TOP_BAR_HEIGHT}px)`, - WebkitOverflowScrolling: 'touch', - }, - menuContainer: { - borderColor: colors.grey300, - maxWidth: 330, - backgroundColor: colors.gray40, - }, -}; - export class Wiki extends React.Component<WikiProps, WikiState> { private _wikiBackoffTimeoutId: number; private _isUnmounted: boolean; @@ -65,9 +49,6 @@ export class Wiki extends React.Component<WikiProps, WikiState> { isHoveringSidebar: false, }; } - public componentDidMount(): void { - window.addEventListener('hashchange', this._onHashChanged.bind(this), false); - } public componentWillMount(): void { // tslint:disable-next-line:no-floating-promises this._fetchArticlesBySectionAsync(); @@ -75,92 +56,79 @@ export class Wiki extends React.Component<WikiProps, WikiState> { public componentWillUnmount(): void { this._isUnmounted = true; clearTimeout(this._wikiBackoffTimeoutId); - window.removeEventListener('hashchange', this._onHashChanged.bind(this), false); } public render(): React.ReactNode { - const menuSubsectionsBySection = _.isUndefined(this.state.articlesBySection) + const sectionNameToLinks = _.isUndefined(this.state.articlesBySection) ? {} - : this._getMenuSubsectionsBySection(this.state.articlesBySection); - const mainContainersStyle: React.CSSProperties = { - ...styles.mainContainers, - overflow: this.state.isHoveringSidebar ? 'auto' : 'hidden', - }; - const sidebarHeader = <SidebarHeader title="Wiki" iconUrl="/images/doc_icons/wiki.png" />; - return ( - <div> - <DocumentTitle title="0x Protocol Wiki" /> - <TopBar - blockchainIsLoaded={false} - location={this.props.location} - menuSubsectionsBySection={menuSubsectionsBySection} - translate={this.props.translate} - sidebarHeader={sidebarHeader} - /> - {_.isUndefined(this.state.articlesBySection) ? ( - <div className="col col-12" style={mainContainersStyle}> - <div - className="relative sm-px2 sm-pt2 sm-m1" - style={{ height: 122, top: '50%', transform: 'translateY(-50%)' }} - > - <div className="center pb2"> - <CircularProgress size={40} thickness={5} /> - </div> - <div className="center pt2" style={{ paddingBottom: 11 }}> - Loading wiki... - </div> - </div> - </div> - ) : ( - <div style={{ width: '100%', height: '100%', backgroundColor: colors.gray40 }}> - <div - className="mx-auto max-width-4 flex" - style={{ color: colors.grey800, height: `calc(100vh - ${TOP_BAR_HEIGHT}px)` }} - > - <div - className="relative lg-pl0 md-pl1 sm-hide xs-hide" - style={{ height: `calc(100vh - ${TOP_BAR_HEIGHT}px)`, width: '36%' }} - > - <div - className="absolute" - style={{ - ...styles.menuContainer, - ...mainContainersStyle, - height: 'calc(100vh - 76px)', - }} - onMouseEnter={this._onSidebarHover.bind(this)} - onMouseLeave={this._onSidebarHoverOff.bind(this)} - > - <NestedSidebarMenu - topLevelMenu={menuSubsectionsBySection} - menuSubsectionsBySection={menuSubsectionsBySection} - sidebarHeader={sidebarHeader} - /> - </div> - </div> - <div - className="relative" - style={{ - width: '100%', - height: `calc(100vh - ${TOP_BAR_HEIGHT}px)`, - backgroundColor: 'white', - }} - > - <div - id={sharedConstants.SCROLL_CONTAINER_ID} - style={{ ...mainContainersStyle, overflow: 'auto' }} - className="absolute" - > - <div id={sharedConstants.SCROLL_TOP_ID} /> - <div id="wiki" style={{ paddingRight: 2 }}> - {this._renderWikiArticles()} - </div> - </div> - </div> - </div> - </div> - )} + : this._getSectionNameToLinks(this.state.articlesBySection); + + const mainContent = _.isUndefined(this.state.articlesBySection) ? ( + <div className="flex justify-center">{this._renderLoading()}</div> + ) : ( + <div id="wiki" style={{ paddingRight: 2 }}> + {this._renderWikiArticles()} </div> ); + const isSmallScreen = this.props.screenWidth === ScreenWidths.Sm; + const sidebar = _.isUndefined(this.state.articlesBySection) ? ( + <div /> + ) : ( + <NestedSidebarMenu + sidebarHeader={isSmallScreen ? this._renderSidebarHeader() : undefined} + sectionNameToLinks={sectionNameToLinks} + /> + ); + return ( + <DevelopersPage + sidebar={sidebar} + mainContent={mainContent} + location={this.props.location} + screenWidth={this.props.screenWidth} + translate={this.props.translate} + dispatcher={this.props.dispatcher} + /> + ); + } + private _renderSidebarHeader(): React.ReactNode { + const menuItems = _.map(constants.DEVELOPER_TOPBAR_LINKS, menuItemInfo => { + return ( + <Link + key={`menu-item-${menuItemInfo.title}`} + to={menuItemInfo.to} + shouldOpenInNewTab={menuItemInfo.shouldOpenInNewTab} + > + <Button + borderRadius="4px" + padding="0.4em 0.375em" + width="100%" + fontColor={colors.grey800} + fontSize="14px" + textAlign="left" + > + {this.props.translate.get(menuItemInfo.title as Key, Deco.Cap)} + </Button> + </Link> + ); + }); + const wikiTitle = this.props.translate.get(Key.Wiki, Deco.Cap); + return ( + <Container> + <SidebarHeader screenWidth={this.props.screenWidth} title={wikiTitle} /> + {menuItems} + </Container> + ); + } + private _renderLoading(): React.ReactNode { + return ( + <Container className="pt4"> + <Container className="center pb2"> + <CircularProgress size={40} thickness={5} /> + </Container> + <Container className="center pt2" paddingBottom="11px"> + Loading wiki... + </Container> + </Container> + ); } private _renderWikiArticles(): React.ReactNode { const sectionNames = _.keys(this.state.articlesBySection); @@ -179,22 +147,10 @@ export class Wiki extends React.Component<WikiProps, WikiState> { headerSize={HeaderSizes.H2} githubLink={githubLink} /> - <div className="clearfix mb3 mt2 p3 mx-auto lg-flex md-flex sm-pb4" style={{ maxWidth: 390 }}> - <div className="sm-col sm-col-12 sm-center" style={{ opacity: 0.4, lineHeight: 2.5 }}> - See a way to improve this article? - </div> - <div className="sm-col sm-col-12 lg-col-7 md-col-7 sm-center sm-pt2"> - <RaisedButton href={githubLink} target="_blank" label="Edit on Github" /> - </div> - </div> </div> ); }); - return ( - <div key={`section-${sectionName}`} className="py2 md-px1 sm-px0"> - {renderedArticles} - </div> - ); + return <div key={`section-${sectionName}`}>{renderedArticles}</div>; } private async _fetchArticlesBySectionAsync(): Promise<void> { try { @@ -223,28 +179,19 @@ export class Wiki extends React.Component<WikiProps, WikiState> { } } } - private _getMenuSubsectionsBySection(articlesBySection: ArticlesBySection): { [section: string]: string[] } { + private _getSectionNameToLinks(articlesBySection: ArticlesBySection): ObjectMap<ALink[]> { const sectionNames = _.keys(articlesBySection); - const menuSubsectionsBySection: { [section: string]: string[] } = {}; + const sectionNameToLinks: ObjectMap<ALink[]> = {}; for (const sectionName of sectionNames) { const articles = articlesBySection[sectionName]; - const articleNames = _.map(articles, article => article.title); - menuSubsectionsBySection[sectionName] = articleNames; + const articleLinks = _.map(articles, article => { + return { + to: sharedUtils.getIdFromName(article.title), + title: article.title, + }; + }); + sectionNameToLinks[sectionName] = articleLinks; } - return menuSubsectionsBySection; - } - private _onSidebarHover(_event: React.FormEvent<HTMLInputElement>): void { - this.setState({ - isHoveringSidebar: true, - }); - } - private _onSidebarHoverOff(): void { - this.setState({ - isHoveringSidebar: false, - }); - } - private _onHashChanged(_event: any): void { - const hash = window.location.hash.slice(1); - sharedUtils.scrollToHash(hash, sharedConstants.SCROLL_CONTAINER_ID); + return sectionNameToLinks; } } diff --git a/packages/website/ts/redux/dispatcher.ts b/packages/website/ts/redux/dispatcher.ts index c418cab3f..e85afd3b1 100644 --- a/packages/website/ts/redux/dispatcher.ts +++ b/packages/website/ts/redux/dispatcher.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0xproject/utils'; +import { BigNumber } from '@0x/utils'; import { Dispatch } from 'redux'; import { State } from 'ts/redux/reducer'; import { diff --git a/packages/website/ts/redux/reducer.ts b/packages/website/ts/redux/reducer.ts index f54801639..51c77ba47 100644 --- a/packages/website/ts/redux/reducer.ts +++ b/packages/website/ts/redux/reducer.ts @@ -1,5 +1,5 @@ -import { generatePseudoRandomSalt } from '@0xproject/order-utils'; -import { BigNumber } from '@0xproject/utils'; +import { generatePseudoRandomSalt } from '@0x/order-utils'; +import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as moment from 'moment'; import { diff --git a/packages/website/ts/schemas/validator.ts b/packages/website/ts/schemas/validator.ts index 3fd013002..128d943e1 100644 --- a/packages/website/ts/schemas/validator.ts +++ b/packages/website/ts/schemas/validator.ts @@ -1,4 +1,4 @@ -import { SchemaValidator } from '@0xproject/json-schemas'; +import { SchemaValidator } from '@0x/json-schemas'; import { orderMetadataSchema } from 'ts/schemas/metadata_schema'; import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; import { portalTokenMetadataSchema } from 'ts/schemas/portal_token_metadata'; diff --git a/packages/website/ts/style/colors.ts b/packages/website/ts/style/colors.ts index 349845a09..0620bae0f 100644 --- a/packages/website/ts/style/colors.ts +++ b/packages/website/ts/style/colors.ts @@ -1,4 +1,4 @@ -import { colors as sharedColors } from '@0xproject/react-shared'; +import { colors as sharedColors } from '@0x/react-shared'; const appColors = { walletBoxShadow: 'rgba(0, 0, 0, 0.05)', diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 7e140c951..22bfd2cb4 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -1,5 +1,6 @@ -import { ObjectMap, SignedOrder } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; +import { ALink } from '@0x/react-shared'; +import { ObjectMap, SignedOrder } from '@0x/types'; +import { BigNumber } from '@0x/utils'; import { Provider } from 'ethereum-types'; import * as React from 'react'; @@ -461,6 +462,23 @@ export enum Key { RocketChat = 'ROCKETCHAT', TradeCallToAction = 'TRADE_CALL_TO_ACTION', OurMissionAndValues = 'OUR_MISSION_AND_VALUES', + BuildARelayer = 'BUILD_A_RELAYER', + BuildARelayerDescription = 'BUILD_A_RELAYER_DESCRIPTION', + DevelopOnEthereum = 'DEVELOP_ON_ETHEREUM', + DevelopOnEthereumDescription = 'DEVELOP_ON_ETHEREUM_DESCRIPTION', + OrderBasics = 'ORDER_BASICS', + OrderBasicsDescription = 'ORDER_BASICS_DESCRIPTION', + UseNetworkedLiquidity = 'USE_NETWORKED_LIQUIDITY', + UseNetworkedLiquidityDescription = 'USE_NETWORKED_LIQUIDITY_DESCRIPTION', + ViewAllDocumentation = 'VIEW_ALL_DOCUMENTATION', + Sandbox = 'SANDBOX', + Github = 'GITHUB', + LiveChat = 'LIVE_CHAT', + LibrariesAndTools = 'LIBRARIES_AND_TOOLS', + LibrariesAndToolsDescription = 'LIBRARIES_AND_TOOLS_DESCRIPTION', + More = 'MORE', + StartBuildOn0x = 'START_BUILDING_ON_0X', + StartBuildOn0xDescription = 'START_BUILDING_ON_0X_DESCRIPTION', } export enum SmartContractDocSections { @@ -572,6 +590,8 @@ export enum BrowserType { Chrome = 'Chrome', Firefox = 'Firefox', Opera = 'Opera', + Safari = 'Safari', + Edge = 'Edge', Other = 'Other', } @@ -603,4 +623,21 @@ export interface InjectedWeb3 { getNetwork(cd: (err: Error, networkId: string) => void): void; }; } + +export interface TutorialInfo { + iconUrl: string; + description: string; + link: ALink; +} + +export enum Categories { + ZeroExProtocol = '0x Protocol', + Ethereum = 'Ethereum', + CommunityMaintained = 'Community Maintained', +} + +export interface Package { + description: string; + link: ALink; +} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/utils/analytics.ts b/packages/website/ts/utils/analytics.ts index 3aae317b0..e990b4fc7 100644 --- a/packages/website/ts/utils/analytics.ts +++ b/packages/website/ts/utils/analytics.ts @@ -1,5 +1,5 @@ -import { assetDataUtils } from '@0xproject/order-utils'; -import { ObjectMap } from '@0xproject/types'; +import { assetDataUtils } from '@0x/order-utils'; +import { ObjectMap } from '@0x/types'; import * as _ from 'lodash'; import { PortalOrder } from 'ts/types'; import { utils } from 'ts/utils/utils'; diff --git a/packages/website/ts/utils/constants.ts b/packages/website/ts/utils/constants.ts index 18a4d8100..0a8a86c50 100644 --- a/packages/website/ts/utils/constants.ts +++ b/packages/website/ts/utils/constants.ts @@ -1,4 +1,9 @@ -import { BigNumber } from '@0xproject/utils'; +import { ALink } from '@0x/react-shared'; +import { BigNumber } from '@0x/utils'; +import { Key, WebsitePaths } from 'ts/types'; + +const URL_FORUM = 'https://forum.0xproject.com'; +const URL_ZEROEX_CHAT = 'https://chat.0xproject.com'; export const constants = { DECIMAL_PLACES_ETH: 18, @@ -74,6 +79,7 @@ export const constants = { URL_TESTNET_FAUCET: 'https://faucet.0xproject.com', URL_GITHUB_ORG: 'https://github.com/0xProject', URL_GITHUB_WIKI: 'https://github.com/0xProject/wiki', + URL_FORUM, URL_METAMASK_CHROME_STORE: 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn', URL_METAMASK_FIREFOX_STORE: 'https://addons.mozilla.org/en-US/firefox/addon/ether-metamask/', URL_COINBASE_WALLET_IOS_APP_STORE: 'https://itunes.apple.com/us/app/coinbase-wallet/id1278383455?mt=8', @@ -84,10 +90,11 @@ export const constants = { URL_PARITY_CHROME_STORE: 'https://chrome.google.com/webstore/detail/parity-ethereum-integrati/himekenlppkgeaoeddcliojfddemadig', URL_REDDIT: 'https://reddit.com/r/0xproject', + URL_SANDBOX: 'https://codesandbox.io/s/1qmjyp7p5j', URL_STANDARD_RELAYER_API_GITHUB: 'https://github.com/0xProject/standard-relayer-api/blob/master/README.md', URL_TWITTER: 'https://twitter.com/0xproject', URL_WETH_IO: 'https://weth.io/', - URL_ZEROEX_CHAT: 'https://chat.0xproject.com', + URL_ZEROEX_CHAT, URL_WEB3_DOCS: 'https://github.com/ethereum/wiki/wiki/JavaScript-API', URL_WEB3_DECODED_LOG_ENTRY_EVENT: 'https://github.com/0xProject/web3-typescript-typings/blob/f5bcb96/index.d.ts#L123', @@ -95,4 +102,24 @@ export const constants = { URL_WEB3_PROVIDER_DOCS: 'https://github.com/0xProject/web3-typescript-typings/blob/f5bcb96/index.d.ts#L150', URL_BIGNUMBERJS_GITHUB: 'http://mikemcl.github.io/bignumber.js', URL_MISSION_AND_VALUES_BLOG_POST: 'https://blog.0xproject.com/the-0x-mission-and-values-181a58706f9f', + DEVELOPER_TOPBAR_LINKS: [ + { + title: Key.Home, + to: WebsitePaths.Home, + }, + { + title: Key.Wiki, + to: WebsitePaths.Wiki, + }, + { + title: Key.Forum, + to: URL_FORUM, + shouldOpenInNewTab: true, + }, + { + title: Key.LiveChat, + to: URL_ZEROEX_CHAT, + shouldOpenInNewTab: true, + }, + ] as ALink[], }; diff --git a/packages/website/ts/utils/doc_utils.ts b/packages/website/ts/utils/doc_utils.ts index 0e1d9ea6e..e0b883ace 100644 --- a/packages/website/ts/utils/doc_utils.ts +++ b/packages/website/ts/utils/doc_utils.ts @@ -1,5 +1,5 @@ -import { DocAgnosticFormat, GeneratedDocJson } from '@0xproject/react-docs'; -import { fetchAsync, logUtils } from '@0xproject/utils'; +import { DocAgnosticFormat, GeneratedDocJson } from '@0x/react-docs'; +import { fetchAsync, logUtils } from '@0x/utils'; import * as _ from 'lodash'; import { S3FileObject, VersionToFilePath } from 'ts/types'; import convert = require('xml-js'); diff --git a/packages/website/ts/utils/error_reporter.ts b/packages/website/ts/utils/error_reporter.ts index bec92e829..6fc1216c3 100644 --- a/packages/website/ts/utils/error_reporter.ts +++ b/packages/website/ts/utils/error_reporter.ts @@ -1,4 +1,4 @@ -import { logUtils } from '@0xproject/utils'; +import { logUtils } from '@0x/utils'; import Rollbar = require('rollbar'); import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; diff --git a/packages/website/ts/utils/fake_token_registry.ts b/packages/website/ts/utils/fake_token_registry.ts new file mode 100644 index 000000000..607dd2553 --- /dev/null +++ b/packages/website/ts/utils/fake_token_registry.ts @@ -0,0 +1,879 @@ +export interface FakeTokenRegistryEntry { + address: string; + name: string; + symbol: string; + decimals: number; +} + +export const fakeTokenRegistry: { [networkId: string]: FakeTokenRegistryEntry[] } = { + '1': [ + { + address: '0xe41d2489571d322189246dafa5ebde1f4699f498', + name: '0x Protocol Token', + symbol: 'ZRX', + decimals: 18, + }, + { + address: '0x4156d3342d5c385a87d264f90653733592000581', + name: 'Salt', + symbol: 'SALT', + decimals: 8, + }, + { + address: '0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27', + name: 'Zilliqa', + symbol: 'ZIL', + decimals: 12, + }, + { + address: '0xe0b7927c4af23765cb51314a0e0521a9645f0e2a', + name: 'Digix DAO Token', + symbol: 'DGD', + decimals: 9, + }, + { + address: '0xfa05a73ffe78ef8f1a739473e462c54bae6567d9', + name: 'Lunyr', + symbol: 'LUN', + decimals: 18, + }, + { + address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + name: 'Wrapped Ether', + symbol: 'WETH', + decimals: 18, + }, + { + address: '0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1', + name: 'Melon Token', + symbol: 'MLN', + decimals: 18, + }, + { + address: '0x9a642d6b3368ddc662ca244badf32cda716005bc', + name: 'Qtum', + symbol: 'QTUM', + decimals: 18, + }, + { + address: '0xd26114cd6ee289accf82350c8d8487fedb8a0c07', + name: 'OmiseGO', + symbol: 'OMG', + decimals: 18, + }, + { + address: '0xb97048628db6b661d4c2aa833e95dbe1a905b280', + name: 'TenXPay', + symbol: 'PAY', + decimals: 18, + }, + { + address: '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0', + name: 'Eos', + symbol: 'EOS', + decimals: 18, + }, + { + address: '0x888666ca69e0f178ded6d75b5726cee99a87d698', + name: 'Iconomi', + symbol: 'ICN', + decimals: 18, + }, + { + address: '0x744d70fdbe2ba4cf95131626614a1763df805b9e', + name: 'StatusNetwork', + symbol: 'SNT', + decimals: 18, + }, + { + address: '0x6810e776880c02933d47db1b9fc05908e5386b96', + name: 'Gnosis', + symbol: 'GNO', + decimals: 18, + }, + { + address: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', + name: 'Basic Attention Token', + symbol: 'BAT', + decimals: 18, + }, + { + address: '0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac', + name: 'Storj', + symbol: 'STORJ', + decimals: 8, + }, + { + address: '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c', + name: 'Bancor', + symbol: 'BNT', + decimals: 18, + }, + { + address: '0x960b236a07cf122663c4303350609a66a7b288c0', + name: 'Aragon', + symbol: 'ANT', + decimals: 18, + }, + { + address: '0x0abdace70d3790235af448c88547603b945604ea', + name: 'district0x', + symbol: 'DNT', + decimals: 18, + }, + { + address: '0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009', + name: 'SingularDTV', + symbol: 'SNGLS', + decimals: 0, + }, + { + address: '0x419d0d8bdd9af5e606ae2232ed285aff190e711b', + name: 'FunFair', + symbol: 'FUN', + decimals: 8, + }, + { + address: '0xaf30d2a7e90d7dc361c8c4585e9bb7d2f6f15bc7', + name: 'FirstBlood', + symbol: '1ST', + decimals: 18, + }, + { + address: '0x08711d3b02c8758f2fb3ab4e80228418a7f8e39c', + name: 'Edgeless', + symbol: 'EDG', + decimals: 0, + }, + { + address: '0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec', + name: 'Polymath', + symbol: 'POLY', + decimals: 18, + }, + { + address: '0x607f4c5bb672230e8672085532f7e901544a7375', + name: 'iExec', + symbol: 'RLC', + decimals: 9, + }, + { + address: '0x667088b212ce3d06a1b553a7221e1fd19000d9af', + name: 'Wings', + symbol: 'WINGS', + decimals: 18, + }, + { + address: '0x41e5560054824ea6b0732e656e3ad64e20e94e45', + name: 'Civic', + symbol: 'CVC', + decimals: 8, + }, + { + address: '0xb63b606ac810a52cca15e44bb630fd42d8d1d83d', + name: 'Monaco', + symbol: 'MCO', + decimals: 8, + }, + { + address: '0xf433089366899d83a9f26a773d59ec7ecf30355e', + name: 'Metal', + symbol: 'MTL', + decimals: 8, + }, + { + address: '0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e', + name: 'Cofoundit', + symbol: 'CFI', + decimals: 18, + }, + { + address: '0xaaaf91d9b90df800df4f55c205fd6989c977e73a', + name: 'Monolith TKN', + symbol: 'TKN', + decimals: 8, + }, + { + address: '0xe7775a6e9bcf904eb39da2b68c5efb4f9360e08c', + name: 'Token-as-a-Service', + symbol: 'TAAS', + decimals: 6, + }, + { + address: '0x2e071d2966aa7d8decb1005885ba1977d6038a65', + name: 'DICE', + symbol: 'ROL', + decimals: 16, + }, + { + address: '0xcb94be6f13a1182e4a4b6140cb7bf2025d28e41b', + name: 'Trustcoin', + symbol: 'TRST', + decimals: 6, + }, + { + address: '0x1776e1f26f98b1a5df9cd347953a26dd3cb46671', + name: 'Numeraire', + symbol: 'NMR', + decimals: 18, + }, + { + address: '0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098', + name: 'Santiment Network Token', + symbol: 'SAN', + decimals: 18, + }, + { + address: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200', + name: 'Kyber Network Crystal', + symbol: 'KNC', + decimals: 18, + }, + { + address: '0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74', + name: 'Walton', + symbol: 'WTC', + decimals: 18, + }, + { + address: '0xd0d6d6c5fe4a677d343cc433536bb717bae167dd', + name: 'adToken', + symbol: 'ADT', + decimals: 9, + }, + { + address: '0x42d6622dece394b54999fbd73d108123806f6a18', + name: 'SpankChain', + symbol: 'SPANK', + decimals: 18, + }, + { + address: '0x701c244b988a513c945973defa05de933b23fe1d', + name: 'openANX', + symbol: 'OAX', + decimals: 18, + }, + { + address: '0x514910771af9ca656af840dff83e8264ecf986ca', + name: 'ChainLink', + symbol: 'LINK', + decimals: 18, + }, + { + address: '0x8f8221afbb33998d8584a2b05749ba73c37a938a', + name: 'Request Network', + symbol: 'REQ', + decimals: 18, + }, + { + address: '0x27054b13b1b798b345b591a4d22e6562d47ea75a', + name: 'AirSwap', + symbol: 'AST', + decimals: 4, + }, + { + address: '0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4', + name: 'Enigma', + symbol: 'ENG', + decimals: 8, + }, + { + address: '0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5', + name: 'Kin', + symbol: 'KIN', + decimals: 18, + }, + { + address: '0x27dce1ec4d3f72c3e457cc50354f1f975ddef488', + name: 'AirToken', + symbol: 'AIR', + decimals: 8, + }, + { + address: '0x12480e24eb5bec1a9d4369cab6a80cad3c0a377a', + name: 'Substratum', + symbol: 'SUB', + decimals: 2, + }, + { + address: '0x0e8d6b471e332f140e7d9dbb99e5e3822f728da6', + name: 'ABYSS', + symbol: 'ABYSS', + decimals: 18, + }, + { + address: '0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466', + name: 'AION', + symbol: 'AION', + decimals: 8, + }, + { + address: '0xd8912c10681d8b21fd3742244f44658dba12264e', + name: 'Pluton', + symbol: 'PLU', + decimals: 18, + }, + { + address: '0x1a7a8bd9106f2b8d977e08582dc7d24c723ab0db', + name: 'AppCoins', + symbol: 'APPC', + decimals: 18, + }, + { + address: '0xba5f11b16b155792cf3b2e6880e8706859a8aeb6', + name: 'Aeron', + symbol: 'ARN', + decimals: 8, + }, + { + address: '0xfec0cf7fe078a500abf15f1284958f22049c2c7e', + name: 'Maecenas ART Token', + symbol: 'ART', + decimals: 18, + }, + { + address: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', + name: 'Decentraland', + symbol: 'MANA', + decimals: 18, + }, + { + address: '0x1c4481750daa5ff521a2a7490d9981ed46465dbd', + name: 'BlockMason Credit Protocol Token', + symbol: 'BCPT', + decimals: 18, + }, + { + address: '0x55296f69f40ea6d20e478533c15a6b08b654e758', + name: 'XY Oracle', + symbol: 'XYO', + decimals: 18, + }, + { + address: '0xd7732e3783b0047aa251928960063f863ad022d8', + name: 'BrahmaOS', + symbol: 'BRM', + decimals: 18, + }, + { + address: '0x7d4b8cce0591c9044a22ee543533b72e976e36c3', + name: 'Change Coin', + symbol: 'CAG', + decimals: 18, + }, + { + address: '0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0', + name: 'CanYaCoin', + symbol: 'CAN', + decimals: 6, + }, + { + address: '0x1234567461d3f8db7496581774bd869c83d51c93', + name: 'BitClave', + symbol: 'CAT', + decimals: 18, + }, + { + address: '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359', + name: 'Dai Stablecoin v1.0', + symbol: 'DAI', + decimals: 18, + }, + { + address: '0x0cf0ee63788a0849fe5297f3407f701e122cc023', + name: 'Streamr DATAcoin', + symbol: 'DATA', + decimals: 18, + }, + { + address: '0x151202c9c18e495656f372281f493eb7698961d5', + name: 'DEBITUM', + symbol: 'DEB', + decimals: 18, + }, + { + address: '0xba2184520a1cc49a6159c57e61e1844e085615b6', + name: 'HelloGold Token', + symbol: 'HGT', + decimals: 8, + }, + { + address: '0x13f11c9905a08ca76e3e853be63d4f0944326c72', + name: 'Divi Exchange Token', + symbol: 'DIVX', + decimals: 18, + }, + { + address: '0x5b26c5d0772e5bbac8b3182ae9a13f9bb2d03765', + name: 'EDU Token', + symbol: 'EDU', + decimals: 8, + }, + { + address: '0xd49ff13661451313ca1553fd6954bd1d9b6e02b9', + name: 'ElectrifyAsia', + symbol: 'ELEC', + decimals: 18, + }, + { + address: '0x95daaab98046846bf4b2853e23cba236fa394a31', + name: 'EtheremonToken', + symbol: 'EMONT', + decimals: 8, + }, + { + address: '0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3', + name: 'Hut34 Entropy Token', + symbol: 'ENTR', + decimals: 18, + }, + { + address: '0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c', + name: 'Devery.io', + symbol: 'EVE', + decimals: 18, + }, + { + address: '0xf8e386eda857484f5a12e4b5daa9984e06e73705', + name: 'Indorse Token', + symbol: 'IND', + decimals: 18, + }, + { + address: '0x4f4f0db4de903b88f2b1a2847971e231d54f8fd3', + name: 'Geens Platform Token', + symbol: 'GEE', + decimals: 8, + }, + { + address: '0x543ff227f64aa17ea132bf9886cab5db55dcaddf', + name: 'DAOstack', + symbol: 'GEN', + decimals: 18, + }, + { + address: '0x8a854288a5976036a725879164ca3e91d30c6a1b', + name: 'Guaranteed Entrance Token', + symbol: 'GET', + decimals: 18, + }, + { + address: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', + name: 'Maker', + symbol: 'MKR', + decimals: 18, + }, + { + address: '0x9af839687f6c94542ac5ece2e317daae355493a1', + name: 'Hydro Protocol Token', + symbol: 'HOT', + decimals: 18, + }, + { + address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', + name: 'JET8 Token', + symbol: 'J8T', + decimals: 8, + }, + { + address: '0x8727c112c712c4a03371ac87a74dd6ab104af768', + name: 'Jetcoin Institute Token', + symbol: 'JET', + decimals: 18, + }, + { + address: '0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0', + name: 'Loom Network Token', + symbol: 'LOOM', + decimals: 18, + }, + { + address: '0x957c30ab0426e0c93cd8241e2c60392d08c6ac8e', + name: 'Modum Token', + symbol: 'MOD', + decimals: 0, + }, + { + address: '0x2ef27bf41236bd859a95209e17a43fbd26851f92', + name: 'MORPH', + symbol: 'MORPH', + decimals: 4, + }, + { + address: '0x263c618480dbe35c300d8d5ecda19bbb986acaed', + name: 'MOT', + symbol: 'MOT', + decimals: 18, + }, + { + address: '0xffe02ee4c69edf1b340fcad64fbd6b37a7b9e265', + name: 'NANJCOIN', + symbol: 'NANJ', + decimals: 8, + }, + { + address: '0xc15a399c4ea7815fe36857c9e290ee452a5d6b21', + name: 'BoatPilot Token', + symbol: 'NAVI', + decimals: 18, + }, + { + address: '0x9e46a38f5daabe8683e10793b06749eef7d733d1', + name: 'PolySwarm Nectar', + symbol: 'NCT', + decimals: 18, + }, + { + address: '0xa54ddc7b3cce7fc8b1e3fa0256d0db80d2c10970', + name: 'NEVERDIE Coin', + symbol: 'NDC', + decimals: 18, + }, + { + address: '0xb62132e35a6c13ee1ee0f84dc5d40bad8d815206', + name: 'Nexo', + symbol: 'NEXO', + decimals: 18, + }, + { + address: '0x0235fe624e044a05eed7a43e16e3083bc8a4287a', + name: 'Original Crypto Coin', + symbol: 'OCC', + decimals: 18, + }, + { + address: '0xb5dbc6d3cf380079df3b27135664b6bcf45d1869', + name: 'Omix', + symbol: 'OMX', + decimals: 8, + }, + { + address: '0xfedae5642668f8636a11987ff386bfd215f942ee', + name: 'PolicyPal Network Token', + symbol: 'PAL', + decimals: 18, + }, + { + address: '0x2604fa406be957e542beb89e6754fcde6815e83f', + name: 'Playkey Token', + symbol: 'PKT', + decimals: 18, + }, + { + address: '0xe477292f1b3268687a29376116b0ed27a9c76170', + name: 'Herocoin', + symbol: 'PLAY', + decimals: 18, + }, + { + address: '0x1985365e9f78359a9b6ad760e32412f4a445e862', + name: 'Augur', + symbol: 'REP', + decimals: 18, + }, + { + address: '0x408e41876cccdc0f92210600ef50372656052a38', + name: 'Republic Protocol', + symbol: 'REN', + decimals: 18, + }, + { + address: '0xd0929d411954c47438dc1d871dd6081f5c5e149c', + name: 'Refereum', + symbol: 'RFR', + decimals: 4, + }, + { + address: '0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244', + name: 'Rivetz', + symbol: 'RVT', + decimals: 18, + }, + { + address: '0x6888a16ea9792c15a4dcf2f6c623d055c8ede792', + name: 'Spectiv Signal Token', + symbol: 'SIG', + decimals: 18, + }, + { + address: '0x20f7a3ddf244dc9299975b4da1c39f8d5d75f05a', + name: 'Sapien Network Token', + symbol: 'SPN', + decimals: 6, + }, + { + address: '0xbbff862d906e348e9946bfb2132ecb157da3d4b4', + name: 'Sharder', + symbol: 'SS', + decimals: 18, + }, + { + address: '0x12b306fa98f4cbb8d4457fdff3a0a0a56f07ccdf', + name: 'Spectre.ai D-Token', + symbol: 'SXDT', + decimals: 18, + }, + { + address: '0xff3519eeeea3e76f1f699ccce5e23ee0bdda41ac', + name: 'Blockchain Capital', + symbol: 'BCAP', + decimals: 0, + }, + { + address: '0xced1a8529125d1bd06b54a7b01210df357d00885', + name: 'Too Real Badge', + symbol: 'TRL', + decimals: 0, + }, + { + address: '0xc86d054809623432210c107af2e3f619dcfbf652', + name: 'SENTINEL PROTOCOL', + symbol: 'UPP', + decimals: 18, + }, + { + address: '0x27f610bf36eca0939093343ac28b1534a721dbb4', + name: 'Wand Token', + symbol: 'WAND', + decimals: 18, + }, + { + address: '0x056017c55ae7ae32d12aef7c679df83a85ca75ff', + name: 'WyvernToken', + symbol: 'WYV', + decimals: 18, + }, + { + address: '0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d', + name: 'Aeternity', + symbol: 'AE', + decimals: 18, + }, + { + address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', + name: 'Ink Protocol', + symbol: 'XNK', + decimals: 18, + }, + { + address: '0x0f513ffb4926ff82d7f60a05069047aca295c413', + name: 'CrowdstartCoin', + symbol: 'XSC', + decimals: 18, + }, + { + address: '0xb9e7f8568e08d5659f5d29c4997173d84cdf2607', + name: 'Swarm City Token', + symbol: 'SWT', + decimals: 18, + }, + { + address: '0x6531f133e6deebe7f2dce5a0441aa7ef330b4e53', + name: 'Chronobank TIME', + symbol: 'TIME', + decimals: 8, + }, + { + address: '0xf230b790e05390fc8295f4d3f60332c93bed42e2', + name: 'Tronix', + symbol: 'TRX', + decimals: 6, + }, + { + address: '0x5c543e7ae0a1104f78406c340e9c64fd9fce5170', + name: 'vSlice', + symbol: 'VSL', + decimals: 0, + }, + { + address: '0x4df812f6064def1e5e029f1ca858777cc98d2d81', + name: 'Xaurum', + symbol: 'XAUR', + decimals: 8, + }, + ], + '42': [ + { + address: '0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570', + name: '0x Protocol Token', + symbol: 'ZRX', + decimals: 18, + }, + { + address: '0x323b5d4c32345ced77393b3530b1eed0f346429d', + name: 'Melon Token', + symbol: 'MLN', + decimals: 18, + }, + { + address: '0x1dad4783cf3fe3085c1426157ab175a6119a04ba', + name: 'Maker DAO', + symbol: 'MKR', + decimals: 18, + }, + { + address: '0xeee3870657e4716670f185df08652dd848fe8f7e', + name: 'Digix DAO Token', + symbol: 'DGD', + decimals: 18, + }, + { + address: '0xb18845c260f680d5b9d84649638813e342e4f8c9', + name: 'Augur Reputation Token', + symbol: 'REP', + decimals: 18, + }, + { + address: '0xef7fff64389b814a946f3e92105513705ca6b990', + name: 'Golem Network Token', + symbol: 'GNT', + decimals: 18, + }, + { + address: '0xd0a1e359811322d97991e03f863a0c30c2cf029c', + name: 'Wrapped Ether', + symbol: 'WETH', + decimals: 18, + }, + ], + '3': [ + { + address: '0xdf18648f5b4357d6cc1e27f7699af4f77ff44558', + name: 'token0', + symbol: 'TKN0', + decimals: 0, + }, + { + address: '0xd7cdcde4302a60c4d74a11eee21fbf455f476021', + name: 'token1', + symbol: 'TKN1', + decimals: 1, + }, + { + address: '0xf080f68c2113d40ff6a8528863f431908680900a', + name: 'token2', + symbol: 'TKN2', + decimals: 2, + }, + { + address: '0xe982b5c62434c98e27d15fed40447dda6b75c4eb', + name: 'token3', + symbol: 'TKN3', + decimals: 3, + }, + { + address: '0x2427d136751c1ca70480d3b2091261d639090a50', + name: 'token4', + symbol: 'TKN4', + decimals: 4, + }, + { + address: '0x7d3eca8ec55bb32bd0056edb9485b07a53d3fbfd', + name: 'token5', + symbol: 'TKN5', + decimals: 5, + }, + { + address: '0xff3c22e0a9014e9b4b1cf7a54bf39ab3107f6123', + name: 'token6', + symbol: 'TKN6', + decimals: 6, + }, + { + address: '0xdec283d9e188397c841ab59d9d9160fd47bc56f8', + name: 'token7', + symbol: 'TKN7', + decimals: 7, + }, + { + address: '0xedf5fd2f60d8fefbfa8011f2769b39657c54c3fd', + name: 'token8', + symbol: 'TKN8', + decimals: 8, + }, + { + address: '0xcd59fe7fa1a1a0ff536966a599b631d9cd5f2914', + name: 'token9', + symbol: 'TKN9', + decimals: 9, + }, + { + address: '0xaece1ee1813d56a5897f19ad50164565203b459f', + name: 'token10', + symbol: 'TKN10', + decimals: 10, + }, + { + address: '0xaab3f0619e529b1f1823be291daa7fcd38a15927', + name: 'token11', + symbol: 'TKN11', + decimals: 11, + }, + { + address: '0x2c46ad0b19cb1c1f3e51ae90d80654a227b08d30', + name: 'token12', + symbol: 'TKN12', + decimals: 12, + }, + { + address: '0x68977f3286a503f2b3930506f1b3a17dafbd9524', + name: 'token13', + symbol: 'TKN13', + decimals: 13, + }, + { + address: '0xe5c400b9ee56b823c6193a662041389624609db6', + name: 'token14', + symbol: 'TKN14', + decimals: 14, + }, + { + address: '0xf16ea9b23ddbeb6b16d253edf6b595da4009bb8b', + name: 'token16', + symbol: 'TKN16', + decimals: 16, + }, + { + address: '0x739a83860971e900c4bbbb92be6cfb9d459ef94a', + name: 'token15', + symbol: 'TKN15', + decimals: 15, + }, + { + address: '0x5eba21470cf683fe91b594afe7106039e38f3312', + name: 'token17', + symbol: 'TKN17', + decimals: 17, + }, + { + address: '0xc0ddd5df448907bb3f50350f3fe7a1da3fb2a2ee', + name: 'token18', + symbol: 'TKN18', + decimals: 18, + }, + { + address: '0x30fa25e53f8031014166fbd5e4bbeac0cd25df74', + name: 'token19', + symbol: 'TKN19', + decimals: 19, + }, + { + address: '0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d', + name: '0x Protocol Token', + symbol: 'ZRX', + decimals: 18, + }, + { + address: '0xc778417e063141139fce010982780140aa0cd5ab', + name: 'Ether Token', + symbol: 'WETH', + decimals: 18, + }, + { + address: '0x14823db576c11e4a54ca9e01ca0b28b18d3d1187', + name: 'b0x Protocol Token', + symbol: 'B0X', + decimals: 18, + }, + ], +}; // tslint:disable:max-file-line-count diff --git a/packages/website/ts/utils/fetch_utils.ts b/packages/website/ts/utils/fetch_utils.ts index e9a88b6b3..9afc5904d 100644 --- a/packages/website/ts/utils/fetch_utils.ts +++ b/packages/website/ts/utils/fetch_utils.ts @@ -1,4 +1,4 @@ -import { fetchAsync, logUtils } from '@0xproject/utils'; +import { fetchAsync, logUtils } from '@0x/utils'; import * as _ from 'lodash'; import * as queryString from 'query-string'; diff --git a/packages/website/ts/utils/mui_theme.ts b/packages/website/ts/utils/mui_theme.ts index f677b4625..3f32254de 100644 --- a/packages/website/ts/utils/mui_theme.ts +++ b/packages/website/ts/utils/mui_theme.ts @@ -1,4 +1,4 @@ -import { colors } from '@0xproject/react-shared'; +import { colors } from '@0x/react-shared'; import { getMuiTheme } from 'material-ui/styles'; export const muiTheme = getMuiTheme({ diff --git a/packages/website/ts/utils/order_parser.ts b/packages/website/ts/utils/order_parser.ts index 816200e3b..8938fbc53 100644 --- a/packages/website/ts/utils/order_parser.ts +++ b/packages/website/ts/utils/order_parser.ts @@ -1,5 +1,5 @@ -import { orderParsingUtils } from '@0xproject/order-utils'; -import { logUtils } from '@0xproject/utils'; +import { orderParsingUtils } from '@0x/order-utils'; +import { logUtils } from '@0x/utils'; import * as _ from 'lodash'; import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; diff --git a/packages/website/ts/utils/token_address_overrides.ts b/packages/website/ts/utils/token_address_overrides.ts index e7e916273..5e7275964 100644 --- a/packages/website/ts/utils/token_address_overrides.ts +++ b/packages/website/ts/utils/token_address_overrides.ts @@ -1,4 +1,4 @@ -import { ObjectMap } from '@0xproject/types'; +import { ObjectMap } from '@0x/types'; import { constants } from 'ts/utils/constants'; // Map of networkId -> tokenSymbol -> tokenAddress diff --git a/packages/website/ts/utils/translate.ts b/packages/website/ts/utils/translate.ts index 1ee1a59c5..5595e6e0f 100644 --- a/packages/website/ts/utils/translate.ts +++ b/packages/website/ts/utils/translate.ts @@ -80,7 +80,12 @@ export class Translate { case Deco.CapWords: const words = text.split(' '); - const capitalizedWords = _.map(words, w => this._capitalize(w)); + const capitalizedWords = _.map(words, (w: string, i: number) => { + if (w.length === 1) { + return w; + } + return this._capitalize(w); + }); text = capitalizedWords.join(' '); break; diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index d1628bc52..87aa48018 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -1,9 +1,9 @@ -import { ContractWrappersError } from '@0xproject/contract-wrappers'; -import { assetDataUtils, OrderError } from '@0xproject/order-utils'; -import { constants as sharedConstants, Networks } from '@0xproject/react-shared'; -import { ExchangeContractErrs } from '@0xproject/types'; -import { BigNumber } from '@0xproject/utils'; -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { ContractWrappersError } from '@0x/contract-wrappers'; +import { assetDataUtils, OrderError } from '@0x/order-utils'; +import { constants as sharedConstants, Networks } from '@0x/react-shared'; +import { ExchangeContractErrs } from '@0x/types'; +import { BigNumber } from '@0x/utils'; +import { Web3Wrapper } from '@0x/web3-wrapper'; import * as bowser from 'bowser'; import deepEqual = require('deep-equal'); import * as _ from 'lodash'; @@ -413,6 +413,10 @@ export const utils = { return BrowserType.Firefox; } else if (bowser.opera) { return BrowserType.Opera; + } else if (bowser.msedge) { + return BrowserType.Edge; + } else if (bowser.safari) { + return BrowserType.Safari; } else { return BrowserType.Other; } diff --git a/packages/website/tslint.json b/packages/website/tslint.json index b55ffe90f..50f5be4f6 100644 --- a/packages/website/tslint.json +++ b/packages/website/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["@0xproject/tslint-config"], + "extends": ["@0x/tslint-config"], "rules": { "no-implicit-dependencies": false, "no-object-literal-type-assertion": false, diff --git a/python-packages/order_utils/setup.py b/python-packages/order_utils/setup.py index a76d724aa..1a094cfe1 100644..100755 --- a/python-packages/order_utils/setup.py +++ b/python-packages/order_utils/setup.py @@ -1,13 +1,16 @@ +#!/usr/bin/env python + """setuptools module for order_utils package.""" import subprocess # nosec from shutil import rmtree -from os import path, remove, walk +from os import environ, path, remove, walk +from sys import argv -from distutils.command.clean import clean # type: ignore -from setuptools import setup # type: ignore -import setuptools.command.build_py # type: ignore -from setuptools.command.test import test as TestCommand # type: ignore +from distutils.command.clean import clean +import distutils.command.build_py +from setuptools import setup +from setuptools.command.test import test as TestCommand class TestCommandExtension(TestCommand): @@ -15,13 +18,13 @@ class TestCommandExtension(TestCommand): def run_tests(self): """Invoke pytest.""" - import pytest # type: ignore + import pytest pytest.main() # pylint: disable=too-many-ancestors -class LintCommand(setuptools.command.build_py.build_py): +class LintCommand(distutils.command.build_py.build_py): """Custom setuptools command class for running linters.""" def run(self): @@ -34,7 +37,7 @@ class LintCommand(setuptools.command.build_py.build_py): # docstring style checker: "pydocstyle src test setup.py".split(), # static type checker: - "mypy src setup.py".split(), + "mypy src test setup.py".split(), # security issue checker: "bandit -r src ./setup.py".split(), # general linter: @@ -42,6 +45,21 @@ class LintCommand(setuptools.command.build_py.build_py): # pylint takes relatively long to run, so it runs last, to enable # fast failures. ] + + # tell mypy where to find interface stubs for 3rd party libs + environ["MYPYPATH"] = path.join( + path.dirname(path.realpath(argv[0])), "stubs" + ) + + # HACK(gene): until eth_abi releases + # https://github.com/ethereum/eth-abi/pull/107 , we need to simply + # create an empty file `py.typed` in the eth_abi package directory. + import eth_abi + + eth_abi_dir = path.dirname(path.realpath(eth_abi.__file__)) + with open(path.join(eth_abi_dir, "py.typed"), "a"): + pass + for lint_command in lint_commands: print( "Running lint command `", " ".join(lint_command).strip(), "`" @@ -79,7 +97,7 @@ setup( "test": TestCommandExtension, }, include_package_data=True, - install_requires=["web3"], + install_requires=["eth-abi", "web3"], extras_require={ "dev": [ "bandit", @@ -87,6 +105,7 @@ setup( "coverage", "coveralls", "mypy", + "mypy_extensions", "pycodestyle", "pydocstyle", "pylint", @@ -118,7 +137,7 @@ setup( "Topic :: Software Development :: Libraries", "Topic :: Utilities", ], - zip_safe=False, + zip_safe=False, # required per mypy command_options={ "build_sphinx": { "source_dir": ("setup.py", "src"), diff --git a/python-packages/order_utils/src/conf.py b/python-packages/order_utils/src/conf.py index f3f15967c..e74a29d00 100644 --- a/python-packages/order_utils/src/conf.py +++ b/python-packages/order_utils/src/conf.py @@ -2,6 +2,9 @@ # Reference: http://www.sphinx-doc.org/en/master/config +from typing import List + + # pylint: disable=invalid-name # because these variables are not named in upper case, as globals should be. @@ -29,7 +32,7 @@ master_doc = "index" # The master toctree document. language = None -exclude_patterns = [] # type: ignore +exclude_patterns: List[str] = [] # The name of the Pygments (syntax highlighting) style to use. pygments_style = None diff --git a/python-packages/order_utils/src/index.rst b/python-packages/order_utils/src/index.rst index cbc4c8409..e09abcca2 100644 --- a/python-packages/order_utils/src/index.rst +++ b/python-packages/order_utils/src/index.rst @@ -10,9 +10,12 @@ order_utils.py .. automodule:: zero_ex.order_utils :members: -.. automodule:: zero_ex.order_utils.signature_utils +.. automodule:: zero_ex.order_utils.asset_data_utils :members: +.. autoclass:: zero_ex.order_utils.asset_data_utils.ERC20AssetData + +See source for properties. Sphinx does not easily generate class property docs; pull requests welcome. Indices and tables ================== diff --git a/python-packages/order_utils/src/zero_ex/dev_utils/__init__.py b/python-packages/order_utils/src/zero_ex/dev_utils/__init__.py new file mode 100644 index 000000000..b6a224d2c --- /dev/null +++ b/python-packages/order_utils/src/zero_ex/dev_utils/__init__.py @@ -0,0 +1 @@ +"""Dev utils to be shared across 0x projects and packages.""" diff --git a/python-packages/order_utils/src/zero_ex/dev_utils/abi_utils.py b/python-packages/order_utils/src/zero_ex/dev_utils/abi_utils.py new file mode 100644 index 000000000..71b6128ca --- /dev/null +++ b/python-packages/order_utils/src/zero_ex/dev_utils/abi_utils.py @@ -0,0 +1,102 @@ +"""Ethereum ABI utilities. + +Builds on the eth-abi package, adding some convenience methods like those found +in npmjs.com/package/ethereumjs-abi. Ideally, all of this code should be +pushed upstream into eth-abi. +""" + +import re +from typing import Any, List + +from mypy_extensions import TypedDict + +from eth_abi import encode_abi +from web3 import Web3 + +from .type_assertions import assert_is_string, assert_is_list + + +class MethodSignature(TypedDict, total=False): + """Object interface to an ABI method signature.""" + + method: str + args: List[str] + + +def parse_signature(signature: str) -> MethodSignature: + """Parse a method signature into its constituent parts. + + >>> parse_signature("ERC20Token(address)") + {'method': 'ERC20Token', 'args': ['address']} + """ + assert_is_string(signature, "signature") + + matches = re.match(r"^(\w+)\((.+)\)$", signature) + if matches is None: + raise ValueError(f"Invalid method signature {signature}") + return {"method": matches[1], "args": matches[2].split(",")} + + +def elementary_name(name: str) -> str: + """Convert from short to canonical names; barely implemented. + + Modeled after ethereumjs-abi's ABI.elementaryName(), but only implemented + to support our particular use case and a few other simple ones. + + >>> elementary_name("address") + 'address' + >>> elementary_name("uint") + 'uint256' + """ + assert_is_string(name, "name") + + return { + "int": "int256", + "uint": "uint256", + "fixed": "fixed128x128", + "ufixed": "ufixed128x128", + }.get(name, name) + + +def event_id(name: str, types: List[str]) -> str: + """Return the Keccak-256 hash of the given method. + + >>> event_id("ERC20Token", ["address"]) + '0xf47261b06eedbfce68afd46d0f3c27c60b03faad319eaf33103611cf8f6456ad' + """ + assert_is_string(name, "name") + assert_is_list(types, "types") + + signature = f"{name}({','.join(list(map(elementary_name, types)))})" + return Web3.sha3(text=signature).hex() + + +def method_id(name: str, types: List[str]) -> str: + """Return the 4-byte method identifier. + + >>> method_id("ERC20Token", ["address"]) + '0xf47261b0' + """ + assert_is_string(name, "name") + assert_is_list(types, "types") + + return event_id(name, types)[0:10] + + +def simple_encode(method: str, *args: Any) -> bytes: + # docstring considered all one line by pylint: disable=line-too-long + r"""Encode a method ABI. + + >>> simple_encode("ERC20Token(address)", "0x1dc4c1cefef38a777b15aa20260a54e584b16c48") + b'\xf4ra\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xc4\xc1\xce\xfe\xf3\x8aw{\x15\xaa &\nT\xe5\x84\xb1lH' + """ # noqa: E501 (line too long) + assert_is_string(method, "method") + + signature: MethodSignature = parse_signature(method) + + return bytes.fromhex( + ( + method_id(signature["method"], signature["args"]) + + encode_abi(signature["args"], args).hex() + )[2:] + ) diff --git a/python-packages/order_utils/src/zero_ex/dev_utils/type_assertions.py b/python-packages/order_utils/src/zero_ex/dev_utils/type_assertions.py new file mode 100644 index 000000000..745d014e6 --- /dev/null +++ b/python-packages/order_utils/src/zero_ex/dev_utils/type_assertions.py @@ -0,0 +1,33 @@ +"""Assertions for runtime type checking of function arguments.""" + +from typing import Any + + +def assert_is_string(value: Any, name: str) -> None: + """If :param value: isn't of type str, raise a TypeError. + + >>> try: assert_is_string(123, 'var') + ... except TypeError as type_error: print(str(type_error)) + ... + expected variable 'var', with value 123, to have type 'str', not 'int' + """ + if not isinstance(value, str): + raise TypeError( + f"expected variable '{name}', with value {str(value)}, to have" + + f" type 'str', not '{type(value).__name__}'" + ) + + +def assert_is_list(value: Any, name: str) -> None: + """If :param value: isn't of type list, raise a TypeError. + + >>> try: assert_is_list(123, 'var') + ... except TypeError as type_error: print(str(type_error)) + ... + expected variable 'var', with value 123, to have type 'list', not 'int' + """ + if not isinstance(value, list): + raise TypeError( + f"expected variable '{name}', with value {str(value)}, to have" + + f" type 'list', not '{type(value).__name__}'" + ) diff --git a/python-packages/order_utils/src/zero_ex/order_utils/asset_data_utils.py b/python-packages/order_utils/src/zero_ex/order_utils/asset_data_utils.py new file mode 100644 index 000000000..451de39af --- /dev/null +++ b/python-packages/order_utils/src/zero_ex/order_utils/asset_data_utils.py @@ -0,0 +1,72 @@ +"""Asset data encoding and decoding utilities.""" + +from mypy_extensions import TypedDict + +import eth_abi + +from zero_ex.dev_utils import abi_utils +from zero_ex.dev_utils.type_assertions import assert_is_string + + +ERC20_ASSET_DATA_BYTE_LENGTH = 36 +SELECTOR_LENGTH = 10 + + +class ERC20AssetData(TypedDict): + """Object interface to ERC20 asset data.""" + + asset_proxy_id: str + token_address: str + + +def encode_erc20_asset_data(token_address: str) -> str: + """Encode an ERC20 token address into an asset data string. + + :param token_address: the ERC20 token's contract address. + :rtype: hex encoded asset data string, usable in the makerAssetData or + takerAssetData fields in a 0x order. + + >>> encode_erc20_asset_data('0x1dc4c1cefef38a777b15aa20260a54e584b16c48') + '0xf47261b00000000000000000000000001dc4c1cefef38a777b15aa20260a54e584b16c48' + """ + assert_is_string(token_address, "token_address") + + return ( + "0x" + + abi_utils.simple_encode("ERC20Token(address)", token_address).hex() + ) + + +def decode_erc20_asset_data(asset_data: str) -> ERC20AssetData: + # docstring considered all one line by pylint: disable=line-too-long + """Decode an ERC20 assetData hex string. + + :param asset_data: String produced by prior call to encode_erc20_asset_data() + + >>> decode_erc20_asset_data("0xf47261b00000000000000000000000001dc4c1cefef38a777b15aa20260a54e584b16c48") + {'asset_proxy_id': '0xf47261b0', 'token_address': '0x1dc4c1cefef38a777b15aa20260a54e584b16c48'} + """ # noqa: E501 (line too long) + assert_is_string(asset_data, "asset_data") + + if len(asset_data) < ERC20_ASSET_DATA_BYTE_LENGTH: + raise ValueError( + "Could not decode ERC20 Proxy Data. Expected length of encoded" + + f" data to be at least {str(ERC20_ASSET_DATA_BYTE_LENGTH)}." + + f" Got {str(len(asset_data))}." + ) + + asset_proxy_id: str = asset_data[0:10] + if asset_proxy_id != abi_utils.method_id("ERC20Token", ["address"]): + raise ValueError( + "Could not decode ERC20 Proxy Data. Expected Asset Proxy Id to be" + + f" ERC20 ({abi_utils.method_id('ERC20Token', ['address'])})" + + f" but got {asset_proxy_id}." + ) + + # workaround for https://github.com/PyCQA/pylint/issues/1498 + # pylint: disable=unsubscriptable-object + token_address = eth_abi.decode_abi( + ["address"], bytes.fromhex(asset_data[SELECTOR_LENGTH:]) + )[0] + + return {"asset_proxy_id": asset_proxy_id, "token_address": token_address} diff --git a/python-packages/order_utils/src/zero_ex/order_utils/signature_utils.py b/python-packages/order_utils/src/zero_ex/order_utils/signature_utils.py deleted file mode 100644 index 7f4697106..000000000 --- a/python-packages/order_utils/src/zero_ex/order_utils/signature_utils.py +++ /dev/null @@ -1,13 +0,0 @@ -"""Signature utilities.""" - - -def ec_sign_order_hash(): - """Signs an orderHash. - - Returns its elliptic curve signature and signature type. This method - currently supports TestRPC, Geth, and Parity above and below v1.6.6. - - >>> ec_sign_order_hash() - 'stub return value' - """ - return "stub return value" diff --git a/packages/sra-report/coverage/.gitkeep b/python-packages/order_utils/stubs/distutils/__init__.pyi index e69de29bb..e69de29bb 100644 --- a/packages/sra-report/coverage/.gitkeep +++ b/python-packages/order_utils/stubs/distutils/__init__.pyi diff --git a/python-packages/order_utils/stubs/distutils/command/__init__.pyi b/python-packages/order_utils/stubs/distutils/command/__init__.pyi new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/python-packages/order_utils/stubs/distutils/command/__init__.pyi diff --git a/python-packages/order_utils/stubs/distutils/command/clean.pyi b/python-packages/order_utils/stubs/distutils/command/clean.pyi new file mode 100644 index 000000000..46a42ddb1 --- /dev/null +++ b/python-packages/order_utils/stubs/distutils/command/clean.pyi @@ -0,0 +1,7 @@ +from distutils.core import Command + +class clean(Command): + def initialize_options(self: clean) -> None: ... + def finalize_options(self: clean) -> None: ... + def run(self: clean) -> None: ... + ... diff --git a/python-packages/order_utils/stubs/pytest/__init__.pyi b/python-packages/order_utils/stubs/pytest/__init__.pyi new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/python-packages/order_utils/stubs/pytest/__init__.pyi diff --git a/python-packages/order_utils/stubs/pytest/raises.pyi b/python-packages/order_utils/stubs/pytest/raises.pyi new file mode 100644 index 000000000..2e3b29f3d --- /dev/null +++ b/python-packages/order_utils/stubs/pytest/raises.pyi @@ -0,0 +1 @@ +def raises(exception: Exception) -> ExceptionInfo: ... diff --git a/python-packages/order_utils/stubs/setuptools/__init__.pyi b/python-packages/order_utils/stubs/setuptools/__init__.pyi new file mode 100644 index 000000000..baa349d70 --- /dev/null +++ b/python-packages/order_utils/stubs/setuptools/__init__.pyi @@ -0,0 +1,6 @@ +from distutils.dist import Distribution +from typing import Any + +def setup(**attrs: Any) -> Distribution: ... + +class Command: ... diff --git a/python-packages/order_utils/stubs/setuptools/command/__init__.pyi b/python-packages/order_utils/stubs/setuptools/command/__init__.pyi new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/python-packages/order_utils/stubs/setuptools/command/__init__.pyi diff --git a/python-packages/order_utils/stubs/setuptools/command/test.pyi b/python-packages/order_utils/stubs/setuptools/command/test.pyi new file mode 100644 index 000000000..c5ec770ad --- /dev/null +++ b/python-packages/order_utils/stubs/setuptools/command/test.pyi @@ -0,0 +1,3 @@ +from setuptools import Command + +class test(Command): ... diff --git a/python-packages/order_utils/stubs/web3/__init__.pyi b/python-packages/order_utils/stubs/web3/__init__.pyi new file mode 100644 index 000000000..c6f357009 --- /dev/null +++ b/python-packages/order_utils/stubs/web3/__init__.pyi @@ -0,0 +1,10 @@ +from typing import Optional, Union + +class Web3: + @staticmethod + def sha3( + primitive: Optional[Union[bytes, int, None]] = None, + text: Optional[str] = None, + hexstr: Optional[str] = None + ) -> bytes: ... + ... diff --git a/python-packages/order_utils/test/test_abi_utils.py b/python-packages/order_utils/test/test_abi_utils.py new file mode 100644 index 000000000..49a2a4f20 --- /dev/null +++ b/python-packages/order_utils/test/test_abi_utils.py @@ -0,0 +1,53 @@ +"""Tests of 0x.abi_utils.""" + +import pytest + +from zero_ex.dev_utils.abi_utils import ( + elementary_name, + event_id, + method_id, + parse_signature, + simple_encode, +) + + +def test_parse_signature_type_error(): + """Test that passing in wrong types raises TypeError.""" + with pytest.raises(TypeError): + parse_signature(123) + + +def test_parse_signature_bad_input(): + """Test that passing a non-signature string raises a ValueError.""" + with pytest.raises(ValueError): + parse_signature("a string that's not even close to a signature") + + +def test_elementary_name_type_error(): + """Test that passing in wrong types raises TypeError.""" + with pytest.raises(TypeError): + elementary_name(123) + + +def test_event_id_type_error(): + """Test that passing in wrong types raises TypeError.""" + with pytest.raises(TypeError): + event_id(123, []) + + with pytest.raises(TypeError): + event_id("valid string", 123) + + +def test_method_id_type_error(): + """Test that passing in wrong types raises TypeError.""" + with pytest.raises(TypeError): + method_id(123, []) + + with pytest.raises(TypeError): + method_id("ERC20Token", 123) + + +def test_simple_encode_type_error(): + """Test that passing in wrong types raises TypeError.""" + with pytest.raises(TypeError): + simple_encode(123) diff --git a/python-packages/order_utils/test/test_asset_data_utils.py b/python-packages/order_utils/test/test_asset_data_utils.py new file mode 100644 index 000000000..eeada5873 --- /dev/null +++ b/python-packages/order_utils/test/test_asset_data_utils.py @@ -0,0 +1,35 @@ +"""Tests of 0x.order_utils.asset_data_utils.""" + +import pytest + +from zero_ex.order_utils.asset_data_utils import ( + encode_erc20_asset_data, + decode_erc20_asset_data, + ERC20_ASSET_DATA_BYTE_LENGTH, +) + + +def test_encode_erc20_asset_data_type_error(): + """Test that passing in a non-string raises a TypeError.""" + with pytest.raises(TypeError): + encode_erc20_asset_data(123) + + +def test_decode_erc20_asset_data_type_error(): + """Test that passing in a non-string raises a TypeError.""" + with pytest.raises(TypeError): + decode_erc20_asset_data(123) + + +def test_decode_erc20_asset_data_too_short(): + """Test that passing an insufficiently long string raises a ValueError.""" + with pytest.raises(ValueError): + decode_erc20_asset_data(" " * (ERC20_ASSET_DATA_BYTE_LENGTH - 1)) + + +def test_decode_erc20_asset_data_invalid_proxy_id(): + """Test that passing data with an invalid proxy ID raises a ValueError.""" + with pytest.raises(ValueError): + decode_erc20_asset_data( + "0xffffffff" + (" " * ERC20_ASSET_DATA_BYTE_LENGTH) + ) diff --git a/python-packages/order_utils/test/test_doctest.py b/python-packages/order_utils/test/test_doctest.py index a0e61f84a..ba5da5418 100644 --- a/python-packages/order_utils/test/test_doctest.py +++ b/python-packages/order_utils/test/test_doctest.py @@ -1,10 +1,24 @@ """Exercise doctests for order_utils module.""" from doctest import testmod -from zero_ex.order_utils import signature_utils +from zero_ex.dev_utils import abi_utils, type_assertions +from zero_ex.order_utils import asset_data_utils -def test_doctest(): - """Invoke doctest on the module.""" - (failure_count, _) = testmod(signature_utils) + +def test_doctest_asset_data_utils(): + """Invoke doctest on the asset_data_utils module.""" + (failure_count, _) = testmod(asset_data_utils) + assert failure_count == 0 + + +def test_doctest_abi_utils(): + """Invoke doctest on the abi_utils module.""" + (failure_count, _) = testmod(abi_utils) + assert failure_count == 0 + + +def test_doctest_type_assertions(): + """Invoke doctest on the type_assertions module.""" + (failure_count, _) = testmod(type_assertions) assert failure_count == 0 diff --git a/python-packages/order_utils/test/test_signature_utils.py b/python-packages/order_utils/test/test_signature_utils.py deleted file mode 100644 index 7e830f9f8..000000000 --- a/python-packages/order_utils/test/test_signature_utils.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Tests of 0x.order_utils.signature_utils.*.""" - -from zero_ex.order_utils.signature_utils import ec_sign_order_hash - - -def test_ec_sign_order_hash(): - """Test the signing of order hashes.""" - assert ec_sign_order_hash() == "stub return value" diff --git a/tsconfig.json b/tsconfig.json index 119b85572..bbcb0a6d2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,7 @@ "noImplicitReturns": true, "pretty": true, "skipLibCheck": true, - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], "strict": true, // These settings are required for TypeScript project references "composite": true, @@ -45,7 +45,6 @@ { "path": "./packages/sol-compiler" }, { "path": "./packages/sol-cov" }, { "path": "./packages/sol-resolver" }, - { "path": "./packages/sra-report" }, { "path": "./packages/sra-spec" }, { "path": "./packages/subproviders" }, { "path": "./packages/testnet-faucets" }, diff --git a/typedoc-tsconfig.json b/typedoc-tsconfig.json index 32efdb4cf..1d3a15a33 100644 --- a/typedoc-tsconfig.json +++ b/typedoc-tsconfig.json @@ -11,7 +11,7 @@ "resolveJsonModule": true, "pretty": true, "skipLibCheck": true, - "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], + "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], "strict": true } } @@ -2,27 +2,6 @@ # yarn lockfile v1 -"0x.js@^0.38.6": - version "0.38.6" - resolved "https://registry.yarnpkg.com/0x.js/-/0x.js-0.38.6.tgz#f6cb2b6ef9aea2ff7696c923095e0b794c1d84fc" - dependencies: - "@0xproject/assert" "^0.2.14" - "@0xproject/base-contract" "^0.3.6" - "@0xproject/contract-wrappers" "^0.1.1" - "@0xproject/order-utils" "^0.0.9" - "@0xproject/order-watcher" "^0.0.8" - "@0xproject/sol-compiler" "^0.5.4" - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - "@0xproject/web3-wrapper" "^0.7.3" - ethers "3.0.22" - lodash "4.17.10" - -"8fold-marked@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/8fold-marked/-/8fold-marked-0.3.9.tgz#bb89c645612f8ccfaffac1ca6e3c11f168c9cf59" - "@0x-lerna-fork/add@^3.0.0-beta.22": version "3.0.0-beta.22" resolved "https://registry.yarnpkg.com/@0x-lerna-fork/add/-/add-3.0.0-beta.22.tgz#b69d7cbf6a28af6abb3aabb47fb617e7c6c7ac2c" @@ -493,247 +472,12 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" -"@0xproject/assert@^0.2.14": - version "0.2.14" - resolved "https://registry.yarnpkg.com/@0xproject/assert/-/assert-0.2.14.tgz#7d5a373fedc8eb482716b730f4dddf3ef33bfa29" - dependencies: - "@0xproject/json-schemas" "^0.8.3" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - lodash "4.17.10" - valid-url "1.0.9" - -"@0xproject/base-contract@^0.3.6": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@0xproject/base-contract/-/base-contract-0.3.6.tgz#c6d742ce2904bdd9e77524d99ba2438d3aae8a40" - dependencies: - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - "@0xproject/web3-wrapper" "^0.7.3" - ethers "3.0.22" - lodash "4.17.10" - -"@0xproject/connect@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@0xproject/connect/-/connect-1.0.4.tgz#1d5f27f4aa69920dde50178ed7179240f81d1c54" - dependencies: - "@0xproject/assert" "^0.2.14" - "@0xproject/json-schemas" "^0.8.3" - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^1.0.3" - "@0xproject/utils" "^1.0.4" - lodash "^4.17.4" - query-string "^5.0.1" - sinon "^4.0.0" - websocket "^1.0.25" - -"@0xproject/contract-wrappers@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@0xproject/contract-wrappers/-/contract-wrappers-0.1.1.tgz#8108d7ec051f202ef0cfa77c91c4ef994bf89881" - dependencies: - "@0xproject/assert" "^0.2.14" - "@0xproject/base-contract" "^0.3.6" - "@0xproject/fill-scenarios" "^0.0.6" - "@0xproject/json-schemas" "^0.8.3" - "@0xproject/order-utils" "^0.0.9" - "@0xproject/sol-compiler" "^0.5.4" - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - "@0xproject/web3-wrapper" "^0.7.3" - ethereumjs-blockstream "5.0.0" - ethereumjs-util "5.1.5" - ethers "3.0.22" - js-sha3 "0.7.0" - lodash "4.17.10" - uuid "3.2.1" - -"@0xproject/fill-scenarios@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@0xproject/fill-scenarios/-/fill-scenarios-0.0.6.tgz#969a2c49122650af5a1bf7fe7c6d286a0e6f2de2" - dependencies: - "@0xproject/base-contract" "^0.3.6" - "@0xproject/order-utils" "^0.0.9" - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - "@0xproject/web3-wrapper" "^0.7.3" - ethers "3.0.22" - lodash "4.17.10" - -"@0xproject/json-schemas@^0.8.3": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@0xproject/json-schemas/-/json-schemas-0.8.3.tgz#455e6219a6bd05e990392165192a983a9ab89f26" - dependencies: - "@0xproject/typescript-typings" "^0.4.3" - "@types/node" "9.6.0" - jsonschema "1.2.2" - lodash.values "4.3.0" - "@0xproject/npm-cli-login@^0.0.11": version "0.0.11" resolved "https://registry.yarnpkg.com/@0xproject/npm-cli-login/-/npm-cli-login-0.0.11.tgz#3f1ec06112ce62aad300ff0575358f68aeecde2e" dependencies: npm-registry-client "7.0.9" -"@0xproject/order-utils@^0.0.9": - version "0.0.9" - resolved "https://registry.yarnpkg.com/@0xproject/order-utils/-/order-utils-0.0.9.tgz#75225dfbd87335d18810abf995d8e077b9a84868" - dependencies: - "@0xproject/assert" "^0.2.14" - "@0xproject/json-schemas" "^0.8.3" - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - "@0xproject/web3-wrapper" "^0.7.3" - "@types/node" "9.6.0" - bn.js "4.11.7" - ethereumjs-abi "0.6.5" - ethereumjs-util "5.1.5" - lodash "4.17.10" - -"@0xproject/order-watcher@^0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@0xproject/order-watcher/-/order-watcher-0.0.8.tgz#cfba4c39ca8c5d39e076276479383d0aae022c6d" - dependencies: - "@0xproject/assert" "^0.2.14" - "@0xproject/base-contract" "^0.3.6" - "@0xproject/contract-wrappers" "^0.1.1" - "@0xproject/fill-scenarios" "^0.0.6" - "@0xproject/json-schemas" "^0.8.3" - "@0xproject/order-utils" "^0.0.9" - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - "@0xproject/web3-wrapper" "^0.7.3" - bintrees "1.0.2" - ethereum-types "^0.0.2" - ethereumjs-blockstream "5.0.0" - ethers "3.0.22" - lodash "4.17.10" - -"@0xproject/sol-compiler@^0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@0xproject/sol-compiler/-/sol-compiler-0.5.4.tgz#3e0b04b0c02c5ec046ebb962b5ed20978c6b4cdd" - dependencies: - "@0xproject/json-schemas" "^0.8.3" - "@0xproject/sol-resolver" "^0.0.8" - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - "@0xproject/web3-wrapper" "^0.7.3" - "@types/yargs" "10.0.2" - chalk "2.3.2" - ethereumjs-util "5.1.5" - isomorphic-fetch "2.2.1" - lodash "4.17.10" - mkdirp "0.5.1" - require-from-string "2.0.1" - semver "5.5.0" - solc "0.4.23" - web3 "0.20.6" - web3-eth-abi "1.0.0-beta.33" - yargs "11.1.0" - -"@0xproject/sol-resolver@^0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@0xproject/sol-resolver/-/sol-resolver-0.0.8.tgz#5496ccebc9afa9eedfb5b62104f6478aa852bf66" - dependencies: - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.0.3" - lodash "4.17.10" - -"@0xproject/types@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@0xproject/types/-/types-0.5.0.tgz#ba3cfbc11a8c6344b57c9680aa7df2ea84b9bf05" - dependencies: - bignumber.js "~4.1.0" - -"@0xproject/types@^0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@0xproject/types/-/types-0.8.2.tgz#6f936b73bfb6f017b5102002d97da0881da92d1b" - dependencies: - "@types/node" "9.6.0" - bignumber.js "~4.1.0" - -"@0xproject/typescript-typings@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@0xproject/typescript-typings/-/typescript-typings-0.0.3.tgz#3272080bde00ade0a970b0d236686b483b08a1d0" - dependencies: - "@0xproject/types" "^0.5.0" - bignumber.js "~4.1.0" - -"@0xproject/typescript-typings@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@0xproject/typescript-typings/-/typescript-typings-0.4.3.tgz#f99f939a43f2764ad7182fcd78a71212a1d76d96" - dependencies: - "@0xproject/types" "^0.8.2" - bignumber.js "~4.1.0" - ethereum-types "^0.0.2" - -"@0xproject/typescript-typings@^1.0.3": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@0xproject/typescript-typings/-/typescript-typings-1.0.5.tgz#a808443419f26a7b90d63d1afd3efbfb48644184" - dependencies: - "@types/bn.js" "^4.11.0" - "@types/react" "*" - bignumber.js "~4.1.0" - ethereum-types "^1.0.5" - popper.js "1.14.3" - -"@0xproject/typescript-typings@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@0xproject/typescript-typings/-/typescript-typings-2.0.2.tgz#1812f64e341f1d24c09b8b5a951cbde0e5fff9c2" - dependencies: - "@types/bn.js" "^4.11.0" - "@types/react" "*" - bignumber.js "~4.1.0" - ethereum-types "^1.0.8" - popper.js "1.14.3" - -"@0xproject/utils@^0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@0xproject/utils/-/utils-0.7.3.tgz#ffa7c6da9bf0dd3e13694f185dcfc48a8981ff05" - dependencies: - "@0xproject/typescript-typings" "^0.4.3" - "@types/node" "9.6.0" - bignumber.js "~4.1.0" - ethereum-types "^0.0.2" - ethereumjs-util "^5.1.1" - ethers "3.0.22" - js-sha3 "0.7.0" - lodash "4.17.10" - web3 "0.20.6" - -"@0xproject/utils@^1.0.4": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@0xproject/utils/-/utils-1.0.11.tgz#5b53e7d9d4dbe68e219049218c9db04e97c37429" - dependencies: - "@0xproject/types" "^1.1.1" - "@0xproject/typescript-typings" "^2.0.2" - "@types/node" "*" - abortcontroller-polyfill "^1.1.9" - bignumber.js "~4.1.0" - detect-node "2.0.3" - ethereum-types "^1.0.8" - ethereumjs-util "^5.1.1" - ethers "3.0.22" - isomorphic-fetch "^2.2.1" - js-sha3 "^0.7.0" - lodash "^4.17.5" - -"@0xproject/web3-wrapper@^0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@0xproject/web3-wrapper/-/web3-wrapper-0.7.3.tgz#9bd50b034b92fd505b6766b6e225f014b6d08b08" - dependencies: - "@0xproject/types" "^0.8.2" - "@0xproject/typescript-typings" "^0.4.3" - "@0xproject/utils" "^0.7.3" - ethers "3.0.22" - lodash "4.17.10" - web3 "0.20.6" - "@babel/code-frame@^7.0.0-beta.35": version "7.0.0" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -786,6 +530,21 @@ dependencies: events "^2.0.0" +"@lerna/add@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.4.1.tgz#d41068317e30f530df48220d256b5e79690b1877" + dependencies: + "@lerna/bootstrap" "^3.4.1" + "@lerna/command" "^3.3.0" + "@lerna/filter-options" "^3.3.2" + "@lerna/npm-conf" "^3.4.1" + "@lerna/validation-error" "^3.0.0" + dedent "^0.7.0" + npm-package-arg "^6.0.0" + p-map "^1.2.0" + pacote "^9.1.0" + semver "^5.5.0" + "@lerna/batch-packages@^3.0.0-beta.18": version "3.0.0-beta.18" resolved "http://registry.yarnpkg.com/@lerna%2fbatch-packages/-/batch-packages-3.0.0-beta.18.tgz#69d5e3f5003e454a1615c38d9f0b65b10853625a" @@ -794,6 +553,326 @@ "@lerna/validation-error" "^3.0.0-beta.10" npmlog "^4.1.2" +"@lerna/batch-packages@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.1.2.tgz#74b5312a01a8916204cbc71237ffbe93144b99df" + dependencies: + "@lerna/package-graph" "^3.1.2" + "@lerna/validation-error" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/bootstrap@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.4.1.tgz#10635e9b547fb7d685949ac78e0923f73da2f52a" + dependencies: + "@lerna/batch-packages" "^3.1.2" + "@lerna/command" "^3.3.0" + "@lerna/filter-options" "^3.3.2" + "@lerna/has-npm-version" "^3.3.0" + "@lerna/npm-conf" "^3.4.1" + "@lerna/npm-install" "^3.3.0" + "@lerna/rimraf-dir" "^3.3.0" + "@lerna/run-lifecycle" "^3.4.1" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/symlink-binary" "^3.3.0" + "@lerna/symlink-dependencies" "^3.3.0" + "@lerna/validation-error" "^3.0.0" + dedent "^0.7.0" + get-port "^3.2.0" + multimatch "^2.1.0" + npm-package-arg "^6.0.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + read-package-tree "^5.1.6" + semver "^5.5.0" + +"@lerna/changed@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.4.1.tgz#84a049359a53b8812c3a07a664bd41b1768f5938" + dependencies: + "@lerna/collect-updates" "^3.3.2" + "@lerna/command" "^3.3.0" + "@lerna/listable" "^3.0.0" + "@lerna/output" "^3.0.0" + "@lerna/version" "^3.4.1" + +"@lerna/check-working-tree@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.3.0.tgz#2118f301f28ccb530812e5b27a341b1e6b3c84e2" + dependencies: + "@lerna/describe-ref" "^3.3.0" + "@lerna/validation-error" "^3.0.0" + +"@lerna/child-process@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.3.0.tgz#71184a763105b6c8ece27f43f166498d90fe680f" + dependencies: + chalk "^2.3.1" + execa "^1.0.0" + strong-log-transformer "^2.0.0" + +"@lerna/clean@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.3.2.tgz#9a7e8a1e400e580de260fa124945b2939a025069" + dependencies: + "@lerna/command" "^3.3.0" + "@lerna/filter-options" "^3.3.2" + "@lerna/prompt" "^3.3.1" + "@lerna/rimraf-dir" "^3.3.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.2.0.tgz#3ed25bcbc0b8f0878bc6a102ee0296f01476cfdf" + dependencies: + "@lerna/global-options" "^3.1.3" + dedent "^0.7.0" + npmlog "^4.1.2" + yargs "^12.0.1" + +"@lerna/collect-updates@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.3.2.tgz#54df5ce59ca05e8aa04ff8a9299f89cc253a9304" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/describe-ref" "^3.3.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^1.0.0" + +"@lerna/command@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.3.0.tgz#e81c4716a676b02dbe9d3f548d5f45b4ba32c25a" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/package-graph" "^3.1.2" + "@lerna/project" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + "@lerna/write-log-file" "^3.0.0" + dedent "^0.7.0" + execa "^1.0.0" + is-ci "^1.0.10" + lodash "^4.17.5" + npmlog "^4.1.2" + +"@lerna/conventional-commits@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.4.1.tgz#0b47f9fc0c4a10951883e949d939188da1b527bc" + dependencies: + "@lerna/validation-error" "^3.0.0" + conventional-changelog-angular "^5.0.1" + conventional-changelog-core "^3.1.0" + conventional-recommended-bump "^4.0.1" + fs-extra "^7.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.0.0" + npmlog "^4.1.2" + semver "^5.5.0" + +"@lerna/create-symlink@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.3.0.tgz#91de00fd576018ba4251f0c6a5b4b7f768f22a82" + dependencies: + cmd-shim "^2.0.2" + fs-extra "^7.0.0" + npmlog "^4.1.2" + +"@lerna/create@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.4.1.tgz#7cad78a5701d7666a0f5d0fe0e325acd8d8f5b63" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/command" "^3.3.0" + "@lerna/npm-conf" "^3.4.1" + "@lerna/validation-error" "^3.0.0" + camelcase "^4.1.0" + dedent "^0.7.0" + fs-extra "^7.0.0" + globby "^8.0.1" + init-package-json "^1.10.3" + npm-package-arg "^6.0.0" + pify "^3.0.0" + semver "^5.5.0" + slash "^1.0.0" + validate-npm-package-license "^3.0.3" + validate-npm-package-name "^3.0.0" + whatwg-url "^7.0.0" + +"@lerna/describe-ref@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.3.0.tgz#d373adb530d5428ab91e303ccbfcf51a98374a3a" + dependencies: + "@lerna/child-process" "^3.3.0" + npmlog "^4.1.2" + +"@lerna/diff@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.3.0.tgz#c8130a5f508b47fad5fec81404498bc3acdf9cb5" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/command" "^3.3.0" + "@lerna/validation-error" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/exec@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.3.2.tgz#95ecaca617fd85abdb91e9a378ed06ec1763d665" + dependencies: + "@lerna/batch-packages" "^3.1.2" + "@lerna/child-process" "^3.3.0" + "@lerna/command" "^3.3.0" + "@lerna/filter-options" "^3.3.2" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + +"@lerna/filter-options@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.3.2.tgz#ac90702b7876ff4980dcdeaeac049c433dd01773" + dependencies: + "@lerna/collect-updates" "^3.3.2" + "@lerna/filter-packages" "^3.0.0" + dedent "^0.7.0" + +"@lerna/filter-packages@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.0.0.tgz#5eb25ad1610f3e2ab845133d1f8d7d40314e838f" + dependencies: + "@lerna/validation-error" "^3.0.0" + multimatch "^2.1.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0.tgz#8fc7866e8d8e9a2f2dc385287ba32eb44de8bdeb" + dependencies: + npmlog "^4.1.2" + +"@lerna/global-options@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.1.3.tgz#cf85e24655a91d04d4efc9a80c1f83fc768d08ae" + +"@lerna/has-npm-version@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.3.0.tgz#8a73c2c437a0e1e68a19ccbd0dd3c014d4d39135" + dependencies: + "@lerna/child-process" "^3.3.0" + semver "^5.5.0" + +"@lerna/import@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.3.1.tgz#deca8c93c9cc03c5844b975c6da9937dd7530440" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/command" "^3.3.0" + "@lerna/prompt" "^3.3.1" + "@lerna/validation-error" "^3.0.0" + dedent "^0.7.0" + fs-extra "^7.0.0" + p-map-series "^1.0.0" + +"@lerna/init@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.3.0.tgz#998f3497da3d891867c593b808b6db4b8fc4ccb9" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/command" "^3.3.0" + fs-extra "^7.0.0" + p-map "^1.2.0" + write-json-file "^2.3.0" + +"@lerna/link@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.3.0.tgz#c0c05ff52d0f0c659fcf221627edfcd58e477a5c" + dependencies: + "@lerna/command" "^3.3.0" + "@lerna/package-graph" "^3.1.2" + "@lerna/symlink-dependencies" "^3.3.0" + p-map "^1.2.0" + slash "^1.0.0" + +"@lerna/list@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.3.2.tgz#1412b3cce2a83b1baa4ff6fb962d50b46c28ec98" + dependencies: + "@lerna/command" "^3.3.0" + "@lerna/filter-options" "^3.3.2" + "@lerna/listable" "^3.0.0" + "@lerna/output" "^3.0.0" + +"@lerna/listable@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.0.0.tgz#27209b1382c87abdbc964220e75c247d803d4199" + dependencies: + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.0.4.tgz#6d1f6ce5ca68b9971f2a27f0ecf3c50684be174a" + dependencies: + byte-size "^4.0.3" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.4.1.tgz#859e931b0bc9a5eed86309cc09508810c1e7d121" + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +"@lerna/npm-dist-tag@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.3.0.tgz#e1c5ab67674216d901266a16846b21cc81ff6afd" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/npm-install@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.3.0.tgz#16d00ffd668d11b2386b3ac68bdac2cf8320e533" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + fs-extra "^7.0.0" + npm-package-arg "^6.0.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" + +"@lerna/npm-publish@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.3.1.tgz#30384665d7ee387343332ece62ca231207bbabea" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + "@lerna/has-npm-version" "^3.3.0" + "@lerna/log-packed" "^3.0.4" + fs-extra "^7.0.0" + npmlog "^4.1.2" + p-map "^1.2.0" + +"@lerna/npm-run-script@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.3.0.tgz#3c79601c27c67121155b20e039be53130217db72" + dependencies: + "@lerna/child-process" "^3.3.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/output@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.0.0.tgz#4ed4a30ed2f311046b714b3840a090990ba3ce35" + dependencies: + npmlog "^4.1.2" + "@lerna/package-graph@^3.0.0-beta.18": version "3.0.0-beta.18" resolved "http://registry.yarnpkg.com/@lerna%2fpackage-graph/-/package-graph-3.0.0-beta.18.tgz#8c33a6a10453d310e14fc9d317dc51e845e11963" @@ -801,12 +880,188 @@ npm-package-arg "^6.0.0" semver "^5.5.0" +"@lerna/package-graph@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.1.2.tgz#b70298a3a8c82e12090da33233bf242223a38f20" + dependencies: + "@lerna/validation-error" "^3.0.0" + npm-package-arg "^6.0.0" + semver "^5.5.0" + +"@lerna/package@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.0.0.tgz#14afc9a6cb1f7f7b23c1d7c7aa81bdac7d44c0e5" + dependencies: + npm-package-arg "^6.0.0" + write-pkg "^3.1.0" + +"@lerna/project@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.0.0.tgz#4320d2a2b4080cabcf95161d9c48475217d8a545" + dependencies: + "@lerna/package" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + cosmiconfig "^5.0.2" + dedent "^0.7.0" + dot-prop "^4.2.0" + glob-parent "^3.1.0" + globby "^8.0.1" + load-json-file "^4.0.0" + npmlog "^4.1.2" + p-map "^1.2.0" + resolve-from "^4.0.0" + write-json-file "^2.3.0" + +"@lerna/prompt@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.3.1.tgz#ec53f9034a7a02a671627241682947f65078ab88" + dependencies: + inquirer "^6.2.0" + npmlog "^4.1.2" + +"@lerna/publish@^3.4.3": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.4.3.tgz#fb956ca2a871729982022889f90d0e8eb8528340" + dependencies: + "@lerna/batch-packages" "^3.1.2" + "@lerna/check-working-tree" "^3.3.0" + "@lerna/child-process" "^3.3.0" + "@lerna/collect-updates" "^3.3.2" + "@lerna/command" "^3.3.0" + "@lerna/describe-ref" "^3.3.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + "@lerna/npm-conf" "^3.4.1" + "@lerna/npm-dist-tag" "^3.3.0" + "@lerna/npm-publish" "^3.3.1" + "@lerna/output" "^3.0.0" + "@lerna/prompt" "^3.3.1" + "@lerna/run-lifecycle" "^3.4.1" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + "@lerna/version" "^3.4.1" + fs-extra "^7.0.0" + libnpmaccess "^3.0.0" + npm-package-arg "^6.0.0" + npm-registry-fetch "^3.8.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^1.2.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + semver "^5.5.0" + +"@lerna/resolve-symlink@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.3.0.tgz#c5d99a60cb17e2ea90b3521a0ba445478d194a44" + dependencies: + fs-extra "^7.0.0" + npmlog "^4.1.2" + read-cmd-shim "^1.0.1" + +"@lerna/rimraf-dir@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.3.0.tgz#687e9bb3668a9e540e281302a52d9a573860f5db" + dependencies: + "@lerna/child-process" "^3.3.0" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" + +"@lerna/run-lifecycle@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.4.1.tgz#6d7e44eada31cb4ec78b18ef050da0d86f6c892b" + dependencies: + "@lerna/npm-conf" "^3.4.1" + npm-lifecycle "^2.0.0" + npmlog "^4.1.2" + +"@lerna/run-parallel-batches@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz#468704934084c74991d3124d80607857d4dfa840" + dependencies: + p-map "^1.2.0" + p-map-series "^1.0.0" + +"@lerna/run@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.3.2.tgz#f521f4a22585c90758f34a584cb1871f8bb2a83e" + dependencies: + "@lerna/batch-packages" "^3.1.2" + "@lerna/command" "^3.3.0" + "@lerna/filter-options" "^3.3.2" + "@lerna/npm-run-script" "^3.3.0" + "@lerna/output" "^3.0.0" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + p-map "^1.2.0" + +"@lerna/symlink-binary@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.3.0.tgz#99ea570b21baabd61ecab27582eeb1d7b2c5f9cf" + dependencies: + "@lerna/create-symlink" "^3.3.0" + "@lerna/package" "^3.0.0" + fs-extra "^7.0.0" + p-map "^1.2.0" + read-pkg "^3.0.0" + +"@lerna/symlink-dependencies@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.3.0.tgz#13bcaed3e37986ab01b13498a459c7f609397dc3" + dependencies: + "@lerna/create-symlink" "^3.3.0" + "@lerna/resolve-symlink" "^3.3.0" + "@lerna/symlink-binary" "^3.3.0" + fs-extra "^7.0.0" + p-finally "^1.0.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + +"@lerna/validation-error@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.0.0.tgz#a27e90051c3ba71995e2a800a43d94ad04b3e3f4" + dependencies: + npmlog "^4.1.2" + "@lerna/validation-error@^3.0.0-beta.10": version "3.0.0-beta.10" resolved "http://registry.yarnpkg.com/@lerna%2fvalidation-error/-/validation-error-3.0.0-beta.10.tgz#cf5cbc39c4d27b89c6080e326de745f6fb7451ab" dependencies: npmlog "^4.1.2" +"@lerna/version@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.4.1.tgz#029448cccd3ccefb4d5f666933bd13cfb37edab0" + dependencies: + "@lerna/batch-packages" "^3.1.2" + "@lerna/check-working-tree" "^3.3.0" + "@lerna/child-process" "^3.3.0" + "@lerna/collect-updates" "^3.3.2" + "@lerna/command" "^3.3.0" + "@lerna/conventional-commits" "^3.4.1" + "@lerna/output" "^3.0.0" + "@lerna/prompt" "^3.3.1" + "@lerna/run-lifecycle" "^3.4.1" + "@lerna/validation-error" "^3.0.0" + chalk "^2.3.1" + dedent "^0.7.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-map "^1.2.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^5.5.0" + slash "^1.0.0" + temp-write "^3.4.0" + +"@lerna/write-log-file@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.0.0.tgz#2f95fee80c6821fe1ee6ccf8173d2b4079debbd2" + dependencies: + npmlog "^4.1.2" + write-file-atomic "^2.3.0" + "@loopback/dist-util@^0.3.6": version "0.3.6" resolved "https://registry.npmjs.org/@loopback/dist-util/-/dist-util-0.3.6.tgz#bd1d5887aa0f2bec41722f1d74fc19319d04e975" @@ -857,12 +1112,35 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + dependencies: + any-observable "^0.3.0" + "@sinonjs/formatio@^2.0.0": version "2.0.0" resolved "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" dependencies: samsam "1.3.0" +"@static/discharge@^1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@static/discharge/-/discharge-1.2.2.tgz#dc941e0c02c421b338b83ac2e59e140d7214c971" + dependencies: + aws-sdk "^2.304.0" + execa "^1.0.0" + glob "^7.1.3" + inquirer "^6.2.0" + listr "^0.14.1" + lodash.differenceby "^4.8.0" + lodash.intersectionby "^4.7.0" + lodash.intersectionwith "^4.4.0" + log-symbols "^2.2.0" + meow "^5.0.0" + mime "^2.3.1" + update-notifier "^2.5.0" + "@types/accounting@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@types/accounting/-/accounting-0.4.1.tgz#865d9f5694fd7c438fba34eb4bc82eec6f34cdd5" @@ -1109,7 +1387,7 @@ dependencies: "@types/node" "*" -"@types/mocha@^2.2.42", "@types/mocha@^2.2.48": +"@types/mocha@^2.2.42": version "2.2.48" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.48.tgz#3523b126a0b049482e1c3c11877460f76622ffab" @@ -1117,24 +1395,10 @@ version "5.2.3" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.3.tgz#11f3a5629d67cd444fa6c94536576244e6a52ea9" -"@types/newman@^3.9.0": - version "3.9.0" - resolved "https://registry.npmjs.org/@types/newman/-/newman-3.9.0.tgz#f46427e8f633545dd94e8df0c251e22145f88227" - -"@types/nock@^9.1.2": - version "9.1.3" - resolved "https://registry.yarnpkg.com/@types/nock/-/nock-9.1.3.tgz#1d445679375b9e25afd449dc56585f81729454e8" - dependencies: - "@types/node" "*" - "@types/node@*": version "9.6.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.5.tgz#ee700810fdf49ac1c399fc5980b7559b3e5a381d" -"@types/node@9.6.0": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7" - "@types/node@^10.3.2": version "10.9.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897" @@ -1143,10 +1407,6 @@ version "10.5.7" resolved "https://registry.npmjs.org/@types/node/-/node-10.5.7.tgz#960d9feb3ade2233bcc9843c918d740b4f78a7cf" -"@types/node@^8.0.53": - version "8.10.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.8.tgz#794cba23cc9f8d9715f6543fa8827433b5f5cd3b" - "@types/numeral@^0.0.22": version "0.0.22" resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-0.0.22.tgz#86bef1f0a2d743afdc2ef3168d45f2905e1a0b93" @@ -1346,7 +1606,7 @@ "@types/events" "*" "@types/node" "*" -"@types/yargs@10.0.2", "@types/yargs@^10.0.0": +"@types/yargs@^10.0.0": version "10.0.2" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-10.0.2.tgz#cc4ea921877874d1261e2c44b89807bc836e1b12" @@ -1494,6 +1754,13 @@ JSONStream@^1.0.4: jsonparse "^1.2.0" through ">=2.2.7 <3" +JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abab@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" @@ -1606,6 +1873,18 @@ aes-js@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.1.tgz#89fd1f94ae51b4c72d62466adc1a7323ff52f072" +agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.1.tgz#4eba75cf2ad258fc09efd506cdb8d8c2971d35a4" + dependencies: + humanize-ms "^1.2.1" + ajv-errors@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59" @@ -1721,6 +2000,10 @@ antlr4@4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.0.tgz#297f956ddc06f83397fc0990ecf2e0cf20bfbbee" +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + any-promise@1.3.0, any-promise@^1.0.0, any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -1755,6 +2038,10 @@ aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" +aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" @@ -1940,16 +2227,16 @@ async@1.x, async@^1.4.0, async@^1.4.2, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@2.6.0, async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.0: +async@^0.9.0, async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" -async@^0.9.0, async@~0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - async@^2.1.4: version "2.6.1" resolved "https://registry.npmjs.org/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" @@ -2010,6 +2297,20 @@ aws-sdk@^2.127.0: uuid "3.1.0" xml2js "0.4.19" +aws-sdk@^2.304.0: + version "2.338.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.338.0.tgz#f1b1347f78defa27b92b030b5787fad0f89ac83b" + dependencies: + buffer "4.9.1" + events "1.1.1" + ieee754 "1.1.8" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.1.0" + xml2js "0.4.19" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -2018,10 +2319,6 @@ aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -aws4@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - aws4@^1.2.1, aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" @@ -2707,7 +3004,7 @@ bindings@^1.2.1, bindings@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" -bintrees@1.0.2, bintrees@^1.0.2: +bintrees@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" @@ -2784,7 +3081,7 @@ blockies@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/blockies/-/blockies-0.0.2.tgz#22ad58da4f6b382bc79bf4386c5820c70047e4ed" -bluebird@^2.6.2, bluebird@^2.9.24, bluebird@^2.9.34: +bluebird@^2.9.24, bluebird@^2.9.34: version "2.11.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" @@ -3043,10 +3340,6 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -btoa@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.1.2.tgz#3e40b81663f81d2dd6596a4cb714a8dc16cfabe0" - buffer-compare@=1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-compare/-/buffer-compare-1.1.1.tgz#5be7be853af89198d1f4ddc090d1d66a48aef596" @@ -3143,6 +3436,10 @@ byline@^5.0.0: version "5.0.0" resolved "http://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" +byte-size@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.3.tgz#b7c095efc68eadf82985fccd9a2df43a74fa2ccd" + bytes@3.0.0, bytes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3178,7 +3475,7 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" -cacache@^11.0.2, cacache@^11.2.0: +cacache@^11.0.1, cacache@^11.0.2, cacache@^11.2.0: version "11.2.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.2.0.tgz#617bdc0b02844af56310e411c0878941d5739965" dependencies: @@ -3353,15 +3650,7 @@ chain-function@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" -chalk@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -3430,9 +3719,9 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -charset@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" check-error@^1.0.1, check-error@^1.0.2: version "1.0.2" @@ -3520,10 +3809,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" - circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" @@ -3567,25 +3852,10 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-progress@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-1.7.0.tgz#401cdfeacc1a34afc281b4bdf88829236724c92f" - dependencies: - colors "^1.1.2" - cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" -cli-table2@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/cli-table2/-/cli-table2-0.2.0.tgz#2d1ef7f218a0e786e214540562d4bd177fe32d97" - dependencies: - lodash "^3.10.1" - string-width "^1.0.1" - optionalDependencies: - colors "^1.1.2" - cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -3748,14 +4018,14 @@ colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" -colors@1.1.2, colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - colors@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + columnify@^1.5.4: version "1.5.4" resolved "http://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -3773,14 +4043,6 @@ commander@2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" -commander@2.12.2: - version "2.12.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" - -commander@2.13.0, commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - commander@2.15.1, commander@^2.12.1, commander@^2.8.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -3793,6 +4055,10 @@ commander@^2.7.1, commander@~2.17.1: version "2.17.1" resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -3919,6 +4185,13 @@ conventional-changelog-angular@^1.6.6: compare-func "^1.3.1" q "^1.5.1" +conventional-changelog-angular@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.1.tgz#f96431b76de453333a909decd02b15cb5bd2d364" + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + conventional-changelog-core@^2.0.5: version "2.0.11" resolved "http://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287" @@ -3937,10 +4210,32 @@ conventional-changelog-core@^2.0.5: read-pkg-up "^1.0.1" through2 "^2.0.0" +conventional-changelog-core@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.1.0.tgz#96a81bb3301b4b2a3dc2851cc54c5fb674ac1942" + dependencies: + conventional-changelog-writer "^4.0.0" + conventional-commits-parser "^3.0.0" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "^2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^2.0.0" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^1.1.0" + read-pkg-up "^1.0.1" + through2 "^2.0.0" + conventional-changelog-preset-loader@^1.1.8: version "1.1.8" resolved "http://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz#40bb0f142cd27d16839ec6c74ee8db418099b373" +conventional-changelog-preset-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.1.tgz#d134734e0cc1b91b88b30586c5991f31442029f1" + conventional-changelog-writer@^3.0.9: version "3.0.9" resolved "http://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz#4aecdfef33ff2a53bb0cf3b8071ce21f0e994634" @@ -3956,6 +4251,21 @@ conventional-changelog-writer@^3.0.9: split "^1.0.0" through2 "^2.0.0" +conventional-changelog-writer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.0.tgz#3ed983c8ef6a3aa51fe44e82c9c75e86f1b5aa42" + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^2.0.0" + dateformat "^3.0.0" + handlebars "^4.0.2" + json-stringify-safe "^5.0.1" + lodash "^4.2.1" + meow "^4.0.0" + semver "^5.5.0" + split "^1.0.0" + through2 "^2.0.0" + conventional-commits-filter@^1.1.6: version "1.1.6" resolved "http://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz#4389cd8e58fe89750c0b5fb58f1d7f0cc8ad3831" @@ -3963,6 +4273,13 @@ conventional-commits-filter@^1.1.6: is-subset "^0.1.1" modify-values "^1.0.0" +conventional-commits-filter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.0.tgz#a0ce1d1ff7a1dd7fab36bee8e8256d348d135651" + dependencies: + is-subset "^0.1.1" + modify-values "^1.0.0" + conventional-commits-parser@^2.1.7: version "2.1.7" resolved "http://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e" @@ -3975,6 +4292,18 @@ conventional-commits-parser@^2.1.7: through2 "^2.0.0" trim-off-newlines "^1.0.0" +conventional-commits-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.0.tgz#7f604549a50bd8f60443fbe515484b1c2f06a5c4" + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.0" + lodash "^4.2.1" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + trim-off-newlines "^1.0.0" + conventional-recommended-bump@^2.0.6: version "2.0.9" resolved "http://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-2.0.9.tgz#7392421e7d0e3515f3df2040572a23cc73a68a93" @@ -3988,6 +4317,19 @@ conventional-recommended-bump@^2.0.6: meow "^4.0.0" q "^1.5.1" +conventional-recommended-bump@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-4.0.1.tgz#304a45a412cfec050a10ea2e7e4a89320eaf3991" + dependencies: + concat-stream "^1.6.0" + conventional-changelog-preset-loader "^2.0.1" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.0.0" + git-raw-commits "^2.0.0" + git-semver-tags "^2.0.0" + meow "^4.0.0" + q "^1.5.1" + convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -4176,14 +4518,14 @@ crypto-browserify@3.12.0, crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@3.1.9-1, crypto-js@^3.1.9-1: - version "3.1.9-1" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.9-1.tgz#fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8" - crypto-js@^3.1.4, crypto-js@^3.1.5: version "3.1.8" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.8.tgz#715f070bf6014f2ae992a98b3929258b713f08d5" +crypto-js@^3.1.9-1: + version "3.1.9-1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.9-1.tgz#fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8" + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -4327,10 +4669,6 @@ csstype@^2.2.0: version "2.4.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.4.2.tgz#158e36c69566bf968da63d0ba14eda1c20e8643a" -csv-parse@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-1.2.4.tgz#cbf676e355226625888c6432400b83f07e75cc2e" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -4391,10 +4729,6 @@ dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" -dbug@~0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/dbug/-/dbug-0.4.2.tgz#32b4b3105e8861043a6f9ac755d80e542d365b31" - debounce@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" @@ -4526,7 +4860,7 @@ deep-eql@^3.0.0: dependencies: type-detect "^4.0.0" -deep-equal@^1.0.0, deep-equal@^1.0.1, deep-equal@~1.0.1: +deep-equal@^1.0.1, deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -5065,6 +5399,10 @@ enzyme@^3.6.0: rst-selector-parser "^2.2.3" string.prototype.trim "^1.1.2" +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + errno@^0.1.1, errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -5148,7 +5486,7 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.1: d "1" es5-ext "~0.10.14" -escape-html@1.0.3, escape-html@~1.0.3: +escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -5434,13 +5772,6 @@ ethereum-common@^0.0.18: version "0.0.18" resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" -ethereum-types@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-0.0.2.tgz#6ef6faf46a24697cbf66b6c8a0ecf2095ce58c38" - dependencies: - "@types/node" "^8.0.53" - bignumber.js "~4.1.0" - ethereumjs-abi@0.6.5, ethereumjs-abi@^0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" @@ -5482,14 +5813,6 @@ ethereumjs-block@~1.2.2: ethereumjs-util "^4.0.1" merkle-patricia-tree "^2.1.2" -ethereumjs-blockstream@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ethereumjs-blockstream/-/ethereumjs-blockstream-5.0.0.tgz#63bfe9185757329a32822d5815562eb1dcd75d71" - dependencies: - immutable "3.8.2" - source-map-support "0.5.6" - uuid "3.2.1" - ethereumjs-blockstream@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/ethereumjs-blockstream/-/ethereumjs-blockstream-6.0.0.tgz#79d726d1f358935eb65195e91d40344c31e87eff" @@ -5512,7 +5835,17 @@ ethereumjs-tx@^1.0.0, ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@ ethereum-common "^0.0.18" ethereumjs-util "^5.0.0" -ethereumjs-util@5.1.5, ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5: +ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0, ethereumjs-util@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6" + dependencies: + bn.js "^4.8.0" + create-hash "^1.1.2" + keccakjs "^0.2.0" + rlp "^2.0.0" + secp256k1 "^3.0.1" + +ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5: version "5.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.1.5.tgz#2f02575852627d45622426f25ee4a0b5f377f27a" dependencies: @@ -5524,16 +5857,6 @@ ethereumjs-util@5.1.5, ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumj safe-buffer "^5.1.1" secp256k1 "^3.0.1" -ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0, ethereumjs-util@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6" - dependencies: - bn.js "^4.8.0" - create-hash "^1.1.2" - keccakjs "^0.2.0" - rlp "^2.0.0" - secp256k1 "^3.0.1" - ethereumjs-util@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642" @@ -5603,21 +5926,6 @@ ethereumjs-wallet@~0.6.0: utf8 "^3.0.0" uuid "^3.3.2" -ethers@3.0.22: - version "3.0.22" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-3.0.22.tgz#7fab1ea16521705837aa43c15831877b2716b436" - dependencies: - aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.3.3" - hash.js "^1.0.0" - inherits "2.0.1" - js-sha3 "0.5.7" - scrypt-js "2.0.3" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - ethers@~4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.4.tgz#d3f85e8b27f4b59537e06526439b0fb15b44dc65" @@ -5683,10 +5991,6 @@ eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" -eventemitter3@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.0.0.tgz#fc29ecf233bd19fbd527bb4089bbf665dc90c1e3" - eventemitter3@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" @@ -5754,6 +6058,18 @@ execa@^0.9.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exenv@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -5875,6 +6191,14 @@ external-editor@^2.0.4, external-editor@^2.1.0: iconv-lite "^0.4.17" tmp "^0.0.33" +external-editor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -5996,7 +6320,7 @@ fetch-ponyfill@^4.0.0: dependencies: node-fetch "~1.7.1" -figgy-pudding@^3.1.0, figgy-pudding@^3.5.1: +figgy-pudding@^3.1.0, figgy-pudding@^3.2.1, figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -6020,7 +6344,7 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-type@3.9.0, file-type@^3.6.0, file-type@^3.8.0: +file-type@^3.6.0, file-type@^3.8.0: version "3.9.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" @@ -6043,10 +6367,6 @@ fileset@^2.0.2: glob "^7.0.3" minimatch "^3.0.3" -filesize@3.5.11: - version "3.5.11" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" - fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -6504,6 +6824,10 @@ generic-pool@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.0.4.tgz#f9718deda82fa125ed5c43e341c9a215a766d9a3" +genfun@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1" + get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -6545,6 +6869,12 @@ get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -6575,6 +6905,16 @@ git-raw-commits@^1.3.6: split2 "^2.0.0" through2 "^2.0.0" +git-raw-commits@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + git-remote-origin-url@^2.0.0: version "2.0.0" resolved "http://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" @@ -6589,6 +6929,13 @@ git-semver-tags@^1.3.6: meow "^4.0.0" semver "^5.5.0" +git-semver-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.0.tgz#c218fd895bdf8e8e02f6bde555b2c3893ac73cd7" + dependencies: + meow "^4.0.0" + semver "^5.5.0" + gitconfiglocal@^1.0.0: version "1.0.0" resolved "http://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" @@ -6697,6 +7044,17 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.3: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~3.1.21: version "3.1.21" resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" @@ -6928,7 +7286,7 @@ handle-thing@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" -handlebars@4.0.11, handlebars@^4.0.1, handlebars@^4.0.11, handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: +handlebars@^4.0.1, handlebars@^4.0.11, handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" dependencies: @@ -6953,7 +7311,7 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" -har-validator@~5.0.2, har-validator@~5.0.3: +har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" dependencies: @@ -7009,7 +7367,7 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" -has-unicode@^2.0.0: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -7206,7 +7564,7 @@ html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" -htmlparser2@^3.9.0, htmlparser2@^3.9.1: +htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" dependencies: @@ -7217,6 +7575,10 @@ htmlparser2@^3.9.0, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -7247,6 +7609,13 @@ http-parser-js@>=0.4.0: version "0.4.11" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + dependencies: + agent-base "4" + debug "3.1.0" + http-proxy-middleware@~0.18.0: version "0.18.0" resolved "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" @@ -7263,10 +7632,6 @@ http-proxy@^1.16.2: eventemitter3 "1.x.x" requires-port "1.x.x" -http-reasons@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/http-reasons/-/http-reasons-0.1.0.tgz#a953ca670078669dde142ce899401b9d6e85d3b4" - http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -7283,21 +7648,23 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -httpntlm@1.7.5: - version "1.7.5" - resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.7.5.tgz#cd1558ed93125418ece5bf824c1335675feedecc" - dependencies: - httpreq ">=0.4.22" - underscore "~1.7.0" - -httpreq@>=0.4.22: - version "0.4.24" - resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + dependencies: + ms "^2.0.0" + humble-localstorage@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/humble-localstorage/-/humble-localstorage-1.4.2.tgz#d05ab0d526c4edbddbf7c6a60df6ff5805283469" @@ -7324,9 +7691,9 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: safer-buffer ">= 2.1.2 < 3" @@ -7527,16 +7894,23 @@ inquirer@^5.1.0: strip-ansi "^4.0.0" through "^2.3.6" -intel@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/intel/-/intel-1.2.0.tgz#11d1147eb6b3f4582bdf5337b37d541584e9e41e" +inquirer@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" dependencies: - chalk "^1.1.0" - dbug "~0.4.2" - stack-trace "~0.0.9" - strftime "~0.10.0" - symbol "~0.3.1" - utcstring "~0.1.0" + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.0" + figures "^2.0.0" + lodash "^4.17.10" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.1.0" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" internal-ip@^3.0.1: version "3.0.1" @@ -7579,10 +7953,6 @@ ipaddr.js@^1.5.2: version "1.8.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427" -irregular-plurals@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766" - is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" @@ -7838,6 +8208,12 @@ is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + dependencies: + symbol-observable "^1.1.0" + is-odd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" @@ -8471,14 +8847,14 @@ js-sha3@0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" -js-sha3@0.7.0, js-sha3@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.7.0.tgz#0a5c57b36f79882573b2d84051f8bb85dd1bd63a" - js-sha3@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.3.1.tgz#86122802142f0828502a0d1dee1d95e253bb0243" +js-sha3@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.7.0.tgz#0a5c57b36f79882573b2d84051f8bb85dd1bd63a" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -8551,7 +8927,7 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -8658,10 +9034,6 @@ jsonschema@*, jsonschema@1.2.4, jsonschema@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.4.tgz#a46bac5d3506a254465bc548876e267c6d0d6464" -jsonschema@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.2.tgz#83ab9c63d65bf4d596f91d81195e78772f6452bc" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -8854,6 +9226,28 @@ left-pad@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" +lerna@^3.0.0-beta.25: + version "3.4.3" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.4.3.tgz#501454efb453c65c305802d370ee337f7298787e" + dependencies: + "@lerna/add" "^3.4.1" + "@lerna/bootstrap" "^3.4.1" + "@lerna/changed" "^3.4.1" + "@lerna/clean" "^3.3.2" + "@lerna/cli" "^3.2.0" + "@lerna/create" "^3.4.1" + "@lerna/diff" "^3.3.0" + "@lerna/exec" "^3.3.2" + "@lerna/import" "^3.3.1" + "@lerna/init" "^3.3.0" + "@lerna/link" "^3.3.0" + "@lerna/list" "^3.3.2" + "@lerna/publish" "^3.4.3" + "@lerna/run" "^3.3.2" + "@lerna/version" "^3.4.1" + import-local "^1.0.0" + npmlog "^4.1.2" + less-loader@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" @@ -8960,6 +9354,15 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libnpmaccess@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.0.tgz#33cc9c8a5cb53e87d06bf2e547c2eba974f619af" + dependencies: + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^3.8.0" + liftoff@^2.1.0: version "2.5.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" @@ -8973,10 +9376,6 @@ liftoff@^2.1.0: rechoir "^0.6.2" resolve "^1.1.7" -liquid-json@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/liquid-json/-/liquid-json-0.3.1.tgz#9155a18136d8a6b2615e5f16f9a2448ab6b50eea" - listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" @@ -8994,6 +9393,19 @@ listr-update-renderer@^0.2.0: log-update "^1.0.2" strip-ansi "^3.0.1" +listr-update-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + listr-verbose-renderer@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" @@ -9024,6 +9436,20 @@ listr@^0.12.0: stream-to-observable "^0.1.0" strip-ansi "^3.0.1" +listr@^0.14.1: + version "0.14.2" + resolved "https://registry.npmjs.org/listr/-/listr-0.14.2.tgz#cbe44b021100a15376addfc2d79349ee430bfe14" + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.4.0" + listr-verbose-renderer "^0.4.0" + p-map "^1.1.1" + rxjs "^6.1.0" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -9180,10 +9606,6 @@ lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - lodash.find@^4.3.0: version "4.6.0" resolved "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" @@ -9302,7 +9724,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash.values@4.3.0, lodash.values@^4.3.0: +lodash.values@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" @@ -9312,19 +9734,11 @@ lodash.words@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash@4.17.10, lodash@^4.17.10: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" - -lodash@4.17.2: - version "4.17.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" - -lodash@4.17.4, lodash@=4.17.4: +lodash@=4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@^3.10.1, lodash@^3.3.1, lodash@^3.6.0, lodash@^3.7.0: +lodash@^3.3.1, lodash@^3.6.0, lodash@^3.7.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -9336,6 +9750,10 @@ lodash@^4.14.0, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lo version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" +lodash@^4.17.10: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" @@ -9434,7 +9852,7 @@ lru-cache@^4.0.1, lru-cache@^4.1.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^4.1.3: +lru-cache@^4.1.2, lru-cache@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: @@ -9475,6 +9893,22 @@ make-error@^1.1.1: version "1.3.4" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" +make-fetch-happen@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" + dependencies: + agentkeepalive "^3.4.1" + cacache "^11.0.1" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + lru-cache "^4.1.2" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -9645,6 +10079,20 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -9733,26 +10181,10 @@ miller-rabin@^4.0.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - mime-db@~1.35.0: version "1.35.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" -mime-format@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mime-format/-/mime-format-2.0.0.tgz#e29f8891e284d78270246f0050d6834bdbbe1332" - dependencies: - charset "^1.0.0" - -mime-types@2.1.17: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" - mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" @@ -9988,6 +10420,10 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -10093,33 +10529,6 @@ neo-async@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" -newman@^3.9.3: - version "3.9.3" - resolved "https://registry.yarnpkg.com/newman/-/newman-3.9.3.tgz#939356026942474ba15482bd37a15c60bb200ca0" - dependencies: - async "2.6.0" - cli-progress "1.7.0" - cli-table2 "0.2.0" - colors "1.1.2" - commander "2.13.0" - csv-parse "1.2.4" - eventemitter3 "3.0.0" - filesize "3.5.11" - handlebars "4.0.11" - lodash "4.17.2" - mkdirp "0.5.1" - parse-json "3.0.0" - postman-collection "3.0.7" - postman-collection-transformer "2.5.4" - postman-request "2.81.1-postman.4" - postman-runtime "7.1.3" - pretty-ms "3.1.0" - semver "5.5.0" - serialised-error "1.1.2" - shelljs "0.8.0" - word-wrap "1.2.3" - xmlbuilder "9.0.4" - next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -10144,26 +10553,20 @@ no-case@^2.2.0, no-case@^2.3.2: dependencies: lower-case "^1.1.1" -nock@^9.2.3: - version "9.2.5" - resolved "https://registry.yarnpkg.com/nock/-/nock-9.2.5.tgz#c131fc8d3c4723f386be0269739638be84733f2f" - dependencies: - chai "^4.1.2" - debug "^3.1.0" - deep-equal "^1.0.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.5" - mkdirp "^0.5.0" - propagate "^1.0.0" - qs "^6.5.1" - semver "^5.5.0" - node-abi@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986" dependencies: semver "^5.4.1" +node-fetch-npm@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + node-fetch@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.1.tgz#369ca70b82f50c86496104a6c776d274f4e4a2d4" @@ -10245,12 +10648,6 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-oauth1@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/node-oauth1/-/node-oauth1-1.2.2.tgz#fffb2813a88c2770711332ad0e5487b4927644a4" - dependencies: - crypto-js "3.1.9-1" - node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" @@ -10282,10 +10679,6 @@ node-pre-gyp@^0.6.39: tar "^2.2.1" tar-pack "^3.4.0" -node-uuid@^1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - nodemon@^1.11.0: version "1.17.3" resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.17.3.tgz#3b0bbc2ee05ccb43b1aef15ba05c63c7bc9b8530" @@ -10338,7 +10731,7 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, "normalize-package-data@~1.0.1 || ^2.0.0": +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, "normalize-package-data@~1.0.1 || ^2.0.0": version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -10400,7 +10793,7 @@ npm-lifecycle@^2.0.0: hosted-git-info "^2.1.5" semver "^5.1.0" -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0: +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: version "6.1.0" resolved "http://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" dependencies: @@ -10409,6 +10802,13 @@ npm-lifecycle@^2.0.0: semver "^5.5.0" validate-npm-package-name "^3.0.0" +npm-packlist@^1.1.10: + version "1.1.12" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-packlist@^1.1.6: version "1.1.11" resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" @@ -10416,6 +10816,13 @@ npm-packlist@^1.1.6: ignore-walk "^3.0.1" npm-bundled "^1.0.1" +npm-pick-manifest@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz#dc381bdd670c35d81655e1d5a94aa3dd4d87fce5" + dependencies: + npm-package-arg "^6.0.0" + semver "^5.4.1" + npm-registry-client@7.0.9: version "7.0.9" resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.0.9.tgz#1baf86ee5285c4e6d38d4556208ded56049231bb" @@ -10435,6 +10842,17 @@ npm-registry-client@7.0.9: optionalDependencies: npmlog "~2.0.0" +npm-registry-fetch@^3.0.0, npm-registry-fetch@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz#aa7d9a7c92aff94f48dba0984bdef4bd131c88cc" + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^4.1.3" + make-fetch-happen "^4.0.1" + npm-package-arg "^6.1.0" + npm-run-all@^4.1.2, npm-run-all@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.3.tgz#49f15b55a66bb4101664ce270cb18e7103f8f185" @@ -10557,10 +10975,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-hash@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.0.tgz#76d9ba6ff113cf8efc0d996102851fe6723963e2" - object-inspect@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" @@ -10881,6 +11295,10 @@ p-map@^1.1.1, p-map@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" +p-pipe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -10914,6 +11332,38 @@ package-json@^4.0.0, package-json@^4.0.1: registry-url "^3.0.3" semver "^5.1.0" +pacote@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.1.0.tgz#59810859bbd72984dcb267269259375d32f391e5" + dependencies: + bluebird "^3.5.1" + cacache "^11.0.2" + figgy-pudding "^3.2.1" + get-stream "^3.0.0" + glob "^7.1.2" + lru-cache "^4.1.3" + make-fetch-happen "^4.0.1" + minimatch "^3.0.4" + minipass "^2.3.3" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.10" + npm-pick-manifest "^2.1.0" + npm-registry-fetch "^3.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.5.0" + ssri "^6.0.0" + tar "^4.4.3" + unique-filename "^1.1.0" + which "^1.3.0" + pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -10981,12 +11431,6 @@ parse-headers@^2.0.0: for-each "^0.3.2" trim "0.0.1" -parse-json@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" - dependencies: - error-ex "^1.3.1" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -11000,10 +11444,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-ms@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -11193,12 +11633,6 @@ pkginfo@0.x.x: version "0.4.1" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" -plur@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" - dependencies: - irregular-plurals "^1.0.0" - pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" @@ -11483,117 +11917,6 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^5.3.0" -postman-collection-transformer@2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/postman-collection-transformer/-/postman-collection-transformer-2.5.4.tgz#4e715a9913340621a9fc0e9a5a0373b22e9a9d9a" - dependencies: - commander "2.12.2" - inherits "2.0.3" - intel "1.2.0" - lodash "4.17.4" - semver "5.4.1" - strip-json-comments "2.0.1" - -postman-collection@3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/postman-collection/-/postman-collection-3.0.6.tgz#3bc2307158a783964a473cac82f20d26ffdf5500" - dependencies: - "8fold-marked" "0.3.9" - escape-html "1.0.3" - file-type "3.9.0" - http-reasons "0.1.0" - iconv-lite "0.4.19" - liquid-json "0.3.1" - lodash "4.17.4" - mime-format "2.0.0" - mime-types "2.1.17" - postman-url-encoder "1.0.1" - sanitize-html "1.15.0" - semver "5.4.1" - uuid "3.1.0" - -postman-collection@3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/postman-collection/-/postman-collection-3.0.7.tgz#699496583ff61443da8a4e0314e58ee6d10442a3" - dependencies: - "8fold-marked" "0.3.9" - escape-html "1.0.3" - file-type "3.9.0" - http-reasons "0.1.0" - iconv-lite "0.4.19" - liquid-json "0.3.1" - lodash "4.17.4" - mime-format "2.0.0" - mime-types "2.1.17" - postman-url-encoder "1.0.1" - sanitize-html "1.15.0" - semver "5.4.1" - uuid "3.1.0" - -postman-request@2.81.1-postman.4: - version "2.81.1-postman.4" - resolved "https://registry.yarnpkg.com/postman-request/-/postman-request-2.81.1-postman.4.tgz#be8f60541539da13739d77b670b9fca6f1aecf83" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~5.0.2" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - postman-url-encoder "1.0.1" - qs "~6.4.0" - safe-buffer "^5.0.1" - stream-length "^1.0.2" - stringstream "~0.0.4" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -postman-runtime@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/postman-runtime/-/postman-runtime-7.1.3.tgz#e0c5dfc40dd7d39a2f71519705c97afde35d6f8c" - dependencies: - async "2.6.0" - aws4 "1.6.0" - btoa "1.1.2" - crypto-js "3.1.9-1" - eventemitter3 "3.0.0" - hawk "3.1.3" - http-reasons "0.1.0" - httpntlm "1.7.5" - inherits "2.0.3" - lodash "4.17.4" - node-oauth1 "1.2.2" - postman-collection "3.0.6" - postman-request "2.81.1-postman.4" - postman-sandbox "3.0.4" - resolve-from "4.0.0" - serialised-error "1.1.2" - uuid "3.1.0" - -postman-sandbox@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postman-sandbox/-/postman-sandbox-3.0.4.tgz#d011b50d3ec8a8075405d219e1659dbdec354997" - dependencies: - inherits "2.0.3" - lodash "4.17.4" - uuid "3.1.0" - uvm "1.7.0" - -postman-url-encoder@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postman-url-encoder/-/postman-url-encoder-1.0.1.tgz#a094a42e9415ff0bbfdce0eaa8e6011d449ee83c" - prebuild-install@^2.2.2: version "2.5.3" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" @@ -11658,13 +11981,6 @@ pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" -pretty-ms@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-3.1.0.tgz#e9cac9c76bf6ee52fe942dd9c6c4213153b12881" - dependencies: - parse-ms "^1.0.0" - plur "^2.1.2" - prismjs@^1.15.0: version "1.15.0" resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" @@ -11702,6 +12018,13 @@ promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + promise-to-callback@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" @@ -11758,14 +12081,16 @@ prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, loose-envify "^1.3.1" object-assign "^4.1.1" -propagate@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/propagate/-/propagate-1.0.0.tgz#00c2daeedda20e87e3782b344adba1cddd6ad709" - proto-list@~1.2.1: version "1.2.4" resolved "http://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" +protoduck@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.0.tgz#752145e6be0ad834cb25716f670a713c860dce70" + dependencies: + genfun "^4.0.1" + proxy-addr@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" @@ -11919,7 +12244,7 @@ q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" -qs@6.5.1, qs@^6.5.1, qs@~6.5.1: +qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" @@ -12201,9 +12526,16 @@ react-router@^4.2.0: prop-types "^15.5.4" warning "^3.0.0" -react-scroll@0xproject/react-scroll#similar-to-pr-330: +react-scroll@0xproject/react-scroll#pr-330-and-replace-state: + version "1.7.11" + resolved "https://codeload.github.com/0xproject/react-scroll/tar.gz/d2afc2729dc09980e4113d8c38a1b012ba180d81" + dependencies: + lodash.throttle "^4.1.1" + prop-types "^15.5.8" + +react-scroll@0xproject/react-scroll#similar-to-pr-330-but-with-replace-state: version "1.7.10" - resolved "https://codeload.github.com/0xproject/react-scroll/tar.gz/f28a6c51800152fde11e7362383992aa60a15703" + resolved "https://codeload.github.com/0xproject/react-scroll/tar.gz/0f625b270d7e966313cac8b811c0ae807b37e170" dependencies: lodash.throttle "^4.1.1" prop-types "^15.5.8" @@ -12520,6 +12852,10 @@ redux-devtools-extension@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.2.tgz#e0f9a8e8dfca7c17be92c7124958a3b94eb2911d" +redux-devtools-extension@^2.13.5: + version "2.13.5" + resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.5.tgz#3ff34f7227acfeef3964194f5f7fc2765e5c5a39" + redux@*, redux@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.0.tgz#aa698a92b729315d22b34a0553d7e6533555cc03" @@ -12805,10 +13141,6 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" -require-from-string@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" - require-from-string@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" @@ -12849,10 +13181,6 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@4.0.0, resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -12865,6 +13193,10 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolve-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" @@ -12919,6 +13251,10 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + retry@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.8.0.tgz#2367628dc0edb247b1eab649dc53ac8628ac2d5f" @@ -13051,6 +13387,12 @@ rxjs@^5.5.2: dependencies: symbol-observable "1.0.1" +rxjs@^6.1.0: + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -13088,15 +13430,6 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" -sanitize-html@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.15.0.tgz#d101a62c9fe0347486badc6cd6ed72daa0a82ced" - dependencies: - htmlparser2 "^3.9.0" - lodash.escaperegexp "^4.1.2" - srcset "^1.0.0" - xtend "^4.0.0" - sax@1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -13137,10 +13470,6 @@ scrypt-async@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/scrypt-async/-/scrypt-async-1.3.1.tgz#a11fd6fac981b4b823ee01dee0221169500ddae9" -scrypt-js@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" - scrypt-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" @@ -13230,7 +13559,7 @@ semver-sort@0.0.4: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" -"semver@2 || 3 || 4 || 5", semver@5.4.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@~5.4.1: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@~5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -13279,14 +13608,6 @@ sequencify@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" -serialised-error@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/serialised-error/-/serialised-error-1.1.2.tgz#b5c3822196f873feb0c76587e1d6dfa6790ade97" - dependencies: - node-uuid "^1.4.7" - object-hash "^1.1.2" - stack-trace "0.0.9" - serialize-javascript@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" @@ -13408,14 +13729,6 @@ shell-quote@^1.4.3, shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shelljs@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.0.tgz#12f561c52ec5d0d3315af15616c011a18ff80d59" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shelljs@^0.7.3: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" @@ -13516,6 +13829,10 @@ slugify@^1.2.1: version "1.3.1" resolved "https://registry.npmjs.org/slugify/-/slugify-1.3.1.tgz#f572127e8535329fbc6c1edb74ab856b61ad7de2" +smart-buffer@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" + snake-case@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" @@ -13579,15 +13896,19 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -solc@0.4.23, solc@^0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.23.tgz#54a0ff4015827b32fddb62c0a418b5247310a58e" +socks-proxy-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" dependencies: - fs-extra "^0.30.0" - memorystream "^0.3.1" - require-from-string "^1.1.0" - semver "^5.3.0" - yargs "^4.7.1" + agent-base "~4.2.0" + socks "~2.2.0" + +socks@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.1.tgz#68ad678b3642fbc5d99c64c165bc561eab0215f9" + dependencies: + ip "^1.1.5" + smart-buffer "^4.0.1" solc@0.4.24, solc@^0.4.24: version "0.4.24" @@ -13609,6 +13930,16 @@ solc@^0.4.2: semver "^5.3.0" yargs "^4.7.1" +solc@^0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.23.tgz#54a0ff4015827b32fddb62c0a418b5247310a58e" + dependencies: + fs-extra "^0.30.0" + memorystream "^0.3.1" + require-from-string "^1.1.0" + semver "^5.3.0" + yargs "^4.7.1" + solhint@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/solhint/-/solhint-1.2.1.tgz#59a1416cef94da38d587f768a73536d6e3403dd3" @@ -13803,13 +14134,6 @@ sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" -srcset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-1.0.0.tgz#a5669de12b42f3b1d5e83ed03c71046fc48f41ef" - dependencies: - array-uniq "^1.0.2" - number-is-nan "^1.0.0" - sshpk@^1.7.0: version "1.14.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" @@ -13836,11 +14160,7 @@ ssri@^6.0.0: dependencies: figgy-pudding "^3.5.1" -stack-trace@0.0.9: - version "0.0.9" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" - -stack-trace@0.0.x, stack-trace@~0.0.9: +stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" @@ -13913,12 +14233,6 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stream-length/-/stream-length-1.0.2.tgz#8277f3cbee49a4daabcfdb4e2f4a9b5e9f2c9f00" - dependencies: - bluebird "^2.6.2" - stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -13934,10 +14248,6 @@ stream-to-pull-stream@^1.7.1: looper "^3.0.0" pull-stream "^3.2.3" -strftime@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/strftime/-/strftime-0.10.0.tgz#b3f0fa419295202a5a289f6d6be9f4909a617193" - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -14065,7 +14375,7 @@ strip-indent@^2.0.0: version "2.0.0" resolved "http://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -14079,6 +14389,15 @@ strong-log-transformer@^1.0.6: moment "^2.6.0" through "^2.3.4" +strong-log-transformer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.0.0.tgz#fa6d8e0a9e62b3c168c3cad5ae5d00dc97ba26cc" + dependencies: + byline "^5.0.0" + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + style-loader@0.23.x: version "0.23.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.0.tgz#8377fefab68416a2e05f1cabd8c3a3acfcce74f1" @@ -14249,10 +14568,6 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -symbol@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/symbol/-/symbol-0.3.1.tgz#b6f9a900d496a57f02408f22198c109dda063041" - table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" @@ -14339,9 +14654,9 @@ tar@^2.0.0, tar@^2.1.1, tar@^2.2.1: fstream "^1.0.2" inherits "2" -tar@^4: +tar@^4, tar@^4.4.3: version "4.4.6" - resolved "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" @@ -15025,10 +15340,6 @@ underscore@~1.4.4: version "1.4.4" resolved "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - unherit@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" @@ -15147,7 +15458,7 @@ upath@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" -update-notifier@^2.3.0: +update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" dependencies: @@ -15234,10 +15545,6 @@ user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -utcstring@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/utcstring/-/utcstring-0.1.0.tgz#430fd510ab7fc95b5d5910c902d79880c208436b" - utf8@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768" @@ -15286,7 +15593,7 @@ uuid@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" -uuid@3.0.1, uuid@3.0.x, uuid@~3.0.0: +uuid@3.0.x, uuid@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" @@ -15306,15 +15613,6 @@ uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" -uvm@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/uvm/-/uvm-1.7.0.tgz#685d3a149ec7118fb73a73dfdc158ab46b0f0634" - dependencies: - circular-json "0.3.1" - inherits "2.0.3" - lodash "4.17.4" - uuid "3.0.1" - v8-compile-cache@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" @@ -15325,7 +15623,7 @@ v8flags@^2.0.2: dependencies: user-home "^1.1.1" -valid-url@1.0.9, valid-url@^1.0.9: +valid-url@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" @@ -15531,14 +15829,6 @@ web3-bzz@1.0.0-beta.34: swarm-js "0.1.37" underscore "1.8.3" -web3-core-helpers@1.0.0-beta.33: - version "1.0.0-beta.33" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.33.tgz#2af733e504db05e7c3648c1dacf577b0ec15dc43" - dependencies: - underscore "1.8.3" - web3-eth-iban "1.0.0-beta.33" - web3-utils "1.0.0-beta.33" - web3-core-helpers@1.0.0-beta.34: version "1.0.0-beta.34" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.34.tgz#b168da00d3e19e156bc15ae203203dd4dfee2d03" @@ -15591,15 +15881,6 @@ web3-core@1.0.0-beta.34: web3-core-requestmanager "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-eth-abi@1.0.0-beta.33: - version "1.0.0-beta.33" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.33.tgz#2221f7151643660032a4df340f612349168c824a" - dependencies: - bn.js "4.11.6" - underscore "1.8.3" - web3-core-helpers "1.0.0-beta.33" - web3-utils "1.0.0-beta.33" - web3-eth-abi@1.0.0-beta.34, web3-eth-abi@^1.0.0-beta.24: version "1.0.0-beta.34" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.34.tgz#034533e3aa2f7e59ff31793eaea685c0ed5af67a" @@ -15637,13 +15918,6 @@ web3-eth-contract@1.0.0-beta.34: web3-eth-abi "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-eth-iban@1.0.0-beta.33: - version "1.0.0-beta.33" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.33.tgz#1d73d0c5288a4565b1754a75b5fb3ea0b77a532f" - dependencies: - bn.js "4.11.6" - web3-utils "1.0.0-beta.33" - web3-eth-iban@1.0.0-beta.34: version "1.0.0-beta.34" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.34.tgz#9af458605867ccf74ea979aaf326b38ba6a5ba0c" @@ -15774,18 +16048,6 @@ web3-typescript-typings@^0.10.2: dependencies: bignumber.js "~4.1.0" -web3-utils@1.0.0-beta.33: - version "1.0.0-beta.33" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.33.tgz#e091b7994f09b714b0198a4057d3ad2eb8cbe238" - dependencies: - bn.js "4.11.6" - eth-lib "0.1.27" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randomhex "0.1.5" - underscore "1.8.3" - utf8 "2.1.1" - web3-utils@1.0.0-beta.34: version "1.0.0-beta.34" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.34.tgz#9411fc39aaef39ca4e06169f762297d9ff020970" @@ -15808,16 +16070,6 @@ web3@0.20.2: xhr2 "*" xmlhttprequest "*" -web3@0.20.6: - version "0.20.6" - resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.6.tgz#3e97306ae024fb24e10a3d75c884302562215120" - dependencies: - bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git" - crypto-js "^3.1.4" - utf8 "^2.1.1" - xhr2 "*" - xmlhttprequest "*" - web3@^0.18.0: version "0.18.4" resolved "https://registry.yarnpkg.com/web3/-/web3-0.18.4.tgz#81ec1784145491f2eaa8955b31c06049e07c5e7d" @@ -15985,8 +16237,8 @@ websocket@^1.0.24, websocket@^1.0.25: yaeti "^0.0.6" "websocket@git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible": - version "1.0.24" - resolved "git://github.com/frozeman/WebSocket-Node.git#7004c39c42ac98875ab61126e5b4a925430f592c" + version "1.0.26" + resolved "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" dependencies: debug "^2.2.0" nan "^2.3.3" @@ -16087,10 +16339,6 @@ winston@2.1.x: pkginfo "0.3.x" stack-trace "0.0.x" -word-wrap@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -16252,10 +16500,6 @@ xml2js@0.4.19: sax ">=0.6.0" xmlbuilder "~9.0.1" -xmlbuilder@9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f" - xmlbuilder@~9.0.1: version "9.0.7" resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" @@ -16302,7 +16546,7 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" -yargs-parser@10.x, yargs-parser@^10.1.0: +yargs-parser@10.x, yargs-parser@^10.0.0, yargs-parser@^10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" dependencies: |